Шпаргалка по xdg-open
Небольшая заметка про xdg-open . Эта утилита открывает файлы или URI “наиболее подходящим” приложением, как записано в файлах *.desktop .
Увы, как показывает практика, “наиболее подходящим” оказывается нередко какой-нибудь Firefox, что явно не всегда самое удачное решение.
Алгоритм
Выбор осуществляется по достаточно прямолинейному алгоритму.
- Во-первых, если удаётся определить текущее окружение рабочего стола, используется аналогичная утилита, специфичная для окружения. Скажем, для Xfce это exo-open и т.п.
- Если это не удаётся, используется обобщенный алгоритм.
Обобщенный алгоритм выглядит так:
- Проверяется наличие файла и права доступа на чтение.
- Если установлена переменная окружения DISPLAY (т.е. если утилита выполняется в рамках сессии X), производится попытка открыть файл приложением, возвращаемым xdg-mime query default . При этом *.desktop -файл ищется в директориях:
- $XDG_DATA_HOME/applications (по умолчанию $HOME/.local/share )
- $XDG_DATA_DIRS/applications (по умолчанию /usr/local/share и /usr/share )
Теперь, как работает команда 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_/applications/mimeinfo.cache и умолчаний $XDG_DATA_/applications/defaults.list .
- Просматриваются все файлы *.desktop в $XDG_DATA_/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 позволяет узнать mime-тип файла.
xdg-mime query default – узнать приложение по умолчанию для открытия данного mime-типа.
Установка умолчаний
xdg-mime default . позволяет установить приложение по умолчанию для открытия одного или нескольких mime-типов. – это название desktop-файла, который будет использован (без пути, с расширением)
xdg-mime default okular.desktop image/jpeg image/pngВ случае, если возможно установить окружение рабочего стола, для этого будут использованы средства окружения. Иначе, будут добавлены записи в файл mimeapps.list (первый найденный) в секцию Default Applications .
Рекомендации
Всегда устанавливайте переменную BROWSER . Если она не установлена, можно ждать неожиданностей. Можно указывать список, разделённый двоеточием : .
Используйте xdg-mime default для установки приложений по умолчанию. Если требуется посмотреть список умолчаний, можно посмотреть в файл mimeapps.list , однако редактировать его напрямую в общем случае не рекомендуется.
Как указать xdg-open что использовать для открытия ссылок определенного протокола?
Раньше, когда я использовал Opera 12 я просто добавил протокол icedit указал что открывать их надо скриптом komodo-launcher который преобразовывал ссылку и передавал ее Komodo Edit, так чтобы он удаленно открывал этот файл. Как запилить такое в другом браузере, который дергает xdg-open для этих ссылок?

