[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:mit Root-Rechten arbeiten:] [:Editor: Einen Editor öffnen] [:Rechte#Datei-ausfuehrbar-machen: Rechte für Dateien und Ordner ändern] }}} [[Inhaltsverzeichnis()]] Dateien mit dem Suffix '''.desktop''' (im weiteren: Desktop-Datei) werden bei allen [:Desktop:Desktops], welche die allgemeinen Spezifikationen von [https://www.freedesktop.org/wiki/ freedesktop.org] {en} beachten, für die Konfiguration verschiedener Funktionalitäten verwendet: * Programmstarter sind Desktop-Dateien, welche Informationen bereitstellen, * um ein Programm automatisch beim Hochlauf des Desktops zu starten – [:Autostart:Autostarter], * oder die den manuellen Start des Programms aus einem Menü ermöglichen – Menüeinträge, * oder die z.B. dem Dateimanager erleichtern, für eine Datei eine geeignete Applikation zu finden. Dies wird bei der Installation als Menüeintrag automatisch mit erledigt. * Definition eines Untermenüs. Siehe hierzu den Artikel [:.directory-Dateien:]. (Das sind inhaltlich syntaktisch Desktop-Dateien, deren Dateinamen aber auf `.directory` enden müssen.) * Desktop-Dateien können auch eine URL ins Internet oder auf eine andere Stelle enthalten und damit als Lesezeichen (Bookmark) dienen, was hier aber nicht weiter behandelt wird. Jede Desktop-Datei ist eine Textdatei im [wikipedia:Initialisierungsdatei:INI-Format] und kann mit jedem [:Editor:Texteditor][2] erstellt und verändert werden. Einige Distributionen und [:Ubuntu/Derivate:Ubuntu-Derivate] bringen auch einen eigenen speziellen [:Menüeditor:] mit, welche aber in diesem Artikel keine Betrachtung finden. {{{#!vorlage Hinweis Für die in diesem Artikel verwendeten Begriffe ''Desktop-Dateien'', ''Programmstarter'', ''Menüeinträge'' und ''Autostarter'' gelten: * ''Desktop-Dateien'' ⊋ ''Programmstarter'' ⊋ ''Menüeinträge'' * ''Desktop-Dateien'' ⊋ ''Programmstarter'' ⊋ ''Autostarter'' * ''Menüeinträge'' ∩ ''Autostarter'' = ∅ }}} Dieser Artikel behandelt nur Desktop-Dateien als Programmstarter mit dem Schwerpunkt auf Menüeinträgen. {{{#!vorlage Warnung Desktop-Dateien können zur Ausführung von Schadsoftware missbraucht werden. Man sollte daher jede irgendwo gefundene Desktop-Datei immer selber kritisch überprüfen, bevor man sie an einem offiziellem Ablageort speichert! }}} = Ablageorte für Programmstarter = Autostarter und Menüeinträge sind gleichartig aufgebaut und unterscheiden sich im Grunde nur durch den Ablageort innerhalb des Dateisystems. Menüeinträge stehen in Ordnern '''applications/''', und automatisch zu startende Applikationen stehen in Ordnern '''autostart/'''. Diese Verzeichnisse wiederum befinden sich an mehreren Stellen im Dateisystem auf Systemebene in den Hierarchien '''/usr''' bzw. '''/etc''' sowie auf Benutzerebene im eigenen Benutzerverzeichnis. == Menüeinträge == Einen ersten Überblick kann man sich mit diesen Befehlen (jeweils mit Beispielausgabe) verschaffen: 1. Auflistung aller benutzen Ordner für Menüeinträge: [[Vorlage(Befehl, "find /usr/ ~ -name applications" ) ]] {{{ /usr/share/ubuntu/applications /usr/share/gdm/greeter/applications /usr/share/ubuntu-wayland/applications /usr/share/applications /usr/local/share/applications /home/kB/.local/share/applications /usr/share/ubuntu/applications }}} Hier werden auch einige Ordner gefunden, welche nicht zum Standard nach freedesktop.org gehören, im Beispiel die mit `ubuntu` und `gdm` im Pfad. Andererseits sind es noch nicht alle möglichen Ordner. 1. Es werden alle Verzeichnisse durchsucht, welche über die [:Umgebungsvariablen:] `XDG_DATA_HOME` (wenn nicht gesetzt, dann per Vorgabe '''~/.local/share/''') und `XDG_DATA_DIRS` als Suchpfad auftauchen: [[Vorlage(Befehl, "echo ${XDG_DATA_HOME:-~/.local/share/}:$XDG_DATA_DIRS" ) ]] {{{ /home/kB/.local/share/:/usr/share/ubuntu-xorg:/usr/share/gnome:/usr/local/share/:/usr/share/ }}} Die beispielhafte Ausgabe stammt vom GNOME-Desktop unter Ubuntu 22.04 und kann bei anderen Desktops oder Versionen anders lauten. Die Ordner in diesem Suchpfad müssen nicht alle existieren. Es wird stets die erste gefundene passende Datei verwendet und ggf. weitere gleichnamige Dateien werden ignoriert; d.h. Systemdateien können durch benutzerspezifische Dateien übersteuert und somit ausgeblendet oder ersetzt werden. 1. Auflistung aller Desktop-Dateien für Menüeintröge: [[Vorlage(Befehl, "find ~ /usr -path */applications/*.desktop | less") ]] In der Praxis werden für die Anpassung des eigenen Desktops meist nur diese Ablageorte verwendet: 1. '''/usr/share/applications/''': Dateien in diesem Ordner werden als Menüeinträge in den Desktop-Shells jedes Benutzers angezeigt. Dateien in diesem Verzeichnis müssen dem Benutzer [:root:] gehören und dürfen nur durch diesen beschreibbar[1] sein. In der Regel handelt es sich um Dateien, welche von der Paketverwaltung installiert und gepflegt werden. 1. '''/usr/local/share/applications/''': Wie vorstehendes Verzeichnis, jedoch sollen hier von Administrator des Systems für alle Benutzer vorgesehene Menüeinträge abgelegt werden. Dieser Ordner muss ggf. erst von [:root:] angelegt werden. 1. '''~/.local/share/applications/''': Dieser Ordner im persönlichen Verzeichnis des Benutzers enthält Dateien für Menüeinträge, welche spezifisch nur diesem Benutzer angezeigt werden. Das Verzeichnis existiert nach frischer Installation nicht und muss selber angelegt werden. Gleichnamige Dateien in diesem Ordner übersteuern solche im vorher genannten Ordner. 1. Desktop-Oberfläche: Einige Desktops in einigen Versionen unterstützen noch diese veraltete und der Spezifikation widersprechenden Methode. Die Funktionsweise solcher Desktop-Dateien hängt von der jeweils verwendeten Desktop-Umgebung und deren Version ab und wird daher in diesem Artikel nicht weiter behandelt, siehe: [:Desktop-Symbole:]. Der GNOME-Desktop unterstützt dieses Feature nur über spezielle Shell-Erweiterungen. == Autostarter == Die vorhandenen Autostarter und die möglichen Ablageorte findet man ganz analog zum Vorgehen wie für Menüeinträge beschrieben mit diesen Befehlen (jeweils mit Beispielausgabe): * Benutzte Ordner: [[Vorlage(Befehl, "sudo find /usr /etc/ ~ -name autostart" ) ]] {{{ /usr/share/gnome/autostart /usr/share/gdm/autostart /usr/share/gdm/greeter/autostart /etc/xdg/autostart /home/kB/.config/autostart }}} * Suchpfad für Autostarter: [[Vorlage(Befehl, "echo ${XDG_CONFIG_HOME:-~/.config}:$XDG_CONFIG_DIRS" ) ]] {{{ /home/kB/.config:/etc/xdg/xdg-ubuntu-xorg:/etc/xdg }}} * Vorhandene Autostarter: [[Vorlage(Befehl, "sudo find /usr /etc/ ~ -path */autostart/*.desktop | less" ) ]] = Desktop-Datei anlegen = Für einen Eintrag in das Menü muss man mit einem Texteditor[2] eine Datei erstellen. Der Dateiname muss ein valider Name zur Verwendung in D-Bus-Nachrichten sein, d.h. er darf nur Ziffern (aber nicht an erster Stelle), kleine und große ASCII-Buchstaben und die Sonderzeichen Unterstrich `_` und Bindestrich `-` enthalten. Mehrere solche nicht-leeren Zeichenfolgen können durch verbindende Punkte zum Gesamtnamen kombiniert werden, der auf `.desktop` enden soll. Beispiele für zulässige Namen findet man in o.g. Ordnern. Es spricht aber für eigene Desktop-Dateien nichts gegen die Verwendung von Namen wie beispielsweise '''InyokaEdit.desktop''' oder '''Firefox.desktop'''. Die Datei besteht aus Zeilen, welche durch ein Zeilenvorschubzeichen (LF, ASCII-Zeichen 10) voneinander getrennt sind. Der verwendete Zeichensatz ist UTF-8. Groß-/Kleinschreibung ist überall in der Datei relevant. Zulässige Zeilen sind: * Leere Zeilen. Diese werden ignoriert. * Kommentarzeilen beginnen mit dem Zeichen `#` (ASCII-Zeichen 36) und werden ignoriert. * Kapitelüberschriften enthalten einen Namen in eckigen Klammern `[]`. * Spezifikationen haben die Form `Schlüsselwort=Wert`. Die zulässigen Schlüsselworte werden in den folgenden [#Zeilen-in-Desktop-Dateien Tabellen] erklärt. Rechts und/oder links des Zeichens `=` können zur Verbesserung der Lesbarkeit Leerzeichen oder Tabulatoren stehen. Je nach Schlüsselwort muss der Wert einem festgelegten Typ entsprechen: * string: Eine Folge von druckbaren ASCII-Zeichen aus dem Bereich 33-126 * localestring: Eine Folge von UTF-8-Zeichen, vorgesehen zur Anzeige * iconstring: Eine Folge von UTF-8-Zeichen, vorgesehen zur internen Verwendung. Das ist entweder ein absoluter Pfad zu einer Datei mit einem Ikon oder ein symbolischer Name für ein Ikon. * boolean: Entweder der string `true` oder der string `false`. In Desktop-Dateien ist die früher mögliche Darstellung von Wahrheitswerten mit `0` und `1` nicht mehr zulässig. * numeric: Eine Fließkommazahl. Es gibt allerdings noch kein Schlüsselwort, welches diesen Typ verlangt. * Liste von Werten eines vorstehend genannten Typs: Die Elemente der Liste müssen durch Semikolon (`;`) getrennt werden und die Liste soll auch durch ein Semikolon abgeschlossen werden. Wenn ein Semikolon in einem Element vorkommen soll, muss es als `\;` quotiert notiert werden. Die früher benutzte Trennung von Listenelementen mit Kommata ist nicht mehr zulässig. Die offizielle Spezifikation des Dateiformats siehe [#Links INI-Format für Desktop-Dateien bei freedesktop.org]. == Menüeintrag anlegen == Ein manuell angelegter Menüeintrag ist insbesondere für als [:AppImage:] (bzw. ohne [:Paketverwaltung:]) installierte Programme sinnvoll. Im folgenden praktischen Beispiel wird für das Programm [:linphone:] im Untermenü ''„Büro“'' des Desktop-Hauptmenüs (bei GNOME: ''„Anwendungen“'') ein Eintrag mit dem Namen ''„Linphone“'' erstellt. Einen Texteditor öffnen[2] und folgenden Text kopieren, einfügen und für die eigenen Bedürfnisse anpassen: {{{ [Desktop Entry] Version = 1.5 Type = Application Name = Linphone GenericName = Telephony client GenericName[de]=Telefon Comment = A libre SIP client Comment[de] = Ein freies SIP-Telefon # Ikon liegt im Ordner ~/.icons/ Icon = linphone-logo.png Categories = Office;Telephony; MimeType = x-scheme-handler/sip-linphone;x-scheme-handler/sip;x-scheme-handler/sips-linphone;x-scheme-handler/sips;x-scheme-handler/tel;x-scheme-handler/callto; OnlyShowIn = GNOME;XFCE; Terminal = false Exec = linphone %F StartupNotify = true }}} Die Datei nun [#Ablageorte-fuer-Programmstarter im Ablageort im eigenen Verzeichnis] unter einem aussagekräftigen Namen wie z.B. '''linphone.desktop''' abspeichern. Man kann alternativ auch ein systemweit gültiges Verzeichnis dafür verwenden, benötigt dann aber natürlich Root-Rechte[3]. {{{#!vorlage Hinweis Desktop-Dateien, und auch explizit Programmstarter, sind selbst keine ausführbare Dateien und benötigen keine Ausführungsrechte und sollen aus Sicherheitsgründen diese Attribute auch nicht erhalten! Desktop-Dateien haben in der Regel `0644` als Dateiberechtigungen. Die einzige Ausnahme von dieser Regel gilt bei auf dem Desktop selbst abgelegten Dateien: Diese entsprechen nicht der Spezifikation von freedesktop.org, sondern sind für den jeweiligen Desktop spezifische Erweiterungen. Diese Dateien müssen mit einem speziellem, an anderer Stelle [:Desktop-Symbole:beschriebenem Verfahren] ausführbar gemacht werden. }}} Der neue Eintrag erscheint als ''Linphone'' sofort mit Ikon im Menü, sofern die Desktop-Datei syntaktisch fehlerfrei ist, was man [#Desktop-Datei-validieren überprüfen] kann. == Autostarter anlegen == Bei der Erstellung eines Autostarters geht man genauso vor wie bei der Erstellung eines Menüeintrags, lediglich muss man einen anderen Ablageort für die Datei wählen. Zu den Besonderheiten bei den einzelnen Desktops lese den Artikel [:Autostart:]. = Desktop-Datei bearbeiten = Dateien im Ablageort des eigenen Benutzerverzeichnisses kann man jederzeit ändern. Dateien in einem systemweit gültigen Ablageort, welche dorthin von der Paketverwaltung installiert wurden und somit bei Updates wieder installiert werden könnten, sollte man nicht löschen und auch nicht verändern. Wenn man eine hier abgelegte Desktop-Datei ändern möchte, kopiert man sie besser unter dem gleichen Dateinamen in sein eigenes Benutzerverzeichnis. Diese Kopie kann man beliebig ändern. Für den eigenen Desktop wirksam wird nur die eigene Kopie; das Original wird nicht mehr beachtet. = Menüeintrag ausblenden = Manchmal möchte man im eigenen Menü einen vom System vorgegebenen Eintrag nicht sehen. Man kann dann in seinem Benutzerverzeichnis eine Datei anlegen, welche die Systemdatei übersteuert. Beispiel: Man möchte im eigenen Menü den Eintrag ''Protokolle'' nicht sehen. Für diesen Menüpunkt zuständig ist die Datei\\ '''/usr/share/applications/org.gnome.Logs.desktop'''. Man erstellt selbst die Datei '''~/.local/share/applications/org.gnome.Logs.desktop''' mit folgenden Inhalt: {{{[Desktop Entry] Type = Application Name = Logs Exec= Hidden=true }}} Man benötigt in dieser Datei nur die erforderlichen Schlüsselworte (s. folgende [#Zeilen-in-Desktop-Dateien Tabellen]) und manchmal das Schlüsselwort `Exec`, dessen Wert aber leer sein darf. Neben dem Schlüsselwort `Hidden` gibt es noch weitere mit ähnlicher Wirkung: * `Hidden` * `NoDisplay` * `NotShowIn` * `OnlyShowIn` = Autostart verhindern = Mit der gleichen Technik wie bei [#Menueeintrag-ausblenden Menüeintrag ausblenden] gezeigt kann man auch den automatischen Start eines systemweit vorgegebenen Programms für sich selbst unterbinden. = Programmstarter entfernen = Um einen Programmstarter zu entfernen löscht man die betreffende Desktop-Datei. = Desktop-Datei validieren = Eine Desktop-Datei kann man auf korrekte Syntax mit dem Kommandozeilenprogramm '''desktop-file-validate''' aus dem standardmäßig installierten Paket '''desktop-file-utils''' überprüfen. Dazu startet man das Program einfach mit dem Namen der zu überprüfenden Datei als Argument. Bei korrekter Syntax beendet sich das Programm mit dem Rückgabewert `0` und man erhält man keine Ausgabe; anderenfalls einen von 0 verschiedenen Rückgabewert und konkrete Hinweise, Warnungen und Fehlermeldungen. {{{#!vorlage Befehl desktop-file-validate ~/.local/share/applications/org.gnome.Logs.desktop }}} Beispielausgabe: {{{ /home/kB/.local/share/applications/org.gnome.Logs.desktop: error: required key "Type" in group "Desktop Entry" is not present /home/kB/.local/share/applications/org.gnome.Logs.desktop: error: required key "Name" in group "Desktop Entry" is not present }}} Weitere Möglichkeiten verrät das Programm beim Aufruf mit der Option `--help`. = Zeilen in Desktop-Dateien = Die in den Tabellen beschriebenen Schlüsselworte entsprechen der [#Extern Version 1.5 der Spezifikation vom 27.04.2020]. In den Tabellen bedeutet in der Spalte „Erforderlich“ die Angabe `optional`, das man diese Zeile nicht angeben muss, aber wenn man hier etwas angibt, muss es auch vom Desktop beachtet werden; dagegen bedeutet ein `nein`, das etwaige Angaben ignoriert werden dürfen. {{{#!vorlage Tabelle Tabelle 1: Allgemeine Schlüsselworte in Desktop-Dateien (alle Typen) +++ Schlüsselwort Wert und Beschreibung Erforderlich Typ +++ `Type` Legt den Typ der Desktop-Datei fest. Zulässig sind: `Application` oder `Link` oder `Directory` ja string +++ `Name` Der Name der Verknüpfung innerhalb des Menüs. ja localestring +++ `Version` Zulässig ist ein Wert aus `1.0`, `1.1`, … `1.5`. Für neu erstellte Desktop-Dateien sollte man den Wert `1.5` wählen oder diese Zeile weglassen. Mit der Versionsangabe kann man die Verwendung veralteter Schlüsselworte, Werte oder sonstiger Details anzeigen, damit die Anwendungssoftware dies ggf. berücksichtigen möge. Ob die Anwendungssoftware das allerdings macht oder die Desktop-Datei ganz ignoriert oder etwas anderes macht, bleibt ihr überlassen. nein string +++ `GenericName` Allgemeine Beschreibung des Programms, z.B. Web Browser. optional localestring +++ `Hidden = true` Hiermit deaktiviert man die Desktop-Datei vollständig. Alle weiteren Angaben in dieser Datei und in einer von ihr ggf. übersteuerten Datei werden ignoriert. optional boolean +++ `NoDisplay=true` Die Anwendung wird nicht im Menü angezeigt, kann aber über Suchfunktionen gefunden und gestartet werden. Auch Dateimanager nutzen diese Desktop-Datei zur Zuordnung von Programmen zu Dokumenten über den MIME-Typ. optional boolean +++ `OnlyShowIn` Als Wert ist eine Liste von Kennungen für [#Links registrierte Desktop-Umgebungen] anzugeben. Die Desktop-Datei wird nur dann verwendet, wenn der laufende Desktop in der Liste vorkommt. Der aktuell laufende Desktop steht in der Umgebungsvariablen `XDG_CURRENT_DESKTOP`. [[BR]]Man darf dieses Schlüsselwort nicht zusammen mit `NotShowIn` verwenden. optional string-Liste +++ `NotShowIn` Als Wert ist eine Liste von Kennungen für registrierte Desktop-Umgebungen anzugeben. Die Desktop-Datei wird nur dann verwendet, wenn der laufende Desktop __nicht__ in der Liste vorkommt. Wenn dieses Schlüsselwort nicht verwendet wird, dann ist aber die Desktop-Datei in allen Desktops aktiviert. [[BR]]Man darf dieses Schlüsselwort nicht zusammen mit `OnlyShowIn` verwenden. optional string-Liste +++ `Icon` Symbol (Piktogramm), welches im Menü angezeigt werden soll. Man gibt [[BR]] * entweder den absoluten Pfad zur Datei an, [[BR]] * oder, wenn das Ikon als Datei im Ordner '''~/.icons/''' abgelegt ist, nur den Dateinamen, [[BR]] * oder einen symbolischen Namen, der über ein Ikon-Thema dem System bekannt ist. optional iconstring +++ `Comment` Ein kurzer beschreibender Satz, welcher mit den Angaben für `Name` und `GenericName` nicht identisch sein soll. optional localestring }}} == Programmstarter == Für Programmstarter muss die Datei eine Zeile mit der Kapitelüberschrift "`[Desktop Entry]`" genau einmal enthalten. (Das gilt so auch bei KDE, welches früher die nun nicht mehr zulässige Variante "`[KDE Desktop Entry]`" benutzte.) Vor dieser Zeile dürfen nur Kommentar- und Leerzeilen stehen. In den Zeilen nach dieser Kapitelüberschrift können auch Zeilen mit Spezifikationen folgen. Jede Spezifikation beginnt mit einem Schlüsselwort aus den Tabellen 1 oder 2. Die Reihenfolge der Spezifikationen spielt keine Rolle. {{{#!vorlage Tabelle Tabelle 2: Spezielle Schlüsselworte in Desktop-Dateien für Programmstarter +++ Schlüsselwort Wert und Beschreibung Erforderlich Typ +++ `Type = Application` Muss genau wie angegeben in der Datei stehen. ja string +++ `Terminal = true`[[BR]]`Terminal = false` Angabe, ob die Applikation ein [:Terminal:] für die Kommunikation mit dem Bediener benötigt oder nicht. Applikationen, die selbst keine Fenster öffnen, benötigen den Wert ``true``; der Desktop öffnet dann ein Fenster mit einem Terminal und verbindet dies mit den Standard-Kanälen stdin, stdout und stderr. Applikationen, welche ausschließlich über eigene Fenster oder andere Desktop-Elemente mit den Bediener kommunizieren, können den Wert `false` erhalten. Dies ist auch der Standardwert. optional boolean +++ `Path` Ein absoluter Pfad zu einem Ordner; dieser wird zum Arbeitsverzeichnis, in welches vor dem Start des Programms gewechselt wird. (Das Schlüsselwort ist missverständlich und hat nichts mit der Umgebungsvariable `PATH` zu tun; es sollte besser "`Pwd`" lauten.) optional string +++ `Exec` Ein ausführbarer Befehl, mit dem die Applikation auch in einem Terminal gestartet werden könnte. Wenn das Programm im `PATH` gefunden werden kann, reicht der Dateiname aus; anderenfalls ist der absolute Pfad zu verwenden. Hinter dem Programmnamen können optional Parameter für das Programm angegeben werden. Hierbei sind allerdings alle Sonderzeichen für Desktop-Dateien __und__ alle Sonderzeichen für die Shell zu quotieren. Siehe dazu auch [#Startmethoden Startmethoden] und [https://standards.freedesktop.org/desktop-entry-spec/latest/ar01s07.html The Exec key] {en} sowie [#Optionen-uebergeben Optionen übergeben]. optional string +++ `TryExec` Ein ausführbarer Befehl, der entweder über die [:Umgebungsvariable:] `PATH` gefunden wird oder mit absolutem Pfad anzugeben ist. Dieser Befehl soll testen, ob das mit `Exec` angegebene Programm ausführbar ist. Wenn diese Spezifikation fehlt, wird ersatzweise der mit `Exec` angegebene Befehl hierfür verwendet, was bei großen Programmen die Performance des Desktops beeinträchtigen kann. optional string +++ `StartupNotify=true`[[BR]]`StartupNotify=false` Beschreibt, ob die Applikation das "[https://specifications.freedesktop.org/startup-notification-spec/startup-notification-0.1.txt Startup notification protocol]" {en} beherrscht oder nicht. Man sollte `true` nur dann verwenden, wenn man ganz sicher weiß, das es der Fall ist und im Zweifel `false` angeben oder dieses Schlüsselwort gar nicht verwenden. nein boolean +++ `StartupWMClass` Eine "WM Class" oder ein "WM Name", welche von der Applikation benutzt wird. Der Desktop kann diese Information zu Optimierung der Fenster-Gruppen verwenden. Siehe: [#WMClass-bestimmen WMClass bestimmen] optional string +++ `DBusActivatable` s. [https://specifications.freedesktop.org/desktop-entry-spec/latest/ar01s08.html D-Bus Activation] {en} nein boolean +++ `Implements` s. [https://specifications.freedesktop.org/desktop-entry-spec/latest/ar01s09.html Interfaces] {en} nein string-Liste +++ `PrefersNonDefaultGPU` s. [https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#recognized-keys Recognized desktop entry keys] {en} nein boolean +++ `SingleMainWindow` s. [https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#recognized-keys Recognized desktop entry keys] {en} nein boolean +++ `Actions` Eine Liste von Namen für Aktionen im Kontextmenü (oft: Rechtsklick [[Vorlage(Tasten, rmt) ]]) der Applikation; siehe [#Aktionen-im-Kontextmenue Aktionen im Kontextmenü] [[BR]]Siehe auch: [https://specifications.freedesktop.org/desktop-entry-spec/latest/ar01s11.html Additional applications actions] {en}. [[BR]]Wichtig: Für jede Aktion muss diese Desktop-Datei auch eine Kapitelüberschrift enthalten! optional string-Liste +++ `MimeType` Eine Liste von MIME-Typen wie in der Datei '''/etc/mime.types''' genannt und die von der in dieser Desktop-Datei beschriebenen Applikation unterstützt werden. Dateimanager benutzen diese Information, um für zu öffnende Dateien geeignete Programme vorzuschlagen. Siehe: [#MIME-Typen MIME-Typen] optional string-Liste +++ `Categories` Eine Liste mit [https://specifications.freedesktop.org/menu-spec/latest/ar01s03.html standardisierten Bezeichnern] {en} für Untermenüs im Hauptmenü. Die Anwendung wird mit Namen (s. Schlüsselwort `Name`) und Ikon (s. `Icon`) in diesen Untermenüs angezeigt. optional string-Liste +++ `Keywords` Liste von Stichwörtern, die z.B. von Suchfunktionen benutzt werden können. Desktop-Dateien lassen sich über die Desktop-Suche schnell finden, wenn man per Schlüsselwort Keywords geeignete Suchbegriffe speichert. optional localestring-Liste }}} === Pfadangaben === Die mit den Schlüsselworten `Path`, `Exec`, `TryExec` und `Icon` bezeichnetet Dateien können stets mit ihrem absolutem Pfad angegeben werden, relative Pfade oder nackte Dateinamen sind dagegen nur in den genannten Ausnahmefällen möglich. Es werden keine Umgebungsvariablen wie z.B. `HOME` und keine Bash-Makros wie `~` ausgewertet. === Startmethoden === Die mit dem Schlüselwort `Exec` (ebenso bei `TryExec`) angegebene Datei muss Bedingungen erfüllen: 1. Sie muss gemäß der Angaben in der Zeile `Exec` und der Umgebungsvariablen `PATH` auffindbar sein. 1. Sie muss als Programm ausführbar sein. Man kann dazu eine der folgenden 4 Methoden verwenden: 1. Die Datei wird über `PATH` gefunden. -> Man gibt nur den Dateinamen an. 1. Die Datei liegt im Arbeitsverzeichnis. -> Man gibt den relativen Pfad zum Arbeitsverzeichnis mit dem Dateinamen an, also etwas wie `Exec=./DATEINAME`. (Falle: Man kann für diesen Zweck im Hauptabschnitt den relativen Pfad zum Arbeitsverzeichnis __nicht__ mit dem Schlüsselwort `Path` festlegen!) 1. Bei Skripten kann man eine Shell (die ja über `PATH` gefunden wird) angeben und diese anweisen, das Skript auszuführen. In der Anweisung an die Shell funktionieren dann natürlich auch wieder Umgebungsvariablen wie `HOME` oder `USER` und auch das Makro `~` als Bezeichnung des persönlichen Verzeichnisses, muss aber sehr sorgfältig quotieren. \\ Beispiel: `Exec = sh -c "~/Skripte/Netzwerkprofil %f"` 1. In allen anderen Fällen gibt man den absoluten Pfad zur ausführbaren Datei mit an, \\ Beispiel: `Exec= /home/kB/Skripte/Netzwerkprofil %f` Konkrete Beispiele findet man im Artikel [:Desktop-Dateien/Beispiele:]. === Optionen übergeben === Man kann mit dem Schlüsselwort `Exec` jede ausführbare Datei, ganz gleich ob GUI-Applikation, Shell-Skript oder Kommandozeilenprogramm starten. Wenn man einen eingebauten Shell-Befehl ausfühen lassen möchte, muss man als auszuführendes Programm eine [:Shell:] wie beispielsweise die [:Bash:] starten und dieser den auszuführenden Befehl als Option übergeben. Wenn man dem auszuführenden Programm beim Aufruf Optionen oder Parameter mitteilen möchte, müssen alle Sonderzeichen in Bezug auf die Syntax der Desktop-Dateien quotiert werden. Dafür wird das doppelte Anführungszeichen (`"`) verwendet; in einigen Fällen funktioniert auch die Quotierung eines einzelnen Zeichens mit dem umgekehrten Schrägstrich (\). Eine Quotierung mit dem Hochkomma (`'`) funktioniert __nicht__! Sonderzeichen in diesem Sinne sind: * Leerzeichen, Tabulator, Zeilenschaltung (whitespace) * doppeltes und einfaches Anführungszeichen sowie der umgekehrte Schrägstrich (Quotierungszeichen) * die Sonderzeichen `> < ~ | & ; $ * ? # ( )` * sowie backtick `\`` Beim Aufruf eines Kommandozeilenprogramms muss man zusätzlich noch alle Sonderzeichen aus Sicht der Shell quotieren. Beispiele syntaktisch valider Exec-Zeilen: {{{ Exec = ssh "spy@nsa.usa.gov" Exec=InyokaEdit %F Exec = bash -c "lsblk -lf /dev/sd? ; read" Exec = nm-connection-editor Exec=/opt/firefox/firefox-bin %u Exec=/usr/lib/jvm/java-7-openjdk-amd64/bin/java -jar %f }}} Die mit dem Prozentzeichen (`%`) beginnenden Platzhalter sind beim Öffnen von Dateien im GUI-Dateimanager wichtig und bezeichnen die selektierten Dateien, welche an der Stelle des Platzhalters eingesetzt werden: * `%f` steht für einen Dateinamen. * `%F` steht für eine Liste von Dateinamen. * `%u` steht für eine URL der Datei. * `%U` steht für eine Liste von URLs. Man kann in der Exec-Zeile nur einen von diesen vier Platzhaltern und diesen auch nur einmal zur Datei-Selektion verwenden. Es gibt zahlreiche weitere solche Platzhalter: * `%i`, `%c` und `%k` stehen für das Ikon, den lokalisierten Namen und den Ablageort der Desktop-Datei. * Alle weiteren sind veraltet. === MIME-Typen === Welche Programme im Kontextmenü (oft: Rechtsklick [[Vorlage(Tasten, rmb) ]]) einer Datei bei ''"Öffnen mit..."'', im Dateimanager automatisch vorgeschlagen werden, hängt vom [:MIME-Typ:] der Datei ab. (Damit das überhaupt funktioniert, muss beim Schlüsselwort `Exec` ein [#Optionen-uebergeben Platzhalter zur Datei.Selektion] verwendet werden.) Zur Ermittlung der von der Applikation unterstützten [:MIME-Typ:MIME-Typen] kann man Informationen auf der jeweiligen Projektseite, in der Dokumentation der Applikation, im Wiki oder über allgemeine Recherche im Internet suchen. Manchmal findet man auch Hinweise auf verwendete Dateinamensendungen wie beispielsweise '''.mp3''' oder '''.mpg''', die man in der Datei '''/etc/mime.types''' nachschlagen kann: {{{#!vorlage Befehl grep mp3 /etc/mime.types }}} Beispielausgabe: {{{ audio/mpeg mpga mpega mp1 mp2 mp3 audio/vnd.sealedmedia.softseal.mpeg smp3 smp s1m }}} Siehe auch: [https://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec?action=show&redirect=Standards%2Fshared-mime-info-spec shared-mime-info-spec] {en} === WMClass bestimmen === Zur Ermittlung eines Wertes für `StartupWMClass` startet man die Applikation und anschließend in einem Terminal den Befehl `xprop WM_CLASS`. Nach klicken in das Fenster der Applikation erscheinen im Terminal die von der Applikation verwendeten Fensternamen/-klassen, von denen man einen als Wert für das Schlüsselwort verwendet. === Aktionen im Kontextmenü === Diese können über das Schlüsselwort `Actions` definiert werden. Für jede solche Aktion muss in der Desktop-Datei eine Kapitelüberschrift "`[Desktop Action …]`" existieren und in jedem solchen Abschnitt müssen die Schlüsselworte `Name` und `Exec` benutzt werden. Einzelheiten werden im Artikel [:.desktop-Dateien/Quicklists:Quicklists] besprochen. == Andere Typen von Desktop-Dateien == Bei Desktop-Dateien gibt es noch die zulässigen Typen `Directory` und `Link`: * Beim Typ `Directory` sind nur die Schlüsselworte aus Tabelle 1 zulässig. Zu den Einzelheiten lese den Artikel [:.directory-Dateien:]. * Typ `Link` (Lesezeichen) erlaubt nur die Schlüsselworte aus Tabelle 1, und als weiteres Schlüsselwort ist "`URL`" erforderlich. Auch syntaktisch richtige Lesezeichen müssen nicht funktionieren; beispielsweise behandelt GNOME so etwas nicht wie erwartet. Das ist kein großer Verlust, denn jeder `Link` auf eine URL lässt sich auch als Desktop-Datei des Typs `Application` formulieren; beispielsweise für die URL [https://UbuntuUsers.de]: {{{ [Desktop Entry] Type = Application Name = UbuntuUsers.de Exec = firefox -new-window https://ubuntuusers.de }}} Natürlich ist anstatt des Browsers [:Firefox:] jeder andere auch so nutzbar. * Alle anderen Werte für `Type` sind veraltet; auch der früher bei KDE verwendete Typ `MimeType`. == Weitere Schlüsselworte == Man darf beliebige eigene Schlüsselworte erfinden und verwenden. Diese sollten mit „`X-`“ beginnen. Natürlich macht das nur dann Sinn, wenn die eigene Software auch selbst Desktop-Dateien auswertet. Für den Desktop KDE gibt es zusätzlich diese speziellen Schlüsselworte: * Dev * FSType * MountPoint * ReadOnly * UnmountIcon Es gibt einige veraltete Schlüsselworte, die nicht mehr verwendet werden sollten: `Patterns, DefaultApp, Encoding, MiniIcon, TerminalOptions, Protocols, Extensions, BinaryPattern, MapNotify, SwallowTitle, SwallowExec, SortOrder, FilePattern`. Lese die offizielle Dokumentation, insbesondere [https://standards.freedesktop.org/desktop-entry-spec/latest/ar01s06.html Recognized desktop entry keys] {en} == Lokalisierung == In einer Desktop-Datei kann man alle Elemente des Typs localestring lokalisieren, damit – je nach verwendeter Systemsprache – in der Desktop-Oberfläche Name und Beschreibung in der jeweiligen Sprache erscheinen. Dafür setzt man hinter dem Namen des zu lokalisierenden Elements in Klammern den Ländercode und nach dem Gleichheitszeichen die Übersetzung. Für das Element `GenericName` sähe das beispielsweise folgendermaßen aus: {{{ GenericName=Music Player GenericName[de]=Musik Player GenericName[fi]=Musiikkisoitin GenericName[pl]=Odtwarzacz Muzyki GenericName[se]=Musikspelare }}} Desktop-Dateien unterstützen auch abgestufte Lokalisierung nach Sprache und Region. Die Locale-Bezeichnungen haben üblicherweise das Format Sprache_Region@Variante (''lang_COUNTRY@modifier''). Sprache (`lang`) und Region (`COUNTRY`) werden durch zweistellige ISO-639- bzw. ISO-3166-Codes repräsentiert (z.B. de_DE für Deutsch/Deutschland oder de_AT für Deutsch/Österreich). Mit der Variante unterscheidet man noch speziellere Feinheiten; dies wird aber bei Desktop-Dateien meistens nicht nicht verwendet. Die folgende Tabelle gibt einen Überblick, nach welcher Reihenfolge die einzelnen Lokalisierungen genutzt werden: {{{#!vorlage Tabelle Tabelle 3: Lokalisierung +++ LC_MESSAGES Wert Beispiel Reihenfolge möglicher Werte +++ Sprache_Region@Variante ''"de_DE@euro"'' Sprache_REGION@Variante, Sprache_REGION, Sprache@Variante, Sprache, Standardwert +++ Sprache_Region ''"de_DE"'' Sprache_Region, Sprache@Variante, Sprache, Standardwert +++ Sprache@Variante ''"de@euro"'' Sprache@Variante, Sprache, Standardwert +++ Sprache ''"de"'' Sprache, Standardwert }}} Dadurch ist es möglich, auch unterschiedliche Richtungen einer Sprache zu berücksichtigen, wie am folgenden Beispiel gezeigt: {{{ GenericName=January GenericName[de]=Januar GenericName[de_de]=Januar GenericName[de_at]=Jänner }}} = Beispiele = Die Starter von Desktop-Applikationen im Ordner '''/usr/share/applications/''' können z.B. mittels [:less:] oder eines Editors[2] eingesehen und als Beispiele hinzugezogen werden. Desktop-Dateien für konkrete GUI-Applikationen sollen nicht hier, sondern im Artikel zur Applikation stehen oder im Artikel [:Desktop-Dateien/Beispiele:] gesammelt werden. = Problembehebung = Wenn der Menüeintrag nicht im Menü erscheint oder beim Klick auf einen Programmstarter nichts geschieht, sollte man diese Checkliste abarbeiten: 1. Ist die Desktop-Datei syntaktisch korrekt? -> [#Desktop-Datei-validieren Desktop-Datei validieren] 1. Liegt die Desktop-Datei in einem zulässigen Ordner? -> [#Ablageorte-fuer-Programmstarter Zulässige Ablageorte] 1. Stimmen die Dateirechte? – In der Regel sollen Desktop-Dateien nicht ausführbar sein; manchmal müssen sie es aber im Gegenteil sogar definitiv sein. Einfach einmal die andere Einstellung ausprobieren, dabei [:Desktop-Symbole/#Programmstarter-muessen-ausfuehrbar-sein:] beachten! 1. Ist die aktuelle Desktop-Datei bereits/noch beim laufenden Desktop registriert? – Nach einer Änderung kann man die Registrierung erzwingen durch diese Methoden: * Restart des laufenden Desktops: Bei GNOME geht das mit den Tasten [[Vorlage(Tasten, alt+F2 ) ]], und dann ein kleines [[Vorlage(Tasten, r) ]] eingeben und mit [[Vorlage(Tasten, return) ]] abschließen. * Abmeldung und erneute Anmeldung * Neustart des Rechners Wenn die Applikation nicht im Dateimanager zum alternativem Öffnen einer Datei angeboten wird, dieses Detail überprüfen: Der mit `Exec` angegebene Befehl muss genau einen der Platzhalter `%f`, `%F`, `%u`, `%U` enthalten. = Links = == Intern == * [:Desktop:] {Übersicht} Übersichtsartikel * [:Menüeditor:] – grafische Menüeditoren * [:Arronax:] – grafische Oberfläche zur Bearbeitung von Programmstartern * [:Autostart:] * [:.desktop-Dateien/Quicklists:Quicklists] – zusätzliche Aktionen für Applikationen über das Kontextmenü * [:.directory-Dateien:] – neues Untermenü erstellen * [:Desktop-Symbole:] == Extern == * [https://www.freedesktop.org/wiki/Specifications Specifications] {en} – Sammlung der für Desktop-Umgebungen relevanten Spezifikationen bei freedesktop.org, insbesondere: * [https://standards.freedesktop.org/desktop-entry-spec/latest/ Desktop Entry Specification] {en} – Aktuelle Version * [https://www.freedesktop.org/wiki/Specifications/desktop-entry-spec/ Desktop Entry Specification] {en} – Frühere Versionen * [https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#basic-format Basic format of the file] {en} – INI-Format für Desktop-Dateien * [https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#recognized-keys Recognized desktop entry keys] {en} – Schlüsselworte in Desktop-Dateien * [https://standards.freedesktop.org/menu-spec/latest/apb.html Registered Environments] {en}) – Registrierte Kurzbezeichnungen für Desktops (Groß-/Kleinschreibung beachten!). (In dem angegebenen Link ist die Bezeichnung für Cinnamon falsch. Korrekt muss es heißen: `X-Cinnamon`) * [https://specifications.freedesktop.org/autostart-spec/autostart-spec-latest.html Desktop Application Autostart Specification] {en} – Spezifikation für Autostarter * [https://linuxcritic.wordpress.com/2010/04/07/anatomy-of-a-desktop-file/ Anatomy of a .desktop File] {en} – Blogbeitrag, 04/2010 (behandelt eine veraltete Version der Spezifikation) # tag: Desktop, GNOME 3, KDE, Xfce, LXDE, Unity, MATE