Как мне установить новую настройку xdg-open?

Ответы:

17

xdg-open в основном просто смотрит, какая у вас среда рабочего стола, а затем запускает gnome-open, gvfs-open, xfce-open и т. д. Смотрите ниже инструкции по конкретной среде рабочего стола ...

Гном

Gnome использует программу gnome-open, которая использует gconf для хранения всего. Например, на моей машине с Ubuntu 10.10 работает gnome-open irc: // blah открывает xchat, потому что xchat включает в себя патч настройки gconf для добавления обработчика irc: //.

gconf-редактор, показывающий irc с конфигурацией xchat

Это показывает, как это делает gnome с настройками gconf в /desktop/gnome/url-handlers/. Смотрите xchat-2.8.8/src/common/dbus/apps_xchat_url_handler.schemasв качестве примера.

KDE

Для KDE вы должны посмотреть файлы .protocol в / usr / share / kde4 / services /, создать новый для вашего нового протокола и поместить его в ~ / .kde / share / kde4 / services /, если это супер полезно, тогда рассмотрите возможность добавления его в пакет как исправление для других пользователей.

KDE использует kde-open или kfmclient в зависимости от того, что доступно и какая у вас версия KDE.

XFCE

XFCE использует программу под названием exo-open, у этой программы нет способа сконфигурировать ее или добавить обработчики uri. Просмотр исходного кода показывает, что он использует файлы рабочего стола для указания только трех типов программ. TerminalEmulator, WebBrowser и EmailClient.

В XFCE4 (и, возможно, также в других) можно настроить xdg-open для определения собственного обработчика протокола. В некоторых вы должны создавать / редактировать следующие файлы:

~ / .local / share / Applications / protocolhandler.desktop ~ / .local / share / Applications / mimeapps.list

Пример добавления обработчика для протокола ed2k представлен на stackexchange.com 2 .

Мартин Оуэнс -доктормо-
источник
Можете ли вы упомянуть, как это сделать для всех официальных DE?
Oxwivi
Не совсем относится к вопросу, но можете ли вы процитировать каталог в нижней части снимка экрана? Спасибо.
Oxwivi
4
xdg-open в основном просто смотрит, какая у вас среда рабочего стола, а затем запускает gnome-open, gvfs-open, xfce-open и т. д. - я так не думаю. Во-первых, man-страница не говорит об этом, а во-вторых, xdg-open прекрасно работает без среды рабочего стола. Например, я использую его с оконным менеджером i3.
Алоис Махдал
Существует ли общий способ создания новой ассоциации URL / приложений во время установки приложения?
Джаярджо
14

Я опишу это с magnet:типом URI и передачей (т. Е. Битовый поток), но тот же метод можно применить к любой схеме или типу файла.

Также я проверил это с Debian Jessie, и у меня фактически нет машины с Ubuntu, но я считаю, что она должна работать так же (по крайней мере, для xdg-open , обратите внимание, что файловые менеджеры могут использовать другую логику).

  1. Узнайте строку типа MIME. Для типов файлов MIME вы можете узнать это с помощью команды file :

    $ file -i Broken_Blossoms.webm 
    Broken_Blossoms.webm: video/webm; charset=binary
    $
    

    Для приведенного выше файла тип MIME равен video/webm.

    Для обработчиков URI типом является x-scheme-handler/<scheme>, где <scheme>часть URI перед двоеточием, например, «http», «mailto», «irc» или «magnet». Ниже приведены примеры допустимых типов MIME:

    x-scheme-handler/http
    x-scheme-handler/irc
    x-scheme-handler/magnet
    x-scheme-handler/mailto
    
  2. Узнайте название файла приложения .desktop.

    Часто это не то же самое, что «официальное» имя, а скорее строчная версия, или совершенно другое имя. Установленные файлы .desktop находятся в каталоге / usr / share / Applications. Так как они являются обычными текстовыми файлами и содержат «официальное» имя, вам может помочь следующая команда:

    $ grep "Transmission" -l -r /usr/share/applications
    /usr/share/applications/transmission-gtk.desktop
    $
    

    Команда фактически означает «список файлов в этом каталоге, которые содержат слово« Transmission »». Некоторые приложения могут быть установлены только для пользователя, в этом случае путь будет ~/.local/share/applications.

    Если у вас есть «странное» приложение, которое может вообще не иметь файла, вы всегда можете создать его (и, возможно, отправить его разработчикам приложения). Легким способом было бы скопировать существующее, переписать поля, которые вы понимаете, и удалить те, которые вы не делаете. Обратитесь к спецификации для деталей.

  3. Сделайте назначение, используя команду xdg-mime :

    $ xdg-mime default transmission-gtk.desktop x-scheme-handler/magnet
    $
    

    Обратите внимание, что независимо от того, где файл находится (/ usr / share / Applications, ~ / .local / share / Applications ...), вы всегда используете только имя , а не полный путь.

    Обычно команда ничего не выводит - это нормально. Если вы хотите проверить, что вы только что сделали, или посмотреть, что в данный момент назначено любому типу MIME, не открывая его:

    $ xdg-mime query default x-scheme-handler/magnet
    transmission-gtk.desktop
    $
    

