什麼決定了正在運行的程式顯示哪個圖示?

什麼決定了正在運行的程式顯示哪個圖示?

我下載了適用於 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;或者至少,兩個桌面檔案中的值絕對不同。

相關內容