Default applications (Русский)

Состояние перевода: На этой странице представлен перевод статьи Default applications. Дата последней синхронизации: 9 апреля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

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

Примечание perl-file-mimeinfo до версии 0.28-1 не полностью соответствует стандарту 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

Важно Если вы используете run-mailcapAUR, возможно, что xdg-open будет передавать выполнение ему. Это вызовет бесконечный цикл, если вы используете /etc/mailcap из пакета mailcap, потому что он тоже передаёт выполнение в xdg-open.