Что определяет, какой значок отображается для запущенной программы?

Что определяет, какой значок отображается для запущенной программы?

Я скачал Arduino IDE v. 1.8.13 для Linux 64-bit. Это архив, который вы распаковываете и запускаете бинарный файл. Чтобы иметь к нему легкий доступ, я создал файл .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, я скачал файл PNG с именем arduino2.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

Здесь файл значка находится в той же папке, что и программа. Теперь, когда я нажимаю клавишу super и начинаю вводить "ard...", я вижу значок Arduino, и он запускает Arduino:

введите описание изображения здесь

Аналогично, когда я нажимаю клавишу Super и начинаю вводить «sao...», я вижу значок SAOimage, и он запускает SAOimage.

введите описание изображения здесь

Но как только программы запущены, при нажатии ALT+TAB между приложениями Arduino отображается значком SAOimage, а у SAOimage значка нет!

введите описание изображения здесь

Кроме того, если я сначала запущу SAOimage изатемArduino, они запускаются в этом порядке. Но если я сначала запущу Arduino, а затем нажму super key, введу sao и запущу SAOimage, программа не запустится; вместо этого фокус просто переместится на Arduino.

Почему так? Я что-то не так сделал? Есть ли какой-то механизм, который я не понимаю? Насколько я могу судить, нет причин — основываясь на файлах .desktop — что Ubuntu путает эти два...?

решение1

Держу пари, что это связано с StartupWMClassпоследней строкой обоих файлов рабочего стола; в частности, путаница возникает из-за того, что их значения идентичны.

Из этого постамы видим, что StartupWMClassиспользуется для описания того, какое приложение отвечает за окно (в случае, если приложение создает несколько разных видов окон).

Теперь, если в вашем сценарии есть два отдельных приложения, вам, возможно, даже не нужно это StartupWMClassобъявление; или, по крайней мере, оно определенно не будет иметь идентичных значений в обоих файлах рабочего стола.

Связанный контент