我制作了一个 .desktop 文件,以便能够从启动器栏启动我的 python 脚本。
我将 Python 脚本设置为可执行文件,如果我双击并从文件管理器运行它,它就可以正常运行。它也可以很好地从终端运行。
桌面文件位于/.local/share/applications/
且如下所示:
[Desktop Entry]
Version=1.0
Name=Simple Timer
Comment=Timer
Exec=python3 /home/user/app/timer.py
Icon=/home/user/app/icon/timer.png
Path=/home/user/app/timer/
Terminal=false
Type=Application
Categories=Utility;Application;
如果我在 Dash 中搜索“Timer”,它就会出现。我可以从那里运行它。运行它会在启动器栏上创建两个重复的图标,如图所示。
- 第一个图标会闪烁约 10 秒,然后消失。此图标可锁定到启动器。如果此图标锁定到启动器栏,在应用程序窗口关闭后,它还会闪烁几秒钟,在此期间,它将不可点击。
- 第二个图标不能锁定到启动器,并且只有在应用程序窗口关闭时才会消失。
如果我从文件管理器运行该脚本,它会创建 1 个正常运行的启动器图标。
我已确认 中没有重复的 .desktop 文件/usr/share/applications/
。我创建的 .desktop 文件仅存在于 中,/.local/share/applications/
如果删除,我将无法再在 Dash 上搜索我的计时器或将其锁定到启动器栏。
我该如何修复这里的脉动/不可点击问题和双图标问题?
答案1
启动器无法将该窗口识别为“他的”
具体来说,Tkinter 窗口无法识别它们“自己的”窗口(类)。这会导致图标徒劳地闪烁,等待其窗口。一旦窗口出现,启动器无法识别其自己的窗口,并在超时后弹出启动器。由于“正常”窗口始终由启动器中的图标表示,因此您只能使用通用图标(通常,如果没有重复的启动器)或其他图标(请参阅下文)。
您可以通过添加以下内容轻松修复该问题:
StartupWMClass=Tk
到你的启动器(因为它是一个 Tkinter 窗口)
看看区别(我给了启动器 火狐 测试图标):
为什么你的情况中没有通用图标?
将 WM_CLASS 添加到 .desktop 文件将解决您的问题。但是,我很确定您不小心创建了一个额外的启动器(或者 Unity 自动创建了一个启动器)。查看/.local/share/applications/
并让您的启动器可执行。图标将显示。最有可能的是,您的复制品名称中会有“unity”。
一般情况下,如何找到一个窗口的WM_CLASS?
打开终端,输入
xprop WM_CLASS
随后单击窗口。出现两个字符串,以逗号分隔。标题大小写的字符串是您需要添加的字符串。
笔记
不是你的问题,但是:
您不需要设置以下几行:
Version=1.0
(无害,但没必要)- 由于您的脚本是可执行的,因此您不需要
python3
(您可以让脚本直接调用解释器) Path=/home/user/app/timer/
(不必要)Terminal=false
(这是默认设置)