Звідки Firefox отримує програми за замовчуванням для відкриття файлів?


12

За замовчуванням Firefox (33.0) на моєму FreeBSD 11.0-CURRENT має програму за замовчуванням для відкриття файлів PDF, встановлених на Inkscape. Firefox пам’ятає мій попередній вибір, припустимо , у розділі «Що Firefox робити з цим файлом?» діалог, тому до недавнього часу я просто плутався, звідки беруться ці налаштування, але в основному ігнорував її, бо мене це ледь не стосувалося.

Проте я нещодавно почав використовувати Zotero як свою літературну базу даних. Zotero працює як плагін Firefox і ігнорує вибір, зроблений у моїх налаштуваннях Firefox, щоб відкрити PDF-файли з переконанням або запитати мене, що з ними робити, і просто відкриває їх за допомогою Inkscape. Це змусило мене спробувати слідкувати за цим елементом конфігурації Firefox, але я не зміг знайти, де встановлено цей замовчування.

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



Моє Firefox встановлено за замовчуванням Font-Viewer.
користувач

Відповіді:


14

Посилання на «подібне питання» ( поведінка програм за замовчуванням у програмах xdg - явно не пов’язана, але деякі експерименти показали, що поведінка дійсно еквівалентна тому 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Автоматично генерується з типів пантоміми , перерахованих в .desktopфайлах без чітко визначеного порядку, так що вам доведеться або видалити тип PDF мім з Inkscape і регенерувати кеша з допомогою update-mime-database, або згенерувати mimeapps.list (як глобально в /usr/local/share/applications/, або для вашого користувача в ~/.local/share/applications/mimeapps.list).


У моєму стародавньому 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. Очевидно, що ванільному FF не вистачає інтеграції GNOME і, таким чином, ігнорує цю перевагу.
Палець

7

У Firefox 38.8.0 ESR, під Debian Lenny з GNOME 2, я виявив, що додаток, пов’язаний через XDG (описаний у відповіді ОП ), використовується лише під час відкриття завантаженого файлу з завантажень у бібліотеці.

І навіть там реалізація дає результати, несумісні з тим 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)

Налаштування в 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).


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, повинен встановити параметри за замовчуванням, використовуючи не менше 4 утиліт: update-mime(оновити mailcap), xdg-settings(оновити xdg-open), gio(для оновлення gnome-open) та update-alternatives(для оновлення так званих загальних утиліт). І звичайно, він / вона не повинні забувати керувати налаштуваннями як у всій системі, так і для кожного користувача окремо (мабуть, найкраще блокувати можливість користувача змінювати параметри за замовчуванням) ... - ах, а також файл handlers.json FF: mzl.la/1xKrLAq
zenlord
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.