Synchronisieren Sie die Symbole zwischen .desktop und Dock

Jun 01 2020

Ich habe einen benutzerdefinierten .desktop-Eintrag in meinem Home-Verzeichnis erstellt. ~/.local/share/applications/startMyApp.desktopIch habe ihn so erstellt, dass er ein xterm anstelle eines Gnome-Terminals verwendet. Ich möchte, dass es im Dock anders aussieht als meine Gnome-Terminals, die ich interaktiv verwende.

Das startMyApp.desktopsieht aus wie:

[Desktop Entry]
Type=Application
Name=MyScript
Terminal=false
Exec=xterm -e myScript.sh
Icon=myIcon.png

Ich habe eine Symboldatei in erstellt ~/.icons/myIcon.png

Das Symbol wird im Standarddateibrowser korrekt angezeigt. Beim Öffnen über einen Dateibrowser wird das Skript erwartungsgemäß in einem xterm ausgeführt. Das Symbol im Dock wird jedoch als ein anderes generisches xterm-Symbol angezeigt. Woher kommt dieses Symbol? Ist es in die Binärdatei eingebettet?

Wie kann ich das ändern? Ich möchte, dass das Symbol im Dock genauso aussieht wie das in der .desktopDatei angegebene. Mit Ubuntu gebündelte Anwendungen haben beim Start dasselbe Symbol im Dock (abgesehen von den roten Punkten, die angeben, wie viele Fenster geöffnet sind).

Antworten

pomsky Jun 01 2020 at 22:18

Sie müssen Ihrer Datei einen richtigen StartupWMClassEintrag hinzufügen .desktop. Führen Sie dazu die folgenden Schritte aus.

  1. Starten Sie die betreffende Anwendung.
  2. Starten Sie ein separates Terminalfenster und führen Sie es aus xprop WM_CLASS.
  3. Platzieren Sie den Cursor über dem geöffneten Anwendungsfenster. Der Cursor sollte sich inzwischen in ein Fadenkreuz verwandeln. Klicken. Sie sollten eine WM_CLASSZeichenfolge für die Anwendung im Terminalfenster erhalten.
  4. Fügen Sie in die .desktopDatei die folgende Zeile ein

    StartupWMClass=OBTAINED-VALUE
    

    Anstelle von OBTAINED-VALUElegen einen Wert bekommen Sie von Schritt 3 ohne Anführungszeichen.


Update vom OP:

Außerdem musste ich anscheinend einen Namen für die xterm-Instanz angeben. Die Exec-Zeile sieht jetzt so ausxterm -name myApp -e myScript.sh