Default applications (Русский)
Программы реализуют ассоциации приложений по умолчанию разными способами. В то время как программы командной строки традиционно используют переменные окружения, графические приложения обычно используют XDG MIME Applications через GIO API, Qt API или путём запуска /usr/bin/xdg-open
, который является частью xdg-utils. Поскольку xdg-open и XDG MIME Applications довольно сложны, были разработаны различные альтернативные инструменты открытия ресурсов. В следующей таблице приведены примеры приложений для каждого метода.
Метод | Использует XDG | Примеры приложений |
---|---|---|
GIO GAppInfo | Да | Firefox, GNOME Files, PCManFM, Thunar, Thunderbird, Telegram |
/usr/bin/xdg-open |
По умолчанию | Chromium (Открытие загруженного файла) |
свой | Обычно нет | mc, ranger |
переменные окружения | Нет | man, sudoedit, systemctl |
D-Bus FileManager1 | org.freedesktop.FileManager1 | Firefox (Показать в папке), Zotero (Отображение файла), Telegram (Показать в папке) |
Общая информация
Иногда программам нужно открыть файл или URI в приложении, которое предпочитает пользователь. Для этого необходимо определить тип файла (обычно с помощью расширения или сигнатуры, сопоставленной с MIME-типом) и приложение, ассоциированное с этим типом.
Программы Heirloom UNIX использовали mime.types для определения типов MIME и mailcap для ассоциации приложений.
Инструменты открытия ресурсов
- XDG MIME Apps: реализует спецификацию XDG MIME Applications
- Правила RegEx: позволяет ассоциировать типы MIME с приложениями с помощью регулярных выражений
- Поддержка URI: позволяет ассоциировать произвольные схемы URI с приложениями
Имя | Пакет | XDG MIME Apps | Правила RegEx | Поддержка URI |
---|---|---|---|---|
xdg-open | xdg-utils | Да | Нет | Да |
mimeopen(1p) | perl-file-mimeinfo | Да | Нет | Нет |
mimeo | mimeoAUR | Да | Да | Да |
linopen | linopenAUR[ссылка недействительна: package not found] | Нет | Да | Да |
mimi | mimi-gitAUR | Нет | Нет | частично |
busking | busking-gitAUR | Нет | Да | Да |
rifle(1) | ranger | Нет | Да | Нет |
handlr | handlrAUR | Да | Нет | Да |
clifm | clifmAUR | Нет | Да | частично |
xdg-open
xdg-open (часть xdg-utils) реализует XDG MIME Applications и используется многими программами.
Из-за его сложности бывает сложно отлаживать ситуации, когда открывается неправильное приложение по умолчанию. Из-за этого существует множество альтернатив, которые пытаются улучшить его. Некоторые из этих альтернатив заменяют двоичный файл /usr/bin/xdg-open
, тем самым изменяя поведение приложений по умолчанию для большинства приложений. Другие просто предоставляют альтернативный метод выбора приложений по умолчанию.
perl-file-mimeinfo
perl-file-mimeinfo предоставляет инструменты mimeopen
и mimetype
. Они имеют немного более приятный интерфейс, чем их эквиваленты xdg-utils:
# определение типа MIME файла $ mimetype photo.jpeg photo.jpeg: image/jpeg # выбор приложения по умолчанию для этого файла $ mimeopen -d photo.jpeg Please choose an application 1) Feh (feh) 2) GNU Image Manipulation Program (gimp) 3) Pinta (pinta) use application # # открытие файла со своим стандартным приложением $ mimeopen -n photo.jpeg
Самое главное, что приложения xdg-utils на самом деле вызывают file
вместо mimetype
для обнаружения типа MIME, если они не смогли определить вашу среду рабочего стола. Это важно, потому что file
соответствует стандарту XDG.
mimeo
mimeoAUR предоставляет инструмент mimeo
который объединяет функции xdg-open
и xdg-mime
.
# определение типа MIME файла $ mimeo -m photo.jpeg photo.jpeg image/jpeg # выбор приложения по умолчанию для этого типа MIME $ mimeo --add image/jpeg feh.desktop # открытие файла со своим стандартным приложением $ mimeo photo.jpeg
Однако большая разница с xdg-utils заключается в том, что mimeo также поддерживает пользовательские "файлы ассоциаций", которые допускают более сложные ассоциации. Например, передача определенных аргументов командной строки на основе регулярного выражения соответствует:
# открытие ссылки на YouTube в VLC, не открывая новый экземпляр vlc --one-instance --playlist-enqueue %U ^https?://(www.)?youtube.com/watch\?.*v=
xdg-utils-mimeoAUR патчит xdg-utils так, что xdg-open
использует mimeo в качестве fallback, если используемая среда рабочего стола не определилась.
handlr
handlrAUR, написанный на Rust, предоставляет функциональность xdg-open
и xdg-mime
с упрощённым интерфейсом.
По сравнению с xdg-utils
, он включает:
- установку ассоциаций по расширению, устраняя необходимость искать или запоминать MIME-типы
- проверку MIME-типов и расширений
- удаление недействительных записей из
mimeapps.list
- интеллектуальное определение MIME-типов по содержимому файла в случае, если имя файла неоднозначно
- автодополнение MIME-типов, расширений и ярлыков приложений
# Следующие две команды эквивалентны handlr set .png feh.desktop handlr set image/png feh.desktop # Отображение списка приложений по умолчанию handlr list # Получение обработчика mime-типа или расширения $ handlr get .png --json {"handler":"pqiv.desktop","name":"pqiv","cmd":"/usr/bin/pqiv"} # Запуск обработчика с опциональным путём/URL handlr launch x-scheme-handler/https handlr launch x-scheme-handler/https -- https://google.ca
xdg-utils-handlrAUR предоставляет версию xdg-open
, которая использует handlr
.
clifm
Lira, встроенный в clifm
инструмент открытия ресурсов, может быть использован сам по себе с помощью опции командной строки --open
. Файл настроек (~/.config/clifm/profiles/PROFILE_NAME/mimelist.cfm
) поддерживает регулярные выражения как для MIME-типов, так и для имён файлов (или расширений файлов). Несколько примеров:
# Открытие обычного файла clifm --open /etc/hosts # Открытие каталога clifm --open /media/data # Открытие URL (через приложение, ассоциированное с MIME-типов text/http в файле настроек) clifm --open www.archlinux.org
Минималистичные замены
Следующие пакеты конфликтуют с xdg-utils, поскольку предоставляют свой собственный скрипт /usr/bin/xdg-open
.
Если вы хотите использовать один из них и при этом иметь возможность использовать xdg-utils, установите их вручную в каталог PATH перед /usr/bin
.
- linopenAUR[ссылка недействительна: package not found] — Bash-скрипт в 170 строк, разрешает правила регулярного выражения, может указывать запасное приложение для открывания файлов
- mimi-gitAUR — Bash-скрипт в 130 строк, может изменять аргументы команды для каждого типа MIME
- busking-gitAUR — Perl-скрипт в 80 строк, аналогичен mimi, но при этом поддерживает правила регулярных выражений
run-mailcap
xdg-open
будет передавать выполнение ему. Это вызовет бесконечный цикл, если вы используете /etc/mailcap
из пакета mailcap, потому что он тоже передаёт выполнение в xdg-open
.