Xdg-utils

Aus Foxwiki

topic - Kurzbeschreibung

Beschreibung

Installation

Anwendungen

Problembehebung

Aufruf

Optionen

Parameter

Umgebungsvariablen

Exit-Status

Konfiguration

Dateien

Sicherheit

Dokumentation

RFC

Man-Page

Info-Pages

Siehe auch

Links

Projekt-Homepage

Weblinks

ArchWiki

Vorlage:Lowercase title ja:Xdg-utils ru:Xdg-utils xdg-utils provides the official utilities for managing XDG MIME Applications.

Installation

Install the Vorlage:Pkg package.

Usage

Environment variables

Vorlage:Note

xdg-utils attempts to integrate with your desktop environment by invoking the specialized programs it provides, where applicable. The evaluation of the current environment is as follows [1]:

  • If the standardized XDG_CURRENT_DESKTOP environment variable is set to a recognized desktop environment, the corresponding value is used.
  • If any classic fallbacks or environment-specific variables, such as KDE's Vorlage:Ic, are present, then the corresponding value is used.
  • If the legacy DESKTOP_SESSION environment variable is set to a recognized desktop environment, the corresponding value is used.

During this process, if any match is found, the DE variable is internally overwritten with the detected desktop environment's normalized value. Hence, Vorlage:Ic is both a legacy environment variable, and an internal state variable for xdg-utils. As an example, if Vorlage:Ic is Vorlage:Ic, xdg-utils will internally set Vorlage:Ic to Vorlage:Ic. If no match is found, then any pre-existing Vorlage:Ic value will be used, in such a way that Vorlage:Ic is equivalent to Vorlage:Ic being unset, and having Vorlage:Ic. This implementation detail is worth noting because it has the consequence that a pre-set Vorlage:Ic is ignored if a desktop environment is otherwise detected.

Values of the variables that xdg-utils recognizes are:

Desktop Environment Vorlage:Ic Vorlage:Ic Vorlage:Ic
Vorlage:- Vorlage:Ic1 Vorlage:Ic Vorlage:-
Cinnamon Vorlage:Ic, Vorlage:Ic Vorlage:Ic Vorlage:-
Deepin Vorlage:Ic, Vorlage:Ic, Vorlage:Ic1 Vorlage:Ic Vorlage:-
Enlightenment Vorlage:Ic1 Vorlage:Ic Vorlage:-
GNOME Vorlage:Ic2 Vorlage:Ic Vorlage:Ic
GNOME Flashback Vorlage:Ic, Vorlage:Ic2 Vorlage:Ic Vorlage:Ic
KDE Plasma Vorlage:Ic Vorlage:Ic Vorlage:-
LXDE Vorlage:Ic Vorlage:Ic Vorlage:Ic
LXQt Vorlage:Ic Vorlage:Ic Vorlage:-
MATE Vorlage:Ic Vorlage:Ic Vorlage:Ic
Xfce Vorlage:Ic Vorlage:Ic Vorlage:Ic, Vorlage:Ic, Vorlage:Ic
  1. This is not an environment registered with freedesktop.org.
  2. GNOME variations, including the GNOME Classic mode, are all regarded as the same by xdg-utils.

Note that this is only a list of what the scripts provided by Vorlage:Pkg are capable of detecting. The scripts will still perform generic, environment-agnostic actions under the following conditions:

  • The generic routine was asked for, via Vorlage:Ic or Vorlage:Ic.
  • Environment detection failed. All relevant environment variables were unrecognized or unset, and the classic fallbacks did not reveal anything.
  • Environment-specific actions were performed, but failed, e.g. due to a missing program.

xdg-mime

Vorlage:Man is a script for directly querying and modifying default MIME applications. It is used within other scripts, such as xdg-open, and is also a useful troubleshooting tool.

Determine a file's MIME type:

$ xdg-mime query filetype photo.jpeg
image/jpeg

Determine the default application for a MIME type:

$ xdg-mime query default image/jpeg
gimp.desktop

Change the default application for a MIME type:

$ xdg-mime default feh.desktop image/jpeg

Debug default application for MIME type:

$ env XDG_UTILS_DEBUG_LEVEL=10  xdg-mime query default text/html
Checking /home/user/.config/mimeapps.list
Checking /home/user/.local/share/applications/defaults.list and /home/user/.local/share/applications/mimeinfo.cache
Checking /usr/local/share/applications/defaults.list and /usr/local/share/applications/mimeinfo.cache
Checking /usr/share/applications/defaults.list and /usr/share/applications/mimeinfo.cache
qutebrowser.desktop

