帮酷LOGO
  • 显示原文与译文双语对照的内容


问题:

我有一个在 background 中工作的脚本。 如果它运行,我想在面板中显示一个 icon ;它不显示脚本是否运行,就像 Dropbox 。

我如何实现这个? 我已经安装了 Xubuntu 14.04


回答 1:

如何在进程运行时显示面板中的icon

这个答案可以在任何时候运行,以显示进程。脚本或者应用程序的运行或者不运行,这是一个基于( 并解释了) 的应答。

脚本运行:

enter image description here

脚本不运行:

enter image description here

在脚本( 指示器) below 中,我添加了一个线程来检测该指示器的进程:

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

如何使用

  • 将脚本 below 复制到空文件中,将它的保存为 show_proc.py
  • 在脚本的头部部分,在行中:

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

    设置脚本或者应用程序的路径

  • 在一个目录中复制两个图标,并在一个和同一目录下保存它们,与 show_proc.py 相同,命名如下

    green.png

    enter image description here

    nocolor.png

    enter image description here 这是一个透明的icon,但是存在:。 将 cursor 移到上面,直到手指出现。

  • 现在,test-按以下命令运行 show_proc.py:

    python3/path/to/show_proc.py

    启动你的脚本

  • 如果一切正常,请将以下内容添加到sgtartup应用程序中:

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

回答 2:

在Xubuntu中,通过在终端粘贴以下命令来安装通用监视器面板插件:

sudo apt-get install xfce4-genmon-plugin

通用监视器插件页面:
这个插件循环生成指示脚本/程序,捕获它的输出( stdout ) 并将结果字符串显示在面板中。 字符串还可以包含显示图像。栏。按钮和个性化工具提示的标记。"

设置以下脚本以使用通用监视器面板插件运行。 我建议没有标签。 确保用脚本的名称替换 your_script,并将路径添加到 icon的路径中。

#!/bin/bash
status=$(pgrep your_script)
if [ -n"$status" ]; then
 echo"<img>/path/to/your/icon.png</img>"
else
 echo""
fi

有趣的是你提到了 Dropbox 。 我使用这个插件的Dropbox 。

Unity中还有用于显示命令或者脚本输出的面板的插件。 但是,我只有Xfce所以我不能确认一个特定的。 我希望一切都能成功。





Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语