Шпаргалка по xdg-open
Небольшая заметка про xdg-open
. Эта утилита открывает файлы или URI “наиболее подходящим” приложением, как записано в файлах *.desktop
.
Увы, как показывает практика, “наиболее подходящим” оказывается нередко какой-нибудь Firefox, что явно не всегда самое удачное решение.
Алгоритм
Выбор осуществляется по достаточно прямолинейному алгоритму.
- Во-первых, если удаётся определить текущее окружение рабочего стола, используется аналогичная утилита, специфичная для окружения. Скажем, для Xfce это
exo-open
и т.п. - Если это не удаётся, используется обобщенный алгоритм.
Обобщенный алгоритм выглядит так:
- Проверяется наличие файла и права доступа на чтение.
- Если установлена переменная окружения
DISPLAY
(т.е. если утилита выполняется в рамках сессии X), производится попытка открыть файл приложением, возвращаемымxdg-mime query default <mimetype>
. При этом*.desktop
-файл ищется в директориях:$XDG_DATA_HOME/applications
(по умолчанию$HOME/.local/share
)$XDG_DATA_DIRS/applications
(по умолчанию/usr/local/share
и/usr/share
)
- Независимо от
DISPLAY
, производится попытка открыть файл при помощиrun-mailcap
(действиеview
) - Если установлена
DISPLAY
, производится попытка открыть файл при помощиmimeopen
. - Если установлена переменная
BROWSER
, производится попытка открыть файл с помощью выбранного браузера. - Производится попытка выделить часть протокола из URI и подставить mime-тип вида
x-scheme-handler/<название протокола>
, и переход к шагу 2 (независимо от переменнойDISPLAY
) - Проверяются известные браузеры и производится попытка открытия с помощью них (графические проверяются только при установленной переменной
DISPLAY
) - Иначе, утилита завершается с ошибкой.
Теперь, как работает команда xdg-mime query default
.
- Просматривается файл ассоциаций “по умолчанию”
$XDG_CONFIG_HOME/mimeapps.list
, и, если есть, системные$XDG_CONFIG_DIRS/mimeapps.list
. Имеет значение только разделDefault Applications
(см. ниже) - Просматривается альтернативное расположение файла ассоциаций “по умолчанию”
$XDG_DATA_HOME/applications/mimeapps.list
, и, если есть, системные$XDG_DATA_DIRS/applications/mimeapps.list
. - Просматривается файлы кэша
$XDG_DATA_{HOME,DIRS}/applications/mimeinfo.cache
и умолчаний$XDG_DATA_{HOME,DIRS}/applications/defaults.list
. - Просматриваются все файлы
*.desktop
в$XDG_DATA_{HOME,DIRS}/applications
(включая поддиректории)MimeType
. Выбирается вариант с наивысшимInitialPreference
, или первый подходящий. - Если ничего не найдено, возвращается ошибка.
Формат файла mimeapps.list
mimeapps.list
имеет формат секционированного key-value файла (т.е. INI-файла). Нас, как указано выше, в данном контексте интересует только секция Default Applications
. Ключом является mime-тип, а значением – название desktop-файла с расширением. Разделитель ключа и значения – символ =
. Например:
[Default Applications]
image/jpeg=okular.desktop
Так же в этом файле есть разделы Added Associations
и Removed Associations
. В контексте xdg-open они не имеют значения, однако в контексте других приложений (особенно kde4) оказываются важны. Формат совпадает с секциями Default Applications
, но в значениях может быть разделённый ;
список.
Замечание
mimeapps.list
в общем случае может иметь префикс, который определяется переменной окружения XDG_CURRENT_DESKTOP
. Так же эта переменная окружения используется для определения текущего окружения рабочего стола и использования специфичных для него утилит. Рекомендуется особое внимание к этой переменной.
Команды xdg-mime
xdg-mime
позволяет узнать mime-тип файла и приложение по умолчанию для открытия данного mime-типа. Кроме того, эта утилита позволяет установить приложение по умолчанию.
Запросы
xdg-mime query filetype <filename>
позволяет узнать mime-тип файла.
xdg-mime query default <mime-type>
– узнать приложение по умолчанию для открытия данного mime-типа.
Установка умолчаний
xdg-mime default <desktop-file-name> <mime-type>...
позволяет установить приложение <desktop-file-name>
по умолчанию для открытия одного или нескольких mime-типов. <desktop-file-name>
– это название desktop-файла, который будет использован (без пути, с расширением)
Например:
xdg-mime default okular.desktop image/jpeg image/png
В случае, если возможно установить окружение рабочего стола, для этого будут использованы средства окружения. Иначе, будут добавлены записи в файл mimeapps.list
(первый найденный) в секцию Default Applications
.
Рекомендации
Всегда устанавливайте переменную BROWSER
. Если она не установлена, можно ждать неожиданностей. Можно указывать список, разделённый двоеточием :
.
Используйте xdg-mime default
для установки приложений по умолчанию. Если требуется посмотреть список умолчаний, можно посмотреть в файл mimeapps.list
, однако редактировать его напрямую в общем случае не рекомендуется.