When it is necessary to determine the MIME type of a file, xdg-mime attempts to use the right program for the desktop environment:

Desktop Environment Program Package
Cinnamon Vorlage:Ic Vorlage:Pkg
GNOME
GNOME Flashback
LXDE
MATE
Xfce
Deepin rowspan="3" Vorlage:- rowspan="3" Vorlage:-
Enlightenment
LXQt
KDE Plasma Vorlage:Ic Vorlage:Pkg

In the generic case, xdg-mime will:

xdg-open

Vorlage:Man is a resource opener used by many applications, implementing the XDG MIME Applications standard while integrating with the system's desktop environment as much as possible.

If a desktop environment was detected, its provided handler will be invoked [2]:

Desktop Environment Program Package
Cinnamon Vorlage:Ic Vorlage:Pkg
GNOME
GNOME Flashback
MATE
Deepin Vorlage:Ic Vorlage:Pkg
Enlightenment Vorlage:Ic Vorlage:Pkg
KDE Plasma Vorlage:Ic1 Vorlage:Pkg
LXDE Vorlage:Ic Vorlage:Pkg
LXQt Vorlage:- Vorlage:-
Xfce Vorlage:Ic2 Vorlage:Pkg
  1. If Vorlage:Ic is unset, then Vorlage:Ic from Vorlage:Pkg will be used instead. KDE Plasma should set this variable under any condition, though.
  2. Vorlage:Ic from Vorlage:Pkg will also be tried.

In the generic case, xdg-open will:

Vorlage:Tip

Since xdg-mime relies on Vorlage:Pkg package to implement the XDG MIME Applications standard, if you are not using a desktop environment, you should either install Vorlage:Pkg, or consider a different resource opener.

xdg-settings

See Vorlage:Man.

Shortcut to open all web MIME types with a single application:

$ xdg-settings set default-web-browser firefox.desktop

Shortcut for setting the default application for a URL scheme:

$ xdg-settings set default-url-scheme-handler irc xchat.desktop

Tips and Tricks

URL scheme handlers

To set the default application for a URL scheme you may also need to change the default application for the Vorlage:Ic MIME types:

$ xdg-mime default firefox.desktop x-scheme-handler/https x-scheme-handler/http

Ubuntuwiki

{{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] }}}

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 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 <rowclass="titel"-2> xdg-utils +++ <rowclass="kopf" cellstyle="width: 20%" > 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 <rowclass="titel"-3> Ermitteln des Standard-Programms +++ <rowclass="kopf"> 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 <?xml version="1.0"?>

          <mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
            <mime-type type="text/x-inyoka">
              <comment>Textfile with Inyoka markup</comment>
              <glob pattern="*.inyoka"/>
              <glob pattern="*.iny"/>
              <glob pattern="*.inyzip"/>
            </mime-type>
          </mime-info>

}}} 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 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 <?xml version="1.0" encoding="UTF-8"?>

       <mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
               <mime-type type="text/x-restructured">
                       <sub-class-of type="text/plain" />
                       <comment xml:lang="en">reStructuredText source file</comment>
                       <comment xml:lang="de">reStructuredText Quelldatei</comment>
                       <magic priority="50">
                               <match value="====" type="string" offset="0" />
                               <match value="----" type="string" offset="0" />
                               <match value="::::" type="string" offset="0" />
                               <match value="'" type="string" offset="0" />
                               <match value="\x22\x22\x22\x22" type="string" offset="0" />
                               <match value="Dirkwagner (Diskussion) 10:40, 2. Dez. 2022 (CET)" type="string" offset="0" />
                               <match value="^^^^" type="string" offset="0" />
                               <match value="____" type="string" offset="0" />
                               <match value="****" type="string" offset="0" />
                               <match value="++++" type="string" offset="0" />
                               <match value="####" type="string" offset="0" />
                               <match value="\x3c\x3c\x3c\x3c" type="string" offset="0" />
                               <match value="\x3e\x3e\x3e\x3e" type="string" offset="0" />
                               <match value="´´´´" type="string" offset="0" />
                       </magic>
                       <glob pattern="*.rst"/>
               </mime-type>
       </mime-info>

}}}

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 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

  1. [freedesktop-software:xdg-utils:Projektseite] {en}
  2. [archwiki:xdg-open:] {en} - Arch Linux Wiki
  3. [:Alternativen-System:] - systemweite Standard-Programme
  4. [:Homeverzeichnis#Vorgegebene-Verzeichnisse:xdg-user-dirs] - Werkzeug, das bestimmte Ordner im Homeverzeichnis festlegt