Как команда xdg-open знает, какое приложение использовать для открытия файла?

Вопрос или проблема

Я ожидал бы, что команда xdg-open будет использовать то же приложение, которое открывается, когда я дважды щелкаю файл в менеджере файлов по умолчанию, но это не всегда так.

Например, моя среда рабочего стола – XFCE, мой файловый менеджер – Thunar, а мой просмотрщик изображений по умолчанию – Ristretto. Однако команда xdg-open example.png открывает файл пример PNG в Pinta. Почему?

xdg-open – это инструмент, независимый от рабочего стола, для настройки приложений по умолчанию для пользователя. Многие приложения вызывают команду xdg-open внутренне. Внутри среды рабочего стола (например, GNOME, KDE или Xfce) xdg-open просто передает аргументы приложению для открытия файла в этой среде рабочего стола (например, gvfs-open, kde-open или exo-open), что означает, что ассоциации оставляются на усмотрение среды рабочего стола. Когда ни одна среда рабочего стола не обнаружена (например, когда запускается автономный оконный менеджер, такой как Openbox), xdg-open будет использовать свои собственные конфигурации.

из ArchWiki

Что касается вашего вопроса, вы можете попробовать установить приложение по умолчанию, связанное с PNG-файлом:

xdg-mime default <ristretto.desktop> image/png

Вам нужно выяснить точное имя файла рабочего стола Ristretto.

После этого вы можете проверить это с помощью:

xdg-mime query default image/png

@Ivan Это происходит, вероятно, потому, что вы не указали правильный тип файла при запросе приложения по умолчанию. Важно, как xdg определяет этот конкретный тип файла. Это можно легко выяснить, выполнив

xdg-mime query filetype example.png

Например, если я выполню это с конкретным PNG-файлом на своем компьютере, он вернет image/x-apple-ios-png. Как только вы выясните фактический тип файла, вы можете выполнить

xdg-mime query default <новый тип файла>

и получить приложение, которое xdg использует для этого конкретного типа файла. В случае, если для этого типа файла не определено приложение, xdg-open проверяет, доступен ли файл /etc/debian_version; если это так, он запустит run-mailcap, который очень похож на xdg-open и также пытается найти программу для открытия файла.

Только если это также не удастся, xdg-open запросит у пользователя определить программу для открытия файла.

Вы можете установить XDG_UTILS_DEBUG_LEVEL, чтобы увидеть, какие файлы использует xdg-open для поиска приложения по умолчанию:

$ XDG_UTILS_DEBUG_LEVEL=3 xdg-open example.png
Выбрана DE общая
Запуск файла --brief --dereference --mime-type "/home/me/example.png"
Проверка /home/me/.config/mimeapps.list
/home/me/.local/share:/usr/local/share/:/usr/share/

Другой пример:

$ XDG_UTILS_DEBUG_LEVEL=3 xdg-open example.svg
Выбрана DE общая
Запуск файла --brief --dereference --mime-type "/home/me/example.svg"
Проверка /home/me/.config/mimeapps.list
Проверка /home/me/.local/share/applications/defaults.list и /home/me/.local/share/applications/mimeinfo.cache
Проверка /home/me/.local/share/applications/defaults.list и /home/me/.local/share/applications/mimeinfo.cache
Проверка /usr/local/share//applications/defaults.list и /usr/local/share//applications/mimeinfo.cache
Проверка /usr/local/share//applications/defaults.list и /usr/local/share//applications/mimeinfo.cache
Проверка /usr/share//applications/defaults.list и /usr/share//applications/mimeinfo.cache
/home/me/.local/share:/usr/local/share/:/usr/share/

Из man xdg-mime:

xdg-mime учитывает следующие переменные окружения:

XDG_UTILS_DEBUG_LEVEL
Установка этой переменной окружения на ненулевое численное значение заставляет xdg-mime выполнять более подробную отчетность на stderr. Установка более высокого значения увеличивает Verbosity.

Вот некоторые ссылки, касающиеся mimeinfo.cache (которые, кажется, являются последней инстанцией для поиска приложения по умолчанию):


В качестве альтернативы вы можете использовать strace, чтобы увидеть, какие файлы читает xdg-open:

strace xdg-open example.png

Ответ или решение

Как команда xdg-open определяет, какое приложение использовать для открытия файла?

Введение

Команда xdg-open является стандартной утилитой, используемой в Linux для открытия файлов с помощью приложения, ассоциированного с их типом. Однако у многих пользователей возникают случаи, когда поведение xdg-open отличается от ожиданий. Например, открывая изображение с помощью xdg-open example.png, вы можете обнаружить, что вместо привычной программы, такой как Ristretto, открывается совершенно другое приложение, например, Pinta. Давайте детально рассмотрим, как работает команда xdg-open и почему могут возникать такие несоответствия.

Как работает xdg-open?

  1. Инструмент для независимой конфигурации приложений:
    xdg-open представляет собой инструмент, который работает независимо от рабочей среды (Desktop Environment, DE). При его запуске выполняется не только простое открытие файла; команда опирается на настройки вашей системы для определения, какое приложение следует использовать.

  2. Взаимодействие с рабочей средой:
    В зависимости от установленной рабочей среды (такие как GNOME, KDE или Xfce), xdg-open будет передавать аргументы к приложениям, создающим интерфейс для открытия файлов (например, gvfs-open, kde-open или exo-open). Таким образом, в случае DE, такие как XFCE, ваша настройка в Thunar не всегда напрямую влияет на xdg-open.

  3. Проверка ассоциаций:
    xdg-open использует список MIME-типов для поиска приложений по умолчанию. Когда вы открываете файл с помощью этой команды, она сначала определяет MIME-тип файла, используя инструменты вроде file --mime-type, а затем обращается к нескольким файлам конфигурации. Основные места, где xdg-open ищет настройки по умолчанию:

    • ~/.config/mimeapps.list
    • ~/.local/share/applications/defaults.list
    • /usr/share/applications/defaults.list
    • Кэш MIME-типов в mimeinfo.cache
  4. Как изменить ассоциации MIME-типов:
    Если xdg-open не открывает файл с помощью ожидаемого приложения, вам необходимо установить правильную ассоциацию. Для этого можно использовать команду:

    xdg-mime default <ristretto.desktop> image/png

    Прежде чем указать точное имя файла, следует удостовериться, что вы указали правильный MIME-тип. Это можно сделать, запустив:

    xdg-mime query filetype example.png
  5. Дебаггинг и диагностика:
    Для получения дополнительной информации о том, какие файлы проверяет xdg-open, вы можете установить переменную окружения XDG_UTILS_DEBUG_LEVEL:

    XDG_UTILS_DEBUG_LEVEL=3 xdg-open example.png

    Это даст вам понимание, какие файлы конфигурации читает команда xdg-open.

Заключение

Разумное управление ассоциациями файлов в Linux — это основополагающий аспект для повышения эффективности работы. Понимание механизма работы команды xdg-open и каким образом она определяет, какое приложение использовать для открытия файлов, позволяет вам настроить свою систему так, чтобы наиболее соответствовать вашим предпочтениям. Если у вас возникли проблемы с открытием файлов через xdg-open, используйте приведенные выше советы и команды для диагностики и настройки ассоциаций, чтобы добиться желаемого поведения.

Оцените материал
Добавить комментарий

Капча загружается...