Вопрос или проблема
Я ожидал бы, что команда 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
(которые, кажется, являются последней инстанцией для поиска приложения по умолчанию):
- MIME – Debian Wiki
- Когда обновляется /usr/share/applications/mimeinfo.cache, и могу ли я защитить его? – Ask Ubuntu
- Какова цель файлов mime.cache? – Unix & Linux Stack Exchange
- XDG MIME Applications – ArchWiki
В качестве альтернативы вы можете использовать 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?
-
Инструмент для независимой конфигурации приложений:
xdg-open
представляет собой инструмент, который работает независимо от рабочей среды (Desktop Environment, DE). При его запуске выполняется не только простое открытие файла; команда опирается на настройки вашей системы для определения, какое приложение следует использовать. -
Взаимодействие с рабочей средой:
В зависимости от установленной рабочей среды (такие как GNOME, KDE или Xfce),xdg-open
будет передавать аргументы к приложениям, создающим интерфейс для открытия файлов (например,gvfs-open
,kde-open
илиexo-open
). Таким образом, в случае DE, такие как XFCE, ваша настройка в Thunar не всегда напрямую влияет наxdg-open
. -
Проверка ассоциаций:
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
-
Как изменить ассоциации MIME-типов:
Еслиxdg-open
не открывает файл с помощью ожидаемого приложения, вам необходимо установить правильную ассоциацию. Для этого можно использовать команду:xdg-mime default <ristretto.desktop> image/png
Прежде чем указать точное имя файла, следует удостовериться, что вы указали правильный MIME-тип. Это можно сделать, запустив:
xdg-mime query filetype example.png
-
Дебаггинг и диагностика:
Для получения дополнительной информации о том, какие файлы проверяетxdg-open
, вы можете установить переменную окруженияXDG_UTILS_DEBUG_LEVEL
:XDG_UTILS_DEBUG_LEVEL=3 xdg-open example.png
Это даст вам понимание, какие файлы конфигурации читает команда
xdg-open
.
Заключение
Разумное управление ассоциациями файлов в Linux — это основополагающий аспект для повышения эффективности работы. Понимание механизма работы команды xdg-open
и каким образом она определяет, какое приложение использовать для открытия файлов, позволяет вам настроить свою систему так, чтобы наиболее соответствовать вашим предпочтениям. Если у вас возникли проблемы с открытием файлов через xdg-open
, используйте приведенные выше советы и команды для диагностики и настройки ассоциаций, чтобы добиться желаемого поведения.