服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - Linux上为你的任务创建一个自定义的系统托盘指示器

Linux上为你的任务创建一个自定义的系统托盘指示器

2022-09-09 13:39M.hanny Sabbagh Linux

系统托盘图标如今仍是一个很神奇的功能。这篇文章主要介绍了Linux上为你的任务创建一个自定义的系统托盘指示器,需要的朋友可以参考下

Linux上为你的任务创建一个自定义的系统托盘指示器

系统托盘图标如今仍是一个很神奇的功能。只需要右击图标,然后选择想要的动作,你就可以大幅简化你的生活并且减少日常行为中的大量无用的点击。

一说到有用的系统托盘图标,我们很容易就想到 skype、dropbox 和 vlc:

然而系统托盘图标实际上要更有用得多;你可以根据自己的需求创建自己的系统托盘图标。本指导将会教你通过简单的几个步骤来实现这一目的。

前置条件

我们将要用 python 来实现一个自定义的系统托盘指示器。python 可能已经默安装在所有主流的 linux 发行版中了,因此你只需要确定一下它已经被安装好了(此处使用版本为 2.7)。另外,我们还需要安装好 gir1.2-appindicator3 包。该库能够让我们很容易就能创建系统图标指示器。

在 ubuntu/mint/debian 上安装:

sudo apt-get install gir1.2-appindicator3

在 fedora 上安装:

sudo dnf install libappindicator-gtk3

对于其他发行版,只需要搜索包含 “appindicator” 的包就行了。

在 gnome shell 3.26 开始,系统托盘图标被删除了。你需要安装 这个扩展 (或者其他扩展)来为桌面启用该功能。否则你无法看到我们创建的指示器。

基础代码

下面是该指示器的基础代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/python
import os
from gi.repository import gtk as gtk, appindicator3 as appindicator
def main():
 indicator = appindicator.indicator.new("customtray", "semi-starred-symbolic", appindicator.indicatorcategory.application_status)
 indicator.set_status(appindicator.indicatorstatus.active)
 indicator.set_menu(menu())
 gtk.main()
def menu():
 menu = gtk.menu()
 command_one = gtk.menuitem('my notes')
 command_one.connect('activate', note)
 menu.append(command_one)
 exittray = gtk.menuitem('exit tray')
 exittray.connect('activate', quit)
 menu.append(exittray)
 menu.show_all()
 return menu
def note(_):
 os.system("gedit $home/documents/notes.txt")
def quit(_):
 gtk.main_quit()
if __name__ == "__main__":
 main()

我们待会会解释一下代码是怎么工作的。但是现在,让我们将该文本保存为 tray.py ,然后使用 python 运行之:

python tray.py

我们会看到指示器运行起来了,如下图所示:

Linux上为你的任务创建一个自定义的系统托盘指示器

create a custom system tray indicator for your tasks on linux

现在,让我们解释一下这个魔法的原理:

前三行代码仅仅用来指明 python 的路径并且导入需要的库。

def main() :此为指示器的主函数。该函数的代码用来初始化并创建指示器。

?
1
indicator = appindicator.indicator.new("customtray""semi-starred-symbolic"

appindicator.indicatorcategory.application_status) :这里我们指明创建一个名为 customtray 的新指示器。这是指示器的唯一名称,这样系统就不会与其他运行中的指示器搞混了。同时我们使用名为 semi-starred-symbolic 的图标作为指示器的默认图标。你可以将之改成任何其他值;比如 firefox (如果你希望该指示器使用 firefox 的图标),或任何其他你想用的图标名。最后与 application_status 相关的部分是指明指示器类别/范围的常规代码。
indicator.set_status(appindicator.indicatorstatus.active) :这一行激活指示器。

indicator.set_menu(menu()) :这里说的是我们想使用 menu() 函数(我们会在后面定义) 来为我们的指示器创建菜单项。这很重要,可以让你右击指示器后看到一个可以实施行为的列表。

gtk.main() :运行 gtk 主循环。

在 menu() 中我们定义了想要指示器提供的行为或项目。 command_one = gtk.menuitem('my notes') 仅仅使用文本 “my notes” 来初始化第一个菜单项,接下来 command_one.connect('activate',note) 将菜单的 activate 信号与后面定义的 note() 函数相连接;换句话说,我们告诉我们的系统:“当该菜单项被点击,运行 note() 函数”。最后, menu.append(command_one) 将菜单项添加到列表中。
exittray 相关的行是为了创建一个退出的菜单项,以便让你在想要的时候关闭指示器。

menu.show_all() 以及 return menu 只是返回菜单项给指示器的常规代码。

在 note(_) 下面是点击 “my notes” 菜单项时需要执行的代码。这里只是 os.system("gedit $home/documents/notes.txt") 这一句话; os.system 函数允许你在 python 中运行 shell 命令,因此这里我们写了一行命令来使用 gedit 打开家目录下 documents 目录中名为 notes.txt 的文件。例如,这个可以称为你今后的日常笔记程序了!

