Откуда Firefox получает «стандартные» приложения для открытия файлов?

12

По умолчанию Firefox (33.0) на моем FreeBSD 11.0-CURRENT имеет приложение по умолчанию для открытия PDF-файлов, установленное на Inkscape. Firefox помнит свой предыдущий выбор, Evince , в «Что должен делать Firefox с этим файлом?» диалоговое окно, так что до недавнего времени я был просто смущен, откуда взялась эта конфигурация, но в основном игнорировал ее, потому что она едва касалась меня.

Однако недавно я начал использовать Zotero в качестве своей литературной базы данных. Zotero работает как плагин Firefox и игнорирует выбор, сделанный в моих настройках Firefox, открывать PDF-файлы с помощью evince или спрашивать, что с ними делать, и просто открывает их с помощью Inkscape. Это заставило меня попытаться проследить за этим конкретным элементом конфигурации Firefox, но я не смог найти, где установлено это значение по умолчанию.

Я не смог найти строку Inkscape(или inkscape) в любом файле, связанном с Firefox, в моем домашнем каталоге.

Anaphory
источник
1
Связанный: unix.stackexchange.com/questions/149033/…
Джон В. У. Смит,
Мой Firefox по умолчанию установлен на Font-Viewer.
пользователь

Ответы:

14

Ссылка на «похожий вопрос» ( поведение приложений по умолчанию в xdg-open - явно не связано, но некоторые эксперименты показали, что поведение действительно эквивалентно таковому из xdg-open) привела меня глубже в кроличью нору. Хотя Firefox не полагается и не наследует правила xdg-open, он использует файлы спецификации MIME так же, как xdg-openи.

Для пользователя поведение при открытии MIME настраивается файлом спецификации ~/.local/share/applications/mimeapps.list.

Для меня этот файл содержит всего несколько разумных протоколов и HTML (и аналогичных) файлов, к которым можно подключиться userapp-Firefox-??????.desktop, но вы можете легко добавить строку вроде

application/pdf=evince.desktop

чтобы решить эту проблему для каждого пользователя. Если файл еще не существует, обязательно добавьте заголовок раздела, например

[Default Applications]
application/pdf=evince.desktop

Глубже вниз, типы MIME определены в /usr/local/share/applications/mimeinfo.cache(это может быть, /usr/share/…если вы не находитесь в системе FreeBSD), который делает список application/pdf=inkscape.desktop;evince.desktop;. Оба evince.desktopи inkscape.desktopв этой папке содержатся MimeType=[…]application/pdf;[…].

Он mimeinfo.cacheавтоматически генерируется из типов MIME, перечисленных в .desktopфайлах, без какого-либо четко определенного порядка, поэтому вам придется либо удалить тип PDF MIME из Inkscape и update-mime-databaseсгенерировать кэш с помощью , либо сгенерировать mimeapps.list (либо глобально /usr/local/share/applications/, либо для вашего пользователя в ~/.local/share/applications/mimeapps.list).

Anaphory
источник
На моем древнем Debian Linux, update-mime-databaseчто-то другое, мне нужно update-desktop-database ~/.local/share/applications.
Палек
Также xdg-open file.pdfоткрывается Evince (как и Nautilus), а Firefox открывает xpdf. Используя, find ~/.local/share/applications/ /usr/share/applications/ -type f -exec grep -i pdf '{}' +я обнаружил, что PDF нигде не упоминается в пользовательской конфигурации, только в /usr/share/applications/mimeinfo.cacheсоответствующих *.desktopфайлах. Линия в mimeinfo.cacheтом application/pdf=xpdf.desktop;evince.desktop;xournal.desktop;. Я думаю, FF берет первый предмет. Но откуда xdg-openмне знать, что я хочу Эвинса?
Палек
1
Используя strace, я обнаружил, что xdg-openвызывает gnome-openи gnome-openчитает /usr/share/gnome/applications/defaults.list, что является символической ссылкой /etc/gnome-vfs-2.0/defaults.list, которая указывает application/pdf=evince.desktop. Очевидно, что vanilla FF не имеет интеграции с GNOME и поэтому игнорирует это предпочтение.
Палец
7

В Firefox 38.8.0 ESR в Debian Lenny с GNOME 2 я обнаружил, что приложение, связанное с помощью XDG (описано в ответе OP ), используется только при открытии загруженного файла из раздела « Загрузки» в библиотеке.

