我创建了一个用于/usr/share/applications
启动 rdesktop 的应用程序启动器。该文件指定了一个图标名称,我已将图标添加到:
/usr/share/icons/HighContrast/48x48/apps
/usr/share/icons/HighContrast/22x22/apps
/usr/share/icons/HighContrast/256x256/apps
/usr/share/icons/HighContrast/32x32/apps
/usr/share/icons/HighContrast/scalable/apps-extra
/usr/share/icons/HighContrast/24x24/apps
/usr/share/icons/HighContrast/16x16/apps
/usr/share/icons/hicolor/scalable/apps
/usr/share/icons/hicolor/128x128/apps
/usr/share/icons/hicolor/16x16/apps
然后我将启动器拖到任务栏,带有正确徽标的启动器在任务栏中可见。但是,当我启动任务时,任务栏中会创建一个新图标,即一个正方形,中间有一个问号。
我需要什么图标以及在哪里,以便任务栏在启动应用程序时显示正确的图标?
.desktop 文件内容:
[桌面条目] 版本=1.0 终端=false 图标=mswindows 类型=应用程序 类别=网络; 执行=rdesktop win7shared1 -g 1680x1000 名称=win7shared1 通用名称=rdesktop 注释=打开 Windows 桌面 关键字=Windows StartupNotify=false
答案1
最有可能解决您的问题的方法是执行以下操作:
- 打开应用程序
运行时,打开终端并输入:
xprop WM_CLASS
然后点击打开的应用程序窗口。
输出将如下所示(示例
gedit
):WM_CLASS(STRING) = "gedit", "Gedit"
使用第一部分(在本例中为
gedit
)在文件中撰写一行.desktop
:StartupWMClass=<string>
(
<string>
用 的实际输出(第一部分)替换xprop WM_CLASS
,例如StartupWMClass=gedit
)
现在再试一次(您可能必须注销/登录),很可能该应用程序会出现在启动器中其自己的图标下。
解释
- 当应用程序从启动器(文件)正确启动时
.desktop
,但出现另一个图标只有一个通用图标(问号),最有可能的是应用程序窗口和启动器由于某种原因没有连接,并且启动器无法将应用程序的窗口识别为“他的”。当使用脚本或非标准应用程序(-command)时,通常会出现这种情况。在这些情况下,该StartupWMClass=
行通常是解决方案。
答案2
对我xprop|grep WM_CLASS
来说WM_CLASS(STRING) = "sun-awt-X11-XFramePeer", "jetbrains-pycharm-ce"
(我在使用 pycharm for python 时遇到了这个问题)
它是sun-awt-X11-XFramePeer
我需要的 .desktop 文件中的字符串(不带引号) - 谢谢!
答案3
将图标放到正确位置后,您只需重新启动 xserver(注销并重新登录)。
还可以尝试更新图标缓存(只需将以下代码粘贴到终端中):
for d in ~/.icons/*; do gtk-update-icon-cache -f $d; done
for d in /usr/share/icons/*; do sudo gtk-update-icon-cache -f $d; done