Шпаргалка по xdg-open

Опубликовано 8 Марта, 2016 под тегами xdg-open, cheatsheet, desktop, X, xdg

Небольшая заметка про xdg-open. Эта утилита открывает файлы или URI “наиболее подходящим” приложением, как записано в файлах *.desktop.

Увы, как показывает практика, “наиболее подходящим” оказывается нередко какой-нибудь Firefox, что явно не всегда самое удачное решение.

Алгоритм

Выбор осуществляется по достаточно прямолинейному алгоритму.

  1. Во-первых, если удаётся определить текущее окружение рабочего стола, используется аналогичная утилита, специфичная для окружения. Скажем, для Xfce это exo-open и т.п.
  2. Если это не удаётся, используется обобщенный алгоритм.

Обобщенный алгоритм выглядит так:

  1. Проверяется наличие файла и права доступа на чтение.
  2. Если установлена переменная окружения DISPLAY (т.е. если утилита выполняется в рамках сессии X), производится попытка открыть файл приложением, возвращаемым xdg-mime query default <mimetype>. При этом *.desktop-файл ищется в директориях:
    1. $XDG_DATA_HOME/applications (по умолчанию $HOME/.local/share)
    2. $XDG_DATA_DIRS/applications (по умолчанию /usr/local/share и /usr/share)
  3. Независимо от DISPLAY, производится попытка открыть файл при помощи run-mailcap (действие view)
  4. Если установлена DISPLAY, производится попытка открыть файл при помощи mimeopen.
  5. Если установлена переменная BROWSER, производится попытка открыть файл с помощью выбранного браузера.
  6. Производится попытка выделить часть протокола из URI и подставить mime-тип вида x-scheme-handler/<название протокола>, и переход к шагу 2 (независимо от переменной DISPLAY)
  7. Проверяются известные браузеры и производится попытка открытия с помощью них (графические проверяются только при установленной переменной DISPLAY)
  8. Иначе, утилита завершается с ошибкой.

Теперь, как работает команда xdg-mime query default.

  1. Просматривается файл ассоциаций “по умолчанию” $XDG_CONFIG_HOME/mimeapps.list, и, если есть, системные $XDG_CONFIG_DIRS/mimeapps.list. Имеет значение только раздел Default Applications (см. ниже)
  2. Просматривается альтернативное расположение файла ассоциаций “по умолчанию” $XDG_DATA_HOME/applications/mimeapps.list, и, если есть, системные $XDG_DATA_DIRS/applications/mimeapps.list.
  3. Просматривается файлы кэша $XDG_DATA_{HOME,DIRS}/applications/mimeinfo.cache и умолчаний $XDG_DATA_{HOME,DIRS}/applications/defaults.list.
  4. Просматриваются все файлы *.desktop в $XDG_DATA_{HOME,DIRS}/applications (включая поддиректории) MimeType. Выбирается вариант с наивысшим InitialPreference, или первый подходящий.
  5. Если ничего не найдено, возвращается ошибка.

Формат файла 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, однако редактировать его напрямую в общем случае не рекомендуется.