И даже там реализация дает результаты, несовместимые с тем, xdg-openчто игнорирует специфичные для GNOME пути (в моем случае /usr/share/gnome/applications/defaults.listэто символическая ссылка /etc/gnome-vfs-2.0/defaults.list). Я должен был указать application/pdf=evince.desktopв моем ~/.local/share/applications/defaults.list. (Обратите внимание, что это defaults.listбыло объединено в mimeapps.listболее поздних версиях XDG.)

Вместо XDG возможности метапочты (mailcap) используются для разрешения ассоциированного приложения в следующих случаях:

  • открытие загруженного файла с панели загрузки (отображается после нажатия кнопки загрузки на панели инструментов)
  • приложение по умолчанию в раскрывающемся списке в диалоговом окне загрузки файлов
  • приложение по умолчанию в раскрывающемся меню «Настройки» → «Приложения» ( about:preferences#applications)

Параметр in about:preferences#applicationsиспользуется при переходе к URL-адресу с этим типом содержимого, если загрузка не является принудительной.

Mailcap является механизмом старше XDG и имеет свои корни в электронной почте, откуда и MIME. run-mailcapУтилита аналогична xdg-open. Его конфигурация состоит из трех файлов (в порядке убывания):

  • ~/.mailcap - пользовательские записи
  • /etc/mailcap.order - общесистемная спецификация заказа записей
  • /etc/mailcap - общесистемные записи (тот же формат, что и записи пользователя)

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

Чтобы сделать общесистемное изменение приоритета записей, вам нужно отредактировать /etc/mailcap.orderи запустить update-mime.

Чтобы переопределить некоторые записи или указать свои собственные, для всей системы, вам нужно отредактировать верхний раздел (предназначенный для записей, созданных вручную) /etc/mailcapи запустить update-mime. Смотрите комментарии в верхнем разделе.

Для пользовательских записей и переопределений используйте ~/.mailcap. Изменения вступают в силу немедленно. Нет ~/.mailcap.orderсуществует; если вы хотите изменить приоритет записей, измените их физический порядок (если они есть ~/.mailcap) или переопределите их предпочитаемой версией (если они есть /etc/mailcap).

Видите man update-mime, man mailcapи man mailcap.order.

Обратите внимание, что некоторые приложения используют общие утилиты (такие как x-www-browserили pager) вместо обнаружения предпочтительного приложения. Возможно, вам придется использовать update-alternativesили подобный механизм для выбора предпочтительной реализации универсальной утилиты в вашем дистрибутиве. Или, чтобы переопределить общесистемную предпочтительную альтернативу для конкретного пользователя, установите переменные среды, такие как EDITOR(или VISUAL) PAGERи BROWSER. Они поддерживаются sensible-browserи другими, часто более конкретными инструментами (например, git commitиспользует EDITORи VISUAL).

Palec
источник
1
Этот ответ по-прежнему действителен в Firefox Quantum (64.0). Однако mailcap работает лучше, чем настоящий firefox, поэтому вы не можете полностью полагаться на run-mailcap --debug --norun. У меня есть запись , как это: application/pdf; sh -c "MEANINGFUL_VAR=preset /usr/bin/evince '%s'". Затем Firefox вызывает sh downloaded_file.pdf. На своей консоли я вижу, среди прочего /tmp/mozilla_user/downloaded_file.pdf: line 3: 5: command not foundи т. Д. Такое поведение останется навсегда, если кто-то не исправит это. Смотри Mozilla Bugzilla .
u_Ltd.
1
Таким образом, чтобы создать единообразные условия для своих пользователей, администратор, развертывающий комбинацию Debian с Gnome, должен установить значения по умолчанию для mime, используя не менее 4 утилит: update-mime(для обновления mailcap), xdg-settings(для обновления xdg-open), gio(обновить gnome-open) и update-alternatives(обновить так называемые общие утилиты). И, конечно, он / она не должен забывать управлять настройками как для всей системы, так и для каждого пользователя в отдельности (вероятно, лучше всего блокировать возможность пользователя изменять настройки по умолчанию) ... - а, а также файл FF handlers.json: mzl.la/1xKrLAq
zenlord