実行中のプログラムに表示されるアイコンはどのように決まりますか?

実行中のプログラムに表示されるアイコンはどのように決まりますか?

Linux 64 ビット用の Arduino IDE v. 1.8.13 をダウンロードしました。これは zip アーカイブで、解凍してバイナリを実行します。簡単にアクセスできるようにするために、次のファイル.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

ここで、アイコン ファイルはプログラムと同じフォルダーにあります。これで、スーパー キーを押して「ard...」と入力し始めると、Arduino アイコンが表示され、Arduino が起動します。

ここに画像の説明を入力してください

同様に、スーパーキーを押して「sao...」と入力し始めると、SAOimage アイコンが表示され、SAOimage が起動します。

ここに画像の説明を入力してください

しかし、プログラムが実行されると、アプリケーション間を ALT+TAB で移動すると、Arduino は SAOimage アイコンで表され、SAOimage にはアイコンが表示されません。

ここに画像の説明を入力してください

また、最初にSAOimageを起動してそれからArduino の場合、その順序で起動します。ただし、最初に Arduino を起動し、次にスーパー キーを押して、sao と入力して SAOimage を起動すると、プログラムは起動せず、フォーカスが Arduino に移ります。

なぜでしょうか? 何か間違ったことをしてしまったのでしょうか? 理解できないメカニズムがあるのでしょうか? 私が見る限り、.desktop ファイルに基づくと、Ubuntu がこれら 2 つを混同する理由はないようです...?

答え1

これは、両方のデスクトップ ファイルの最後の行である に関係していると思いますStartupWMClass。具体的には、それらの値が同一であるために混乱が生じています。

この投稿からどのアプリケーションがウィンドウを担当しているかを説明するために使用されていることがわかりますStartupWMClass(アプリケーションが複数の異なる種類のウィンドウを作成する場合)。

シナリオ内に 2 つの別個のアプリケーションがある場合は、宣言はおそらく必要ありませんStartupWMClass。少なくとも、両方のデスクトップ ファイルに同じ値が含まれることは絶対にありません。

関連情報