Примечание 1: Если вы хотите проверить другие типы MIME, вы можете посмотреть /etc/mime.types. Он не содержит все типы в мире; например, обработчики URI, но его можно использовать для «агрессивной» формы обработки ассоциаций. Например:

grep ^video/ | cut -d\t -f1 | xargs xdg-mime default vlc.desktop

связал бы все известные видео форматы с VLC.

Примечание 2. Файлы .desktop часто содержат список типов MIME, которые, как они утверждают, могут обрабатывать с помощью MimeTypeполя. Страница man xdg-mime сообщает, что файл .desktop должен иметь тип MIME, прежде чем будет работать вышеупомянутая команда, но для меня это работает, даже если поле отсутствует. (Я имею в виду, ассоциация будет применена, и приложение запустится - если это действительно может обработать тип, это другой вопрос). Я не уверен, что является недостатком (возможно, в будущем xdg-mime будет более ограничительным).

Алоис Махдал
источник
wiki.archlinux.org/index.php/xdg-open дает более или менее то же самое. все еще хороший там.
Шириш
Этот ответ - лучший способ. Совет: 1) xdg-mime query filetype FILEэто способ XDG найти типы пантомимы. 2) Вы также можете отредактировать значения по умолчанию самостоятельно, чтобы упорядочить вещи и создать резервную копию позже: .config/mimeapps.listэто файл.
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件
откат 2 правок: @frank, хочешь объяснить, как xdg-mime "работает лучше"? IMO- файл - это аутентичный инструмент для типов MIME, xdg-mime query filetype xyz.wbemOTOH дает меньше информации и гораздо больше печатает.
Алоис Махдал
1
Большое объяснение и подсказка, чтобы использовать единственное имя файла рабочего стола было решением, которое я искал, спасибо!
Андреа Ричиарди
1
этот совет, наконец, помог мне решить, что я не могу войти в систему с помощью приложения Slack Desktop на Linux. Slack перенаправляет в браузер, но затем браузер использует схему URI для перенаправления обратно в Slack. Ваши советы помогли мне увидеть, что слабое отображение URI xdg-mime исчезло. так рад, что нашел это после часа поиска! Спасибо!
Пестофаг
2

Я хотел связать postmanссылки с моим установленным вручную приложением Postman (не расширением Chrome), чтобы я мог открывать документы почтальона из браузера следующим образом:

введите описание изображения здесь

введите описание изображения здесь

Ссылка, которую я хотел связать, выглядит следующим образом:

postman://app/collections/import/39995-2b0394ab-b007-488d-9a0a...

Чтобы сделать ассоциацию, я сделал следующие шаги:

  1. Установите приложение вручную (скачайте и распакуйте tar.gz) в /home/andrzej.rehmann/software/postman/
  2. Создать файл рабочего стола в /usr/share/applications/Postman.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name=Postman
Icon=/home/andrzej.rehmann/software/postman/app/resources/app/assets/icon.png
Exec="/home/andrzej.rehmann/software/postman/Postman" %u
Comment=Develop with pleasure!
Categories=Development;
Terminal=false
StartupWMClass=Postman
  1. Свяжите postmanссылку XDG с приложением, запустив:

xdg-mime default Postman.desktop x-scheme-handler/postman


Я аннулировал эту конфигурацию, если кому-то интересно: https://github.com/hoto/ansible-home-fedora/blob/fedora/roles/postman/tasks/postman_installer.yml

Анджей Реманн
источник