Skąd Firefox pobiera „domyślne” aplikacje do otwierania plików?

12

Domyślnie Firefox (33.0) na moim FreeBSD 11.0-CURRENT ma domyślną aplikację do otwierania plików PDF ustawioną na Inkscape. Firefox pamięta mój poprzedni wybór, ewangelia , w „Co Firefox powinien zrobić z tym plikiem?” dialog, więc do niedawna byłem po prostu zdezorientowany, skąd pochodzi ta konfiguracja, ale najczęściej ją ignorowałem, ponieważ prawie mnie to nie dotyczyło.

Jednak ostatnio zacząłem używać Zotero jako bazy danych literatury. Zotero działa jako wtyczka firefox i ignoruje wybory dokonane w moich preferencjach Firefoksa, aby otwierać pliki PDF z evince lub pytać mnie, co z nimi zrobić, i po prostu otwiera je za pomocą Inkscape. Zmusiło mnie to do podjęcia próby sprawdzenia tego konkretnego elementu konfiguracji Firefoksa, ale nie mogłem znaleźć, gdzie jest ustawiona ta domyślna wartość.

Nie mogłem znaleźć ciągu Inkscape(lub inkscape) w żadnym pliku związanym z Firefoksem w moim katalogu domowym.

Anafora
źródło
1
Powiązane: unix.stackexchange.com/questions/149033/…
John WH Smith,
Mój Firefox jest domyślnie ustawiony na Font-Viewer.
użytkownik

Odpowiedzi:

14

Link do „podobnego pytania” ( domyślne zachowanie aplikacji xdg-open - nie jest oczywiście powiązane, ale niektóre eksperymenty wykazały, że zachowanie jest rzeczywiście równoważne z tym xdg-open) doprowadziło mnie głębiej do króliczej nory. Chociaż Firefox nie opiera się na regułach ani nie dziedziczy po nich, xdg-openużywa plików specyfikacji MIME tak samo, jak xdg-openrobi to.

Na poziomie użytkownika zachowanie otwierające MIME jest konfigurowane przez plik specyfikacji ~/.local/share/applications/mimeapps.list.

Dla mnie ten plik zawiera tylko kilka rozsądnych protokołów i podłączonych do niego plików HTML (i podobnych) userapp-Firefox-??????.desktop, ale można łatwo dodać wiersz taki jak

application/pdf=evince.desktop

aby rozwiązać ten problem dla poszczególnych użytkowników. Jeśli plik jeszcze nie istnieje, dodaj nagłówek sekcji, na przykład

[Default Applications]
application/pdf=evince.desktop

Głębiej w dół, typy MIME są zdefiniowane w /usr/local/share/applications/mimeinfo.cache(może to być, /usr/share/…jeśli nie jesteś w systemie FreeBSD), który zawiera listę application/pdf=inkscape.desktop;evince.desktop;. Zarówno evince.desktopi inkscape.desktopw tym folderze zawierają MimeType=[…]application/pdf;[…].

mimeinfo.cacheJest automatycznie generowana z typów MIME wymienionych w .desktopplikach bez ściśle określonej kolejności, więc trzeba albo usunąć typ MIME PDF z Inkscape i zregenerować cache użyciem update-mime-databaselub wygenerować mimeapps.list (zarówno w skali globalnej /usr/local/share/applications/, lub dla użytkownika w ~/.local/share/applications/mimeapps.list).

Anafora
źródło
Na moim starożytnym Linuksie Debian update-mime-databaserobi coś innego, czego potrzebowałem update-desktop-database ~/.local/share/applications.
Palec
Również xdg-open file.pdfotwiera evince (podobnie jak Nautilus), podczas gdy Firefox otwiera xpdf. Używając find ~/.local/share/applications/ /usr/share/applications/ -type f -exec grep -i pdf '{}' +odkryłem, że PDF nie jest wymieniony nigdzie w konfiguracji użytkownika, tylko w /usr/share/applications/mimeinfo.cacheodpowiednich *.desktopplikach. Linia w mimeinfo.cachejest application/pdf=xpdf.desktop;evince.desktop;xournal.desktop;. Chyba FF bierze pierwszy przedmiot. Ale skąd xdg-openmam wiedzieć, że chcę Evince'a?
Palec
1
Za pomocą straceodkryłem, że xdg-openwywołuje gnome-openi gnome-openczyta /usr/share/gnome/applications/defaults.list, co jest dowiązaniem symbolicznym /etc/gnome-vfs-2.0/defaults.list, które określa application/pdf=evince.desktop. Oczywiście, waniliowy FF nie ma integracji z GNOME i dlatego ignoruje tę preferencję.
Palec
7

W przeglądarce Firefox 38.8.0 ESR, w Debianie Lenny z GNOME 2, odkryłem, że aplikacja powiązana z XDG (opisana w odpowiedzi OP ) jest używana tylko podczas otwierania pobranego pliku z Pobranych w Bibliotece.

I nawet tam implementacja daje niespójne wyniki, xdg-openponieważ ignoruje ścieżki specyficzne dla GNOME (w moim przypadku /usr/share/gnome/applications/defaults.listjest to dowiązanie symboliczne /etc/gnome-vfs-2.0/defaults.list). Musiałem sprecyzować application/pdf=evince.desktopw swoim ~/.local/share/applications/defaults.list. (Uwaga: defaults.listzostał scalony z mimeapps.listnowszymi wersjami XDG.)

Zamiast XDG, funkcje metamail (mailcap) są używane do rozwiązania powiązanej aplikacji w następujących przypadkach użycia:

  • otwieranie pobranego pliku z panelu pobierania (wyświetlane po naciśnięciu przycisku pobierania na pasku narzędzi)
  • domyślna aplikacja w rozwijanym oknie dialogowym pobierania pliku
  • domyślna aplikacja w menu Preferencje → Aplikacje ( about:preferences#applications)

Preferencji w about:preferences#applicationsużywa się podczas nawigacji do adresu URL o tym typie treści, chyba że pobieranie jest wymuszone.

Mailcap jest mechanizmem starszym niż XDG i ma swoje korzenie w e-mailu, skąd również pochodzi MIME. run-mailcapNarzędzie jest analogiczna xdg-open. Jego konfiguracja składa się z trzech plików (malejących):

  • ~/.mailcap - wpisy użytkownika
  • /etc/mailcap.order - Specyfikacja zamawiania wpisów systemowych
  • /etc/mailcap - wpisy ogólnosystemowe (taki sam format jak wpisy użytkownika)

Razem tworzą listę wpisów jednowierszowych, które określają aplikację, która będzie używana dla dowolnego typu MIME. Wpisy są dopasowywane od góry do dołu, więc pierwszeństwo ma to, co pierwsze.

Aby wprowadzić w systemie zmianę pierwszeństwa wpisów, musisz edytować /etc/mailcap.orderi uruchomić update-mime.

Aby zastąpić niektóre wpisy lub określić własne, ogólnosystemowe, musisz edytować górną sekcję (przeznaczoną do wpisów tworzonych ręcznie) /etc/mailcapi uruchomić update-mime. Zobacz komentarze w górnej części.

W przypadku wpisów użytkownika i przesłonięć użyj ~/.mailcap. Zmiany wchodzą w życie natychmiast. Nie ~/.mailcap.orderistnieje; jeśli chcesz zmienić pierwszeństwo wpisów, zmień ich kolejność fizycznie (jeśli są ~/.mailcap) lub zastąp je preferowaną wersją (jeśli są /etc/mailcap).

Zobacz man update-mime, man mailcapa man mailcap.order.

Zauważ, że niektóre aplikacje używają ogólnych narzędzi (takich jak x-www-browserlub pager) zamiast wykrywania preferowanej aplikacji. Może być konieczne użycie update-alternativeslub podobnego mechanizmu do wyboru preferowanej implementacji ogólnego narzędzia w dystrybucji. Lub, aby zastąpić ogólnosystemową preferowaną alternatywę dla konkretnego użytkownika, ustaw zmienne środowiskowe, takie jak EDITOR(lub VISUAL) PAGERi BROWSER. Są one obsługiwane przez sensible-browseri inne, często bardziej szczegółowe narzędzia (np. git commitZastosowania EDITORi VISUAL).

Palec
źródło
1
Ta odpowiedź jest nadal aktualna w Firefox Quantum (64.0). Jednak mailcap działa lepiej niż faktyczny firefox, więc nie możesz w pełni polegać na run-mailcap --debug --norun. Mam wpis tak: application/pdf; sh -c "MEANINGFUL_VAR=preset /usr/bin/evince '%s'". Firefox następnie wywołuje sh downloaded_file.pdf. Na mojej konsoli widzę między innymi /tmp/mozilla_user/downloaded_file.pdf: line 3: 5: command not founditd. To zachowanie pozostanie na zawsze, chyba że ktoś to naprawi. Zobacz Mozilla Bugzilla .
u_Ltd.
1
Tak więc, aby stworzyć spójne środowisko dla jego użytkowników, administrator wdrażający kombinację Debiana z Gnome, powinien ustawić domyślne ustawienia mime przy użyciu nie mniej niż 4 narzędzi: update-mime(aby zaktualizować mailcap), xdg-settings(aby zaktualizować xdg-open), gio(aby zaktualizować gnome-open) i update-alternatives(aby zaktualizować tak zwane narzędzia ogólne). I oczywiście nie powinien zapominać o zarządzaniu ustawieniami zarówno dla całego systemu, jak i dla każdego użytkownika osobno (prawdopodobnie najlepiej, aby zablokować możliwość zmiany domyślnych ustawień użytkownika) ... - ach, a także plik handlers.json FF: mzl.la/1xKrLAq
zenlord