什么决定了正在运行的程序显示哪个图标?

什么决定了正在运行的程序显示哪个图标?

我下载了适用于 Linux 64 位的 Arduino IDE v. 1.8.13。它是一个压缩档案,您可以解压并运行二进制文件。为了方便访问,我创建了一个名为的.desktop文件:~/.local/share/applications/arduino.desktop

$ cat arduino.desktop 
[Desktop Entry]
Type=Application
Name=Arduino IDE
GenericName=Arduino IDE
Comment=Open-source electronics prototyping platform
Exec=/home/steen/Programmer/Arduino/arduino
Icon=/home/steen/.local/share/applications/arduino2.png
Terminal=false
Categories=Development;IDE;Electronics;
MimeType=text/x-arduino;
Keywords=embedded electronics;electronics;avr;microcontroller;
StartupWMClass=processing-app-Base

为了显示 Arduino 徽标,我下载了一个名为的 PNGarduino2.png并将其放在同一个文件夹中,并引用上述文件,如您所见。

大约在同一时间,我还下载了一个名为 SAOimage 的天文成像程序。我还必须.desktop为该程序创建一个文件:

$ cat saoimage.desktop 
[Desktop Entry]
Type=Application
Name=SAOImage DS9
GenericName=SAOImage DS9
Comment=Astronomical Fits File Editor
Exec=/home/steen/Programmer/SAOImage/ds9
Icon=/home/steen/Programmer/SAOImage/saoimage.png
Terminal=false
Categories=Graphics
MimeType=image/svg+xml;
Keywords=
StartupWMClass=processing-app-Base

这里,图标文件与程序位于同一文件夹中。现在,当我按下超级键并开始输入“ard...”时,我会看到 Arduino 图标,然后它会启动 Arduino:

在此处输入图片描述

同样,当我按下超级键并开始输入“sao ...”时,我会看到 SAOimage 图标,然后它会启动 SAOimage。

在此处输入图片描述

但是一旦程序运行,当我在应用程序之间按 ALT+TAB 时,Arduino 由 SAOimage 图标表示,而 SAOimage 没有图标!

在此处输入图片描述

另外,如果我首先启动 SAOimage 并然后Arduino,它们按该顺序启动。但是,如果我先启动 Arduino,然后按超级键,输入 sao 并启动 SAOimage,程序不会启动;相反,焦点只是转移到 Arduino。

这是为什么?我做错了什么吗?是不是有什么机制我不明白?据我所知,基于 .desktop 文件,Ubuntu 没有理由混淆这两者……?

答案1

我敢打赌这与两个桌面文件的最后一行有关StartupWMClass;具体来说,混淆源于它们的值是如何相同的。

来自这篇文章我们可以看到,它StartupWMClass用于描述哪个应用程序负责一个窗口(以防一个应用程序正在创建几种不同类型的窗口)。

现在,如果您的场景中有两个独立的应用程序,您可能甚至不需要声明StartupWMClass;或者至少,两个桌面文件中的值肯定不是相同的。

相关内容