Как я могу показать значок на панели, если (и пока) запущен определенный процесс?

У меня есть скрипт, который работает в фоновом режиме. Я хотел бы показать значок на панели (только), если она работает; он не должен показывать, если скрипт не запущен, как значок Dropbox.

Как мне этого добиться? Я установил Xubuntu 14.04.

3
задан 15 April 2016 в 14:21

2 ответа

Как показать значок в панели, если процесс работает

На основе (и объяснил в) этот ответ , мы можем довольно легко создать индикатор, который работает и Xubuntu и Единица или любой другой аромат, чтобы показать если процесс, сценарий или выполнение приложения или нет.

выполнения сценария:

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"
    
0
ответ дан 16 April 2016 в 00:21
  • 1
    @junel я обновил свой ответ для Вас. Тот файл не существует. Это было частью инструкций от их сайта, если у Вас был Mac. – Terrance 24 August 2017 в 12:52

В Xubuntu установите Универсальный плагин Панели контроля путем вставки следующего в терминале:

sudo apt-get install xfce4-genmon-plugin

От Универсальный плагин Монитора страница:
"Этот плагин циклически порождает обозначенный сценарий/программу, получает его вывод (stdout) и отображает получившую строку в панель. Строка может также содержать разметку для отображения изображения, панели, кнопки и персонализированной подсказки".

Набор следующий сценарий для выполнения использования Универсального плагина Панели контроля. Я рекомендую без Маркировки. Обязательно замените 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.

существуют также плагины для панели в Единице , что выставочная команда или сценарий производят. Однако у меня просто есть Xfce, таким образом, я не могу подтвердить конкретный. Я надеюсь, что все работает отлично.

0
ответ дан 16 April 2016 в 00:21
  • 1
    Отредактируйте свой ответ для показа то, что изменяет Вас сделанный получить его работа. Поскольку вещами является ответ, имеет ограниченное применение для людей с той же проблемой. – Garry Cairns 14 October 2017 в 22:23

Другие вопросы по тегам:

Похожие вопросы: