User:larivact/xdg-open

From ArchWiki

xdg-open is a desktop-independent tool to open a file or URL in the user's default application. Many applications invoke the xdg-open(1) command internally.

Inside a desktop environment (like GNOME, KDE, or Xfce), xdg-open simply passes the arguments to those desktop environment's file-opener application (eg. gio(1) open, kde-open, or exo-open(1)). which means that the associations are left up to the desktop environment.

When no desktop environment is detected (for example when one runs a standalone window manager like eg. Openbox), xdg-open will use its own configuration files.

Installation

xdg-open is part of the xdg-utils package available in the official repositories. It is for use inside a desktop session only, and should not be run as root.

If you run xdg-open without a desktop environment, you should also install perl-file-mimeinfo, or xdg-utils-mimeoAUR and mimeoAUR from the AUR for a faster alternative.

Configuration

xdg-open is configured by the files mentioned in Default applications. xdg-mime modifies the local file ~/.config/mimeapps.list and ~/.local/share/applications/mimeapps.list (deprecated).

To query the mime type used by an existing file, use

$ xdg-mime query filetype file.ext

Reversely, to query the default desktop entry associated with a specific mime type, run

$ xdg-mime query default mime/type

Examples for mime/type can be:

inode/directory (file browser)
image/jpeg (JPEG images)
application/pdf (PDF viewer)
or others

To change an associated desktop entry, use:

$ xdg-mime default application.desktop mime/type

For example set Thunar as the default file browser just run:

$ xdg-mime default Thunar.desktop inode/directory

Note that you should not specify the complete path, but only the name of the .desktop file.

This command can take multiple mime-types, allowing related files to be handled by the same program. The example below associates Emacs to all known source files:

$ xdg-mime default emacs.desktop $(grep '^text/x-*' /usr/share/mime/types)

Set the default browser

Internet protocols are using x-scheme-handler as first part of MIME-type. To show all available x-scheme-handler MIME-types and related to them *.desktop files in your system use tool lsdesktopfAUR.

lsdesktopf --gm | grep x-scheme-handler 

To set the default application for http(s):// web URLs, write

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

To do so for .html files:

$ xdg-mime default browser.desktop text/html

Alternatively, run:

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

To test if this was applied successfully, try to open an URL with xdg-open as follows:

$ xdg-open https://archlinux.org

perl-file-mimeinfo

xdg-open uses perl-file-mimeinfo as a fallback ("generic") method if no desktop environment is detected. It can be invoked directly with:

$ mimeopen -d /path/to/file

You are asked which application to use when opening /path/to/file:

Please choose a default application for files of type text/plain
       1) notepad  (wine-extension-txt)
       2) Leafpad  (leafpad)
       3) OpenOffice.org Writer  (writer)
       4) gVim  (gvim)
       5) Other...

Your answer becomes the default handler for that type of file. Mimeopen is installed as /usr/bin/vendor_perl/mimeopen.

Drop-in replacements and useful tools

xdg-open replacements

Name/Package Method Based on Configuration file
busking-gitAUR Regular expressions perl-file-mimeinfo custom
linopenAUR file custom
mimeoAUR MIME-type, regular expressions file mimeapps.list, defaults.list; custom is optional
mimi-gitAUR file custom
whippetAUR MIME-type, name, regular expressions SQLite database or file, perl-file-mimeinfo, etc custom SQLite database or mimeapps.list
ayrAUR MIME-type, name, regular expressions file or perl-file-mimeinfo, etc mimeapps.list, defaults.list
sx-openAUR Regular expressions file, bash regex custom
ranger (rifle command) MIME-type, name, regular expressions custom
Note: Some of the above packages replace xdg-utils. Those that do not can be symbolically linked to xdg-open in the user's $PATH above /usr/bin, but some applications hard-code the absolute path /usr/bin/xdg-open. In this case, install xdg-utils-no-openAUR from the AUR and copy the replacement to /usr/bin/xdg-open.

mailcap

This article or section needs expansion.

Reason: When using run-mailcapAUR, xdg-open may refer to it.[1] It should then clearly not be combined with the below file to prevent endless loops. (Discuss in User talk:Larivact/xdg-open)

The .mailcap file format is used by mail programs such as mutt and sylpheed. To have those programs use xdg-open, edit ~/.mailcap:

~/.mailcap
*/*; xdg-open "%s"

mimetype

mimetype in perl-file-mimeinfo package can display some mimetype-related information about a file.

For example:

$ mimetype file.ext

returns the mimetype of a file,

$ mimetype -d file.extension

returns a description of that mimetype.

When xdg-open fails to detect one of the desktop environments it knows about, it normally falls back to using file -i, which uses only file contents to determine the mimetype, resulting in some file types not being detected correctly. With mimetype available, xdg-open will use that instead, with better detection results, as mimetype uses the information in the shared mime info database.

Environment variables

Some environment variables, such as BROWSER, DE, and DESKTOP_SESSION, will change the behaviour of the default xdg-open. See Environment variables for more information.