我下载了适用于 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
;或者至少,两个桌面文件中的值肯定不是相同的。