web-dev-qa-db-ja.com

特定のプロセスが実行されている場合(および実行中)にパネルにアイコンを表示するにはどうすればよいですか?

バックグラウンドで動作するスクリプトがあります。パネルが実行されている場合にのみ(のみ)パネルにアイコンを表示したいと思います。 Dropboxアイコンのように、スクリプトが実行されていない場合は表示されません。

どうすればこれを達成できますか? Xubuntu 14.04をインストールしました。

3
joshsoj

プロセスが実行されている場合にパネルにアイコンを表示する方法

この回答 に基づいて(および説明されている)、XubuntuとUnityまたはその他のフレーバーの両方で実行されるインジケーターを作成して、プロセス、スクリプト、またはアプリケーションが実行されるかどうか。

スクリプトの実行:

enter image description here

スクリプトは実行されません:

enter image description here

次のスクリプト(インジケーター)で、プロセスを検出するスレッドをインジケーターに追加しました。

#!/usr/bin/env python3
import subprocess
import os
import time
import signal
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('AppIndicator3', '0.1')
from gi.repository import Gtk, AppIndicator3, GObject
from threading import Thread

# --- set the path to the script below
script = "/path/to/script.sh"
#---

currpath = os.path.dirname(os.path.realpath(__file__))

def runs(script):
    # function to check if the process runs
    try:
        return subprocess.check_output(["pgrep", "-f", script]).decode("utf-8")
    except subprocess.CalledProcessError:
        pass

class Indicator():
    def __init__(self):
        self.app = 'show_proc'
        iconpath = currpath+"/nocolor.png"
        self.indicator = AppIndicator3.Indicator.new(
            self.app, iconpath,
            AppIndicator3.IndicatorCategory.OTHER)
        self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)       
        self.indicator.set_menu(self.create_menu())

        self.update = Thread(target=self.check_runs)
        # daemonize the thread to make the indicator stopable
        self.update.setDaemon(True)
        self.update.start()     

    def check_runs(self):
        # the function (thread), checking for the process to run
        runs1 = ""
        while True:
            time.sleep(1)
            runs2 = runs(script)
            # if there is a change in state, update the icon
            if runs1 != runs2:
                if runs2:
                    # set the icon to show
                    GObject.idle_add(
                        self.indicator.set_icon,
                        currpath+"/green.png",
                        priority=GObject.PRIORITY_DEFAULT
                        )
                else:
                    # set the icon to hide
                    GObject.idle_add(
                        self.indicator.set_icon,
                        currpath+"/nocolor.png",
                        priority=GObject.PRIORITY_DEFAULT
                        )
            runs1 = runs2


    def create_menu(self):
        menu = Gtk.Menu()
        # quit
        item_quit = Gtk.MenuItem('Quit')
        item_quit.connect('activate', self.stop)
        menu.append(item_quit)
        menu.show_all()
        return menu

    def stop(self, source):
        Gtk.main_quit()

Indicator()
GObject.threads_init()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()

使い方

  1. 以下のスクリプトを空のファイルにコピーし、show_proc.pyとして保存します
  2. スクリプトのヘッドセクションの次の行:

    # --- set the path to the script below
    script = "/path/to/script.sh"
    #---
    

    スクリプトまたはアプリケーションへのパスを設定します

  3. 下の両方のアイコンをコピー(右クリック->名前を付けて保存)し、それらをshow_proc.pyと同じディレクトリに保存し、指定どおりに正確に名前を付けます。以下

    green.png

    enter image description here

    nocolor.png

    enter image description here <-これは透明なアイコンですが、あります:)。指が現れるまでカーソルをその上に移動します...

  4. 次のコマンドでshow_proc.pyをテスト実行します。

    python3 /path/to/show_proc.py
    

    スクリプトを起動します

  5. すべてが正常に機能する場合は、sgtartupアプリケーションに次を追加します。

    /bin/bash -c "sleep 15 && python3 /path/to/show_proc.py"
    
1
Jacob Vlijm

Xubuntuで、ターミナルに次を貼り付けてGeneric Monitorパネルプラグインをインストールします。

Sudo apt-get install xfce4-genmon-plugin

Generic Monitorプラグイン ページから:
」このプラグインは、指定されたスクリプト/プログラムを周期的に生成し、その出力(stdout)をキャプチャし、結果の文字列をパネルに表示します。文字列には、画像、バー、ボタンツールチップ。」

Generic Monitorパネルプラグインを使用して実行するには、次のスクリプトを設定します。ラベルなしをお勧めします。必ずyour_scriptをスクリプトの名前に置き換え、アイコンへのパスを追加してください。

#!/bin/bash

status=$(pgrep your_script)

if [ -n "$status" ]; then
    echo "<img>/path/to/your/icon.png</img>"
else
    echo ""
fi

Dropboxについて言及するのは興味深いことです。 私はこのプラグインをDropboxに使用しています。

また、コマンドまたはスクリプトの出力を表示する nityのパネルのプラグイン もあります。ただし、Xfceがあるだけなので、特定のXfceを確認することはできません。すべてがうまくいくことを願っています。

1
jbrock