【问题标题】:Is there a way to display an icon in the Icon Tray only while my "systemctl start app.service" is running? [closed]有没有办法仅在我的“systemctl start app.service”运行时在图标托盘中显示图标? [关闭]
【发布时间】:2021-06-21 00:53:41
【问题描述】:

我找不到任何示例,如何在 Linux 中使用个性化的管理 Systemd 服务来实现这些特殊需求。我需要在 Ubuntu/Linux 中创建一个功能,其中仅当我的服务 systemctl 它在后台运行时才在系统托盘图标(在桌面仪表板托盘小图标上)显示一个图标,如果没有,它将不显示任何内容,这将帮助我了解是否在每次重新启动系统时,服务都会自动正常运行(就像现在一样)。

我的系统服务文件正常位于/usr/lib/systemd/system/app.service,如果我要右键单击这个个性化图标,我需要有一个小弹出窗口,上面写着Kill the App ServiceClose the App Service 或只是Exit (这个命令会运行这个后台函数sudo systemctl stop app.service)。

我不是编码专家,但我刚刚开始,有人可以帮我解决如何编写此代码吗?

非常感谢

编辑 2-2:

@Deepak,这样看来是正确的:

while (True):
    app = QApplication(sys.argv)

trayIcon = QSystemTrayIcon(QIcon('/home/USER/.app_example/app.png'), parent=app)
menu = QMenu()
exitAction = menu.addAction('Exit')

result = subprocess.run(['sudo', 'systemctl', 'status', 'app_example.service'],stdout=subprocess.PIPE).stdout.decode('utf-8')

if "active (running)" in result:
    trayIcon.setToolTip('App Example')
    trayIcon.show()
    pass
else:
    sys.exit()
time.sleep(5)
exitAction.triggered.connect(app.quit)
trayIcon.setContextMenu(menu)
sys.exit(app.exec_())

【问题讨论】:

    标签: python linux ubuntu


    【解决方案1】:

    通过 python 进行轮询。每 5 秒检查一次关键字“active (running)”是否在“sudo systemctl status app.service”的输出中。

    下面的代码应该添加到托盘图标的代码中。当服务没有运行时,它会杀死托盘图标。

    import subprocess
    import time
    while (True):
        result = subprocess.run(['sudo', 'systemctl', 'status', 'app.service'],stdout=subprocess.PIPE).stdout.decode('utf-8')
        if "active (running)" in result:
            pass
        else:
            sys.exit()
        time.sleep(5)
    

    【讨论】:

    • 我不知道我是否在上面的编辑 2 中以这种方式在 Python 中进行了很好的编码,它正在工作但不确定。对吗?
    • @Niewbie 尝试删除您在 while 循环之前添加的“sys.exit(app.exec_())”行。 (不要删除while循环内的那个,删除它之前的那个。)那行对我来说没有意义。代码不会到达 while 循环,因为该行会导致它在到达 while 循环之前退出。
    • 等一下,因为我真的是新手,因为我认为无论如何图标都会以这种方式显示(这是不正确的),并且我需要将图标的编码移动到只有 if会很活跃......我知道支持像我这样的人很烦人,但请温柔,因为我对这样的世界真的很陌生......让我做一些测试,我会回到你身边......
    • @Joshua 非常感谢您的理解,我已经更正了编码草案,现在可以正常工作了,非常感谢你们!!!!
    • @Joshua 我没有在编码中包含 import/Headers,因为我不明白为什么(Rob)指出我。无论如何,2个Exit功能似乎以这种方式并存,这是让它工作的独特方式。上面的“退出”是正确的吗?我希望它对其他人有用
    猜你喜欢
    • 1970-01-01
    • 2019-10-14
    • 2021-08-11
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多