Suntechnic ★★★★★
17.11.14 02:27:22 MSKКак настроить xdg-open для открытия внешнего приложения по ссылке в браузере?
Моя проблема заключается в том, что ни один браузер в linux-mint не может открывать steam-ссылки (хотя другие внешние приложения открываются нормально). Предположим, я хочу установить игру, нажимаю на соответствующую кнопку, и браузер пытается открыть ссылку наподобие «steam://run/449140» при помощи xdg-open. В результате получаем ошибку:
gvfs-open: steam://run/449140: ошибка открытия адреса: Указанный адрес не поддерживается
Но если запустить ту же ссылку через steam ( steam steam://run/449140 ), то всё пройдёт успешно и откроется окно с установкой игры. В общем, мне нужно как-то либо объяснить браузеру, что такие ссылки открываются при помощи steam, а не xdg, либо настроить xdg, чтобы тот запускал ссылку через steam. Я пробовал гуглить этот вопрос и нашёл вот что: How do I set a new xdg-open setting?. Добавил при помощи gconf новую ветку /desktop/gnome/url-handlers/steam и настроил её, но это не помогло. Возможно, мне нужно править файл ~/.local/share/applications/mimeapps.list , но я совершенно не соображаю как.
xdg-open
Opens a file or URL in the user’s preferred application. More information: https://man.archlinux.org/man/xdg-open.1.
- Open the current directory in the default file explorer:
- Open an URL in the default browser:
- Open an image in the default image viewer:
- Open a PDF in the default PDF viewer:
Операционная система Linux (Линукс или Лайнакс) во многом похожая на проприетарную Unix. Линукс распространён на серверах, что означает, что изучая её вы улучшаете свой навык администрирования, DevOps и программирования. Открытая …

Заметки об Операционной Системе FreeBSD (фри бсд). Один из старейших Unix (Юникс), прародитель многих ОС, а также по мнению многих — самая свободная операционная система. Разработан в рамках общего проекта …

Трюки Bash
Полезные заметки по работе с командной строкой: bash и прочие *sh. Однострочники, скрипты, позволяющие решать большие и малые задачи администрирования и настройки Юникс систем. Zsh для современного MacOS, Bash для …

Терминал/Консоль
Команды и инструкции терминала (консоли) Linux, MacOS, Windows и прочих операционных систем. Трюки и особенности командных оболочек, скрипты для администрирования Unix. Программирование и скриптование Windows и Linux, тонкая настройка Macos. …

Также может быть вам интересно:
- Так ли безопасен Linux? Несколько коммитов с уязвимосятми в stable
- Пример своей консольной команды в Django проекте
- Как на Bash посчитать число строк в проекте (директории)
- И снова sudo, и снова «решето»
- О многозадачности и планировщике задач (шедулер)
Свежее на «Цифре»
MessageId или как дебажить систему с минимумом проблем
Программы, 09.09.2023
Проверочный список для выпуска промышленных приложений с иллюстрациями
Работа и управление, 30.07.2023
В Google Pixel и Windows Snipping Tool есть возможность восстановления обрезанных изображений
Новости, 23.03.2023
Два подарка «под ёлочку» от Heroes of Might and Magic
Новости, 25.12.2022
Вышел Pulsar – редактор кода на основе Atom
Новости, 25.12.2022
Ленивый backup PostgreSQL
Программы, 17.12.2022
Google анонсировала OSV-Scanner: сканер уязвимостей в программных проектах
Новости, 16.12.2022
Найдена уязвимость в утилите ping для FreeBSD
Во FreeBSD найдена уязвимость, позволяющая выполнить код от пользователя root. Самое забавное, что на этот раз «дыра» была обнаружена в …

Как запустить программу в терминале в фоне, без вывода какого либо текста
Запускаем программу в терминале в фоновом режиме и разбираемся, как и почему это работает в Linux / Unix терминале.

Как установить часовой пояс в Linux
В рамках первичной настройки Операционной Системы важно установить и по какому времени вы живёте, ведь при следующем обновлении времени через …

Как найти самые большие папки и файлы в Linux
Когда кончается место на жестком диске, возникает закономерный вопрос: на что же оно было потрачено, какие файлы разрослись больше положенного?

Команда grep – полезные ключи и примеры использования
У команды «grep» довольно много различных особенностей. особенно, если учесть, что с английского это «решето» – а что может войти …

Как создать неизменяемый файл в Linux / MacOS / FreeBSD
Само собой, root может всё (если введёт пару команд), однако, это вполне легальный способ запретить изменение файла.

Как удалить все Docker образы и контейнеры
Не всегда нужно удалять всё, но объяснение данного «рецепта» объяснит как в целом удалять образы и контейнеры.
Bash < потоки ввода >вывода && управляющие конструкции || коротко о главном
Небольшая заметка о конструкциях Bash, в которых путается большинство новичков. А именно: >,

Лучше плохо, но сейчас. Взгляд на пути развития ПО
Сейчас такие языки как Perl и Ruby чувствуют себя не лучшим образом. Но ещё 10 – 15 лет назад они …