Default applications (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи 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 Нет Да Да
mimi mimi-gitAUR Нет Нет частично
busking busking-gitAUR Нет Да Да
rifle(1) ranger Нет Да Нет
handlr handlr Да Нет Да
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

handlr, написанный на 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 — Bash-скрипт в 170 строк, разрешает правила регулярного выражения, может указывать запасное приложение для открывания файлов
  • mimi-gitAUR — Bash-скрипт в 130 строк, может изменять аргументы команды для каждого типа MIME
  • busking-gitAUR — Perl-скрипт в 80 строк, аналогичен mimi, но при этом поддерживает правила регулярных выражений

run-mailcap

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