[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] Die [freedesktop-software:xdg-utils:] {en} beinhalten einige Kommandozeilenwerkzeuge, von denen wahrscheinlich '''xdg-open''' das am meisten verwendete ist. Mit diesen kann man die Zuordnung von [:MIME-Typ:MIME-Typen] und Standard-Anwendungen konfigurieren. Sie wurden im Zuge der Bemühungen der [https://www.freedesktop.org/ X Desktop Group] {en} (XDG) entwickelt, um desktop-übergreifende Standards für Linux zu schaffen. Wichtig zum Verständnis der Funktionsweise ist, dass diese Werkzeuge zum einen eine grafische Oberfläche benötigen (obwohl diese zum Ausführen der Befehle nicht benötigt wird) und zum anderen Aktionen in der Regel pro Benutzer definiert werden. Hintergrund: die Anwendungen wurden in erster Linie als Hilfsprogramme für andere Programme (z.B. im Paketbau oder für Einstellungsmenüs der Distribution) konzipiert. Die Zielgruppe sind also Entwickler, Programmierer, Maintainer und Distributoren. Eine Weiterentwicklung sind die [gnomeprojects:SandboxedApps:xdg-apps] {en}, die aber nicht mit den hier beschriebenen Werkzeugen verwechselt werden sollten. Einige der Befehle können zwischen System und Benutzer unterscheiden. Man kann sie also für systemweite Eingriffe mit [:sudo:Root-Rechten] aufrufen, muss dann aber die Option `--mode system` setzen. Funktioniert diese Option bei einem Befehl nicht, ist dieser auch nicht dazu gedacht, mit Root-Rechten ausgeführt zu werden. Speziell bei Ubuntu kann alternativ das etablierte, von Debian geerbte [:Alternativen-System:] zum Einsatz kommen, wenn systemweite Vorgaben gesetzt werden sollen. = Installation = In der Regel sind die xdg-utils unter Ubuntu vorinstalliert. Falls doch nicht vorhanden, kann man sie einfach mittels des folgenden Pakets installieren [1]: * '''xdg-utils''' Enthalten sind die folgenden Programme (die hervorgehobenen werden im Verlauf des Artikels genauer besprochen). {{{#!vorlage Tabelle xdg-utils +++ Befehl Beschreibung +++ `xdg-desktop-menu` Kommandozeilenwerkzeug zum Hinzufügen/Entfernen von Einträgen in Desktop-Menüs (Kontextmenü) +++ `xdg-desktop-icon` Kommandozeilenwerkzeug zum Hinzufügen/Entfernen von Desktop-Symbolen +++ [#xdg-mime `xdg-mime`] Kommandozeilenwerkzeug zum Abfragen von Informationen über Dateitypen und zum Hinzufügen neuer Definitionen +++ `xdg-icon-resource` Kommandozeilenwerkzeug zum Hinzufügen/Entfernen von Symboldateien (Icons) +++ [#xdg-open `xdg-open`] Datei oder URL mit dem Standard-Programm des Benutzers öffnen +++ [#xdg-email `xdg-email`] Aufruf der Funktion ''"Neue E-Mail schreiben"'' (mit dem Standard-Programm des Benutzers) +++ `xdg-screensaver` Kommandozeilenwerkzeug zur Kontrolle des Bildschirmschoners [:Bildschirmschoner#XScreenSaver:XScreenSaver] }}} Kein Bestandteil der xdg-utils ist dagegen [:Homeverzeichnis#Vorgegebene-Verzeichnisse:xdg-user-dirs]. = xdg-mime = xdg-mime ist ein Werkzeug, mit dem sich die jeweiligen Standard-Programme des Benutzers anzeigen und ändern lassen. Das Programm bezieht seine Programmliste aus der Datei '''~/.local/share/applications/mimeapps.list''' im [:Homeverzeichnis:]. Man kann auch einen [:Editor:] verwenden, um diese Datei selbst [:MIME-Typ#Beispiel:anzupassen]. Änderungen wirken sich allerdings erst bei einer erneuten Anmeldung aus. == MIME-Typ ermitteln == Vor einer Änderung ist es notwendig, den [:MIME-Typ:] einer Datei zu kennen. Als Beispiel soll eine PDF-Datei dienen: {{{#!vorlage Befehl xdg-mime query filetype DATEI.pdf }}} liefert folgenden MIME-Typ: {{{ application/pdf; charset=binary }}} == Standard-Anwendung ausgeben lassen == Ausgeben lässt sich das aktuelle Standardprogramm mittels: {{{#!vorlage Befehl xdg-mime query default application/pdf }}} Je nach Ubuntu-Version und -Variante erhält man eine andere Antwort, je nachdem, welches Standard-Programm jeweils bevorzugt wird. Hier die Antwort unter Ubuntu: {{{ evince.desktop }}} Konkret ist hier also der Programmstarter '''/usr/share/applications/evince.desktop''' zuständig, der den PDF-Betrachter [:Evince:] aufruft. Aus der nachfolgenden Tabelle wird deutlich, wie komplex das Setzen einer Standard-Anwendung sein kann, wenn man eine Anwendung für mehr als einen Dateityp oder ein Protokoll nutzen will. {{{#!vorlage Tabelle Ermitteln des Standard-Programms +++ Programm Befehl +++ [:Dateimanager:] `xdg-mime query default inode/directory` +++ [:Internetanwendungen:Webbrowser] `xdg-mime query default text/html`[[BR]]`xdg-mime query default x-scheme-handler/http`[[BR]]`xdg-mime query default x-scheme-handler/https` +++ [:Internetanwendungen#E-Mail:E-Mail-Programm] `xdg-mime query default x-scheme-handler/mailto` +++ [:Editor:] `xdg-mime query default text/plain` +++ Bildbetrachter `xdg-mime query default image/jpeg`[[BR]]`xdg-mime query default image/png`[[BR]]`xdg-mime query default image/...` }}} == Standard-Anwendung ändern == {{{#!vorlage Hinweis Unter einer Desktop-Umgebung leitet xdg-open lediglich an die entsprechende Standard-Programme weiter, so dass Einstellungen über die xdg-Werkzeuge eventuell unwirksam bleiben können. Abhilfe schafft dann eine Anpassung über die jeweilige Desktop-Umgebung, beispielsweise im Dateimanager über das Kontextmenü einer Datei oder in den Einstellungen. }}} Eine Anwendung kann über ihre [:.desktop-Dateien:.desktop-Datei] als neuer Standard eingestellt werden. Beispielsweise setzt folgender Befehl [:MuPDF:] als neue Standard-Anwendung für PDF-Dateien: {{{#!vorlage Befehl xdg-mime default mupdf.desktop application/pdf }}} == Neuen MIME-Typ erstellen == Einen neuen MIME-Typ zu erstellen kann man am besten mit einem konkreten Beispiel erklären: Für Wikiartikel von ubuntuusers, die lokal mit [:InyokaEdit:] angelegt werden, soll ein MIME-Typ erstellt werden. Dateien mit der Endung '''.inyoka''' oder '''.iny''' sollen einem neuen MIME-Typ zugeordnet und mit Symbol sowie Zuordnung zur Standard-Anwendung versehen werden. Zunächst wird dazu eine Datei mit der Beschreibung benötigt. Der Inhalt der '''ubuntuusers-inyoka.xml''' soll wie folgt aussehen: {{{#!code xml Textfile with Inyoka markup }}} Der MIME-Typ kann nun installiert werden: {{{#!vorlage Befehl xdg-mime install ubuntuusers-inyoka.xml }}} Ein passendes Logo kann aus dem [:Wiki/Icons/Portal:Portal] heruntergeladen und installiert werden: {{{#!vorlage Befehl wget https://raw.githubusercontent.com/inyokaproject/inyokaedit/master/application/res/images/inyokaedit_64x64.png xdg-icon-resource install --context mimetypes --size 64 inyokaedit_64x64.png text-x-inyoka }}} Zuletzt wird die Standard-Anwendung festgelegt: {{{#!vorlage Befehl xdg-mime default inyokaedit.desktop text/x-inyoka }}} Um MIME-Typ und Icon systemweit für alle Benutzer einzurichten, müssen ausnahmsweise Root-Rechte verwendet werden. Dabei muss den Programmaufrufen die Option `--mode system` mitgegeben werden. {{{#!vorlage Befehl sudo xdg-mime install --mode system ubuntuusers-inyoka.xml sudo xdg-icon-resource install --mode system --context mimetypes --size 64 inyokaedit_64x64.png text-x-inyoka }}} Für das systemweite Setzen der Standardanwendung ist `xdg-mime` dagegen nicht geeignet. Wer sich nicht für Inyoka interessiert, kann das beschriebene Verfahren für [wikipedia:ReStructuredText:] bzw. den MIME-Typ "`text/x-restructured`" umsetzen. Hier der Inhalt von '''restructured.xml''': {{{#!code xml reStructuredText source file reStructuredText Quelldatei }}} = xdg-open = {{{#!vorlage Hinweis Ein Schwachpunkt der xdg-utils ist, dass keine Desktop-Umgebung zwingend verpflichtet ist, die Standardisierungsvorschläge umzusetzen. Daher kann es in der Praxis passieren, dass trotz korrekter Verwendung die jeweilige Desktop-Umgebung ihren eigenen Vorgaben folgt. }}} xdg-open öffnet unabhängig von der eingesetzten Desktop-Umgebung oder dem verwendeten Fenstermanager das jeweilige Standard-Programm, allerdings abhängig vom [:MIME-Typ:]. Das Werkzeug lässt sich zum einen vom Terminal aus nutzen, zum anderen benutzen viele Programme intern xdg-open, um bestimmte Aktionen auszuführen. Wird das Programm in einer Desktop-Umgebung benutzt, so leitet es jegliche Anfragen direkt an die entsprechenden Programme der Desktop-Umgebung weiter (`gnome-open`, `kde-open`, `exo-open` usw.). Das Programm wird über das Terminal[2] aufgerufen. So öffnet: {{{#!vorlage Befehl xdg-open DATEI.pdf }}} die im aktuellen Verzeichnis liegende [:PDF:]-Datei mit dem Standard-PDF-Betrachter, während: {{{#!vorlage Befehl xdg-open http://ubuntuusers.de }}} die Internetadresse (URL) `http://ubuntuusers.de` im Browser öffnet. Hierzu ist die Angabe des [wikipedia:Netzwerkprotokoll:Netzwerk-Protokolls] notwendig, in diesem Fall also [wikipedia:Hypertext_Transfer_Protocol:HTTP]. Dieser Befehl ist daher nicht äquivalent zu: {{{#!vorlage Befehl xdg-open ubuntuusers.de }}} denn hier wird versucht, die Datei '''ubuntuusers.de''' zu öffnen, was in der Regel zu einer Fehlermeldung führt. = xdg-email = Für die Funktion ''"Neue E-Mail schreiben"'' dient ein weiteres Werkzeug: `xdg-email`. Auch die in manchen Desktop-Umgebungen im Kontextmenü [[Vorlage(Tasten, rmb)]] enthaltene Funktion ''"Senden an E-Mail-Empfänger"'' nutzt diesen Befehl. Er kann mit diversen Optionen zu Absender, Betreff, Text etc. aufgerufen werden (siehe [https://manpages.ubuntu.com/manpages/bionic/en/man1/xdg-email.1.html manpage] {en}). Für [:18.04:] ist die Voraussetzung, dass mindestens eine gültige E-Mail-Adresse angegeben werden muss, nicht zutreffend; bei älteren Ubuntu-Versionen ist das ggf. anders: {{{#!vorlage Befehl xdg-email BENUTZER@PROVIDER.TLD }}} ansonsten scheitert der Aufruf mit der Meldung >"Unable to detect the URI-scheme of "mailto:" oder >"Konnte das URI-Schema von »mailto:« nicht erkennen." Siehe auch [bug:1210754:] im Kombination mit [:Simple_Scan#Scan2Mail:]. = Links = * [freedesktop-software:xdg-utils:Projektseite] {en} * [archwiki:xdg-open:] {en} - Arch Linux Wiki * [:Alternativen-System:] - systemweite Standard-Programme * [:Homeverzeichnis#Vorgegebene-Verzeichnisse:xdg-user-dirs] - Werkzeug, das bestimmte Ordner im Homeverzeichnis festlegt #tag: Shell, Desktop, System, Dateiverwaltung