我下载了适用于 64 位 Linux 的 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,然后按super键,输入sao并启动SAOimage,程序就无法启动;相反,重点只是转移到了 Arduino。
为什么是这样?我做错了什么吗?有什么我不明白的机制吗?据我所知,基于 .desktop 文件,Ubuntu 没有理由混淆这两者......?
我敢打赌,这与
StartupWMClass
两个桌面文件的最后一行有关;具体来说,混淆源于它们的值如何相同。从这篇文章中我们可以看到它
StartupWMClass
用于描述哪个应用程序负责一个窗口(如果一个应用程序正在创建几个不同类型的窗口)。现在,如果您的场景中有两个独立的应用程序,您甚至可能不需要
StartupWMClass
声明;或者至少,两个桌面文件中的值绝对不同。