Como posso mostrar um ícone no painel se (e enquanto) um certo processo estiver sendo executado?

3

Eu tenho um script que funciona em segundo plano. Eu gostaria de mostrar um ícone no painel (apenas) se ele for executado; Ele não deve mostrar se o script não está em execução, assim como o ícone do Dropbox.

Como posso conseguir isso? Eu instalei Xubuntu 14.04 .

    
por joshsoj 14.04.2016 / 04:06

2 respostas

1

Como mostrar um ícone no painel se um processo for executado

Com base na (e explicada em) esta resposta , podemos facilmente criar um indicador, que é executado em ambos os Xubuntu e Unity ou qualquer outro sabor, para mostrar se um processo, um script ou um aplicativo é executado ou não.

O script

é executado:

Oscript

nãoéexecutado:

Noscript(indicador)abaixo,adicioneiumthreadparadetectaroprocessoparaoindicador:

#!/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()

Como usar

  1. Copie o script abaixo em um arquivo vazio, salve-o como show_proc.py
  2. Na seção principal do script, na linha:

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

    defina o caminho para seu script ou aplicativos

  3. Copie os dois ícones abaixo (clique com o botão direito - > salve como) e salve-os em um e no mesmo diretório que show_proc.py e exatamente como indicado abaixo

    green.png

    nocolor.png

    <-esteéumíconetransparente,masestálá:).movaocursoratéodedoaparecer...

  4. Agoratesteexecutarshow_proc.pypelocomando:

    python3/path/to/show_proc.py

    einicieseuscript

  5. Setudofuncionarbem,adicioneoseguinteaosaplicativossgtartup:

    /bin/bash-c"sleep 15 && python3 /path/to/show_proc.py"
    
por Jacob Vlijm 15.04.2016 / 10:57
1

No Xubuntu, instale o plug-in do painel Monitor genérico colando o seguinte no terminal:

sudo apt-get install xfce4-genmon-plugin

Do plug-in do Monitor genérico página:
"Este plugin gera ciclicamente o script / programa indicado, captura sua saída (stdout) e exibe a string resultante no painel. A string também pode conter marcação para exibir uma imagem, uma barra, um botão e uma dica personalizada. "

Defina o seguinte script para ser executado usando o plug-in do painel Monitor genérico. Eu recomendo sem um rótulo. Não se esqueça de substituir your_script pelo nome do seu script e adicionar o caminho ao seu ícone.

#!/bin/bash

status=$(pgrep your_script)

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

É interessante mencionar o Dropbox. Eu uso este plugin para o Dropbox.

Existem também plugins para o painel no Unity

    
por jbrock 15.04.2016 / 15:32