添加你所需要的任务

你只需要修改代码中的两块地方:

menu()

所以,比如说你想要创建一个新菜单项,在点击后,会使用 vlc 播放硬盘中某个特定的视频/音频文件?要做到这一点,只需要在第 17 行处添加下面三行内容:

?
1
2
3
command_two = gtk.menuitem('play video/audio')
command_two.connect('activate', play)
menu.append(command_two)

然后在第 30 行添加下面内容:

?
1
2
def play(_):
os.system("vlc /home/<username>/videos/somevideo.mp4")

将/home//videos/somevideo.mp4` 替换成你想要播放的视频/音频文件路径。现在保存该文件然后再次运行该指示器:

python tray.py

你将会看到:

Linux上为你的任务创建一个自定义的系统托盘指示器

create a custom system tray indicator for your tasks on linux

而且当你点击新创建的菜单项时,vlc 会开始播放!

要创建其他项目/任务,只需要重复上面步骤即可。但是要小心,需要用其他命令来替换 command_two ,比如 command_three ,这样在变量之间才不会产生冲突。然后定义新函数,就像 play(_) 函数那样。

可能性是无穷的;比如我用这种方法来从网上获取数据(使用 urllib2 库)并显示出来。我也用它来在后台使用 mpg123 命令播放 mp3 文件,而且我还定义了另一个菜单项来 killall mpg123 以随时停止播放音频。比如 steam 上的 cs:go 退出很费时间(窗口并不会自动关闭),因此,作为一个变通的方法,我只是最小化窗口然后点击某个自建的菜单项,它会执行 killall -9 csgo_linux64 命令。

你可以使用这个指示器来做任何事情:升级系统包、运行其他脚本——字面上的任何事情。

自动启动

我们希望系统托盘指示器能在系统启动后自动启动,而不用每次都手工运行。要做到这一点,只需要在自启动应用程序中添加下面命令即可(但是你需要将 tray.py 的路径替换成你自己的路径):

nohup python/home/<username>/tray.py&

下次重启系统,指示器会在系统启动后自动开始工作了!

结论

你现在知道了如何为你想要的任务创建自己的系统托盘指示器了。根据每天需要运行的任务的性质和数量,此方法可以节省大量时间。有些人偏爱从命令行创建别名,但是这需要你每次都打开终端窗口或者需要有一个可用的下拉式终端仿真器,而这里,这个系统托盘指示器一直在工作,随时可用。

你以前用过这个方法来运行你的任务吗?很想听听你的想法。

总结

以上所述是小编给大家介绍的linux上为你的任务创建一个自定义的系统托盘指示器,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

原文链接:http://os.51cto.com/art/201907/599109.htm

延伸 · 阅读

精彩推荐
  • LinuxLinux下dpkg命令常用方法整理

    Linux下dpkg命令常用方法整理

    这篇文章主要介绍了Linux下dpkg命令常用方法整理,文中以Ubuntu系统作为示例环境进行演示,需要的朋友可以参考下...

    未知3622019-05-20
  • LinuxLinux fd 系列 — socket fd 是什么?

    Linux fd 系列 — socket fd 是什么?

    什么是 socket fd ?粗糙的来讲,就是网络 fd,比如我们最常见的 C/S 客户端服务端的编程模式,就是网络通信的一种方式。...

    良许Linux5352021-09-15
  • LinuxLinux中关于控制进程的命令总结

    Linux中关于控制进程的命令总结

    程序是一组可执行的静态指令集,而进程(process)是一个执行中的程序实例。下面这篇文章主要给大家介绍了Linux中关于控制进程的一些命令,包括Linux如何查...

    Wing5202022-01-05
  • Linux举例讲解Linux中tcpdump工具的应用

    举例讲解Linux中tcpdump工具的应用

    这篇文章主要介绍了Linux中tcpdump工具的应用,tcpdump主要用于抓取网络数据包,需要的朋友可以参考下...

    推酷3942019-07-11
  • Linuxlinux下实时查看tomcat运行日志的方法

    linux下实时查看tomcat运行日志的方法

    下面小编就为大家带来一篇linux下实时查看tomcat运行日志的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起 小编过来看看吧...

    Linux教程网5952021-12-01
  • Linux4个打造多媒体和共享服务器的开源工具

    4个打造多媒体和共享服务器的开源工具

    在这个系列中,我将分享 21 个使用 Linux 的不同理由。这里有四个开源工具,可以将任何设备变成 Linux 服务器。...

    Linux中国6932021-03-10
  • Linux关于bash函数你可能不知道的一些事情(译)

    关于bash函数你可能不知道的一些事情(译)

    这篇文章主要给大家介绍了关于bash函数你可能不知道的一些事情,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需...

    程序师7452022-07-11
  • Linuxlinux中more命令使用介绍(逐页阅读)

    linux中more命令使用介绍(逐页阅读)

    more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上。 more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(...

    linux命令大全6822019-11-19