Как правильно и легко настроить `xdg-open` без какой-либо среды?

63

Я использую оконный менеджер OpenBox без какой-либо среды рабочего стола .

xdg-openведет себя странно. Это открывает все с firefox.

$ xdg-settings --list
Known properties:
  default-web-browser           Default web browser

Я ищу простую программу; что-то вроде чтения каждого *.desktopфайла в /usr/share/applications/папке и автоматической установки настроек xdg.

kravemir
источник
Использование xdg-mime(часть xdg-utils) - лучший ответ для работы с (запрос, настройка) xdg-open. См. Также unix.stackexchange.com/questions/8793/…
Майкл

Ответы:

24

Вы можете использовать perl-file-mimeinfo в extraрепозитории для управления mimetypes.

Пример, чтобы открыть все .pdfфайлы в apvlv:

/usr/bin/vendor_perl/mimeopen -d $file.pdf

а затем, в командной строке введите приложение: apvlv.

jasonwryan
источник
Оно работает. Но это только открывает файл. Так что мой xdg-openоставленный ненастроенный и приложения xdg-openне будут открывать файлы правильно.
Кравемир
Я не совсем понимаю ваш комментарий. Что не работает? -dПереключатель устанавливает значение по умолчанию. Так что, если вы используете его для открытия fileA.pdf- вы сможете открыть его fileB.pdfс помощью предпочитаемого вами приложения.
Джейсонвриан
1
Да. mimeopen -d a.pdfустанавливает значение по умолчанию для *.pdf, но оно устанавливает значение по умолчанию для себя - mimeopen b.pdfработает. Но xdg-openконфигурация осталась неизменной, и она все еще открывает все с firefox: /
Кравемир
3
Как только я установил значение по умолчанию mimeopen, xdg-openведет себя как ожидалось - в случае .pdfs он открывает их с помощью apvlv.
Джейсонвриан
1
Это не работает для меня в Lubuntu 16.04. sudo xdg-mime default pluma.desktop text/plainдает touch: cannot touch "/home/user/.local/share/applications/mimeapps.list": No such file or directory /usr/bin/xdg-mime: 807: /usr/bin/xdg-mime: cannot create /home/user/.local/share/applications/mimeapps.list.new: Directory nonexistent; /usr/bin/vendor_perl/mimeopen -d $file.txtдает bash: /usr/bin/vendor_perl/mimeopen: No such file or directory.
Николай Лещов
62

Почему бы не использовать утилиты из самого xdg?

Сделать Thunar файловым браузером по умолчанию, т.е. приложением по умолчанию для открытия папок.

$ xdg-mime default Thunar.desktop inode/directory

использовать xpdf в качестве средства просмотра PDF по умолчанию:

$ xdg-mime default xpdf.desktop application/pdf

Это должно создать запись в вашей локальной базе данных MIME:

~/.local/share/applications/defaults.list
[Default Applications]
application/pdf=xpdf.desktop

Ваши PDF-файлы должны быть открыты с помощью xpdf.

lzap
источник
+1 и см. Также мой соответствующий ответ на связанный вопрос, unix.stackexchange.com/questions/77136/…
майкл
2
Самый полезный ответ, спасибо. Проще всего узнать об этом, defaults.listпоэтому при необходимости его можно отредактировать вручную.
mVChr
По какой-то причине xdg-mimeничего не изменилось defaults.list, но редактирование вручную (благодаря подсказкам в этом ответе) помогло.
Скиппи ле Гран Гуру
К вашему сведению, для этого требуется несколько зависимостей Perl, убедитесь, что они установлены. Дистрибутивы RPM / DEB установят их для вас как обычно.
июня
2
Кажется defaults.list, сейчас называется mimeapps.list. Посмотрите Arch Wiki для списка действительных местоположений для mimeapps.list.
Матин Улхак,
7

В Debian вы можете использовать команду как root

update-mime-database /usr/share/mime

установив shared-mime-infoпакет.

enzotib
источник
2
Я попробовал это. Не работает Я бегу Арч.
Кравемир
-1 Это характерно для окружений рабочего стола, которые зависят от shared-mime-info, таких как GNOME
craymichael
7

Вы можете использовать что-то вроде этого, чтобы сгенерировать соответствующие xdg-mimeкоманды для каждого из ваших .desktopфайлов и содержащихся в них mime-типов, а затем выполнить те, которые вам нравятся. Примечание /usr/share/applicationsможет иметь подкаталоги.

for dd in /usr/share/applications ~/.local/share/applications; do
  for d in $(ls $dd 2>/dev/null | grep "\\.desktop$"); do
    for m in $(grep MimeType $dd/$d | cut -d= -f2 | tr ";" " "); do
      echo xdg-mime default $d $m;
    done;
  done;
done
aleb
источник
3

Это похоже на ответ @ aleb , но работает с файлами рабочего стола с пробелами:

find /usr/share/applications ~/.local/share/applications -iname '*.desktop' -print0 | while IFS= read -r -d $'\0' d; do
  for m in $(grep MimeType "$d" | cut -d= -f2 | tr ";" " "); do
    echo xdg-mime default "'$d'" "'$m'"
  done
done
user60561
источник