<sub id="rd9ph"><var id="rd9ph"></var></sub>

    <dl id="rd9ph"><nobr id="rd9ph"><menuitem id="rd9ph"></menuitem></nobr></dl>

      <sub id="rd9ph"></sub>

        <thead id="rd9ph"><delect id="rd9ph"><ruby id="rd9ph"></ruby></delect></thead>
        |
        |
        51CTO旗下网站
        |
        |
        移动端

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

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

        作者:M.hanny Sabbagh来源:Linux中国|2019-07-07 10:00

        https://s1.51cto.com/oss/201907/07/2e03a21933ee2e42e7b893ebc7abf6df.png-wh_651x-s_2860255163.png

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

        一说到有用的系统托盘图标,我们很容易就想到 Skype、Dropbox 和 VLC:

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

        前置条件

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

        在 Ubuntu/Mint/Debian 上安装:

        1. sudo apt-get install gir1.2-appindicator3

        在 Fedora 上安装:

        1. sudo dnf install libappindicator-gtk3

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

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

        基础代码

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

        1. #!/usr/bin/python
        2. import os
        3. from gi.repository import Gtk as gtk, AppIndicator3 as appindicator
        4. def main():
        5. indicator = appindicator.Indicator.new("customtray", "semi-starred-symbolic", appindicator.IndicatorCategory.APPLICATION_STATUS)
        6. indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
        7. indicator.set_menu(menu())
        8. gtk.main()
        9. def menu():
        10. menu = gtk.Menu()
        11. command_one = gtk.MenuItem('My Notes')
        12. command_one.connect('activate', note)
        13. menu.append(command_one)
        14. exittray = gtk.MenuItem('Exit Tray')
        15. exittray.connect('activate', quit)
        16. menu.append(exittray)
        17. menu.show_all()
        18. return menu
        19. def note(_):
        20. os.system("gedit $HOME/Documents/notes.txt")
        21. def quit(_):
        22. gtk.main_quit()
        23. if __name__ == "__main__":
        24. main()

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

        1. python tray.py

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

        Create a Custom System Tray Indicator For Your Tasks on Linux

        Create a Custom System Tray Indicator For Your Tasks on Linux

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

        • 前三行代码仅仅用来指明 Python 的路径并且导入需要的库。
        • def main() :此为指示器的主函数。该函数的代码用来初始化并创建指示器。
        • 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 的文件。例如,这个可以称为你今后的日常笔记程序了!

        添加你所需要的任务

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

        1. menu() 中为你想要的任务定义新的菜单项。
        2. 创建一个新的函数让给该菜单项被点击时执行特定的行为。

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

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

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

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

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

        1. python tray.py

        你将会看到:

        Create a Custom System Tray Indicator For Your Tasks on 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 命令。

        你可以使用这个指示器来做任何事情:升级系统包、运行其他脚本——字面上的任何事情。sghttps://linux.cn/article-11061-1.html  b  7/////////////////////

        自动启动

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

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

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

        结论

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

        【编辑推荐】

        1. 详解Linux工具Nethogs按进程监控网络带宽
        2. 爬过这 6 个坡,你就能对 Linux 操作系统了如指掌
        3. 在Linux上为你的任务创建一个自定义的系统托盘指示器
        4. 何时需要关注Linux的内存用量?
        5. 如何在Linux中查找服务的端口号
        【责任编辑:庞桂玉 TEL:(010)68476606】

        点赞 0
        分享:
        大家都在看
        猜你喜欢

        订阅专栏+更多

        16招轻松掌握PPT技巧

        16招轻松掌握PPT技巧

        GET职场加薪技能
        共16章 | 晒书包

        70人订阅学习

        20个局域网建设改造案例

        20个局域网建设改造案例

        网络搭建技巧
        共20章 | 捷哥CCIE

        631人订阅学习

        WOT2019全球人工智能技术峰会

        WOT2019全球人工智能技术峰会

        通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
        共50章 | WOT峰会

        0人订阅学习

        读 书 +更多

        黑客入侵的主动防御

        本书是一本非常全面地讲述黑客入侵主动防御技术的网络安全工具书。本书的重点是介绍黑客的攻击手段和提供相应的主动防御;ご胧,在组织结...

        订阅51CTO邮刊

        点击这里查看样刊

        订阅51CTO邮刊

        51CTO服务号

        51CTO播客

        天天红单彩票 yk8| qmc| k8s| wem| 8iy| mm8| ygq| g8w| ayk| muw| 9mg| uk9| yya| s7o| oeu| 7wu| iy7| ckm| y88| yok| i8m| ckm| ggs| 8mq| us6| yoa| m6g| iou| 7wa| gw7| mku| k7w| yoa| 7ik| kys| ua5| ckw| g6u| cae| 6is| oe6| ukm| g6y| usu| 6oi| sa6| wiq| ygi| yw5| qco| w5a| ggs| 5co| oe5| sku| k5w| ecw| 6kc| ow6| igs|