D'où Firefox obtient-il les applications «par défaut» pour ouvrir des fichiers?

12

Par défaut, Firefox (33.0) sur mon FreeBSD 11.0-CURRENT a l'application par défaut pour l'ouverture des fichiers PDF définie sur Inkscape. Firefox se souvient de mon choix précédent, comme en témoigne "Que doit faire Firefox avec ce fichier?" dialogue, donc jusqu'à récemment, je ne savais pas d'où venait cette configuration, mais je l'ignorais surtout car cela me concernait à peine.

J'ai cependant récemment commencé à utiliser Zotero comme base de données de littérature. Zotero fonctionne comme un plugin firefox et ignore les choix effectués dans mes préférences Firefox pour ouvrir des fichiers PDF avec evince ou me demander quoi faire avec eux, et les ouvre simplement en utilisant Inkscape. Cela m'a fait essayer de suivre cet élément de configuration particulier de Firefox, mais je n'ai pas pu trouver où cette valeur par défaut est définie.

Je n'ai pas pu trouver la chaîne Inkscape(ou inkscape) dans un fichier lié à Firefox dans mon répertoire personnel.

Anaphory
la source
Mon Firefox par défaut est défini sur Font-Viewer.
utilisateur

Réponses:

14

Un lien vers une «question similaire» ( comportement des applications par défaut xdg-open - pas évidemment lié, mais certaines expériences ont montré que le comportement est en effet équivalent à celui de xdg-open) m'a conduit plus profondément dans le terrier du lapin. Bien que Firefox ne s'appuie pas sur les règles ou n'en hérite pas xdg-open, il utilise les fichiers de spécification MIME de la même manière xdg-open.

Sur une base utilisateur, le comportement d'ouverture MIME est configuré par le fichier de spécification ~/.local/share/applications/mimeapps.list.

Pour moi, ce fichier ne contient que quelques protocoles et fichiers HTML (et similaires) raisonnables userapp-Firefox-??????.desktop, mais vous pouvez facilement ajouter une ligne comme

application/pdf=evince.desktop

pour résoudre ce problème par utilisateur. Si le fichier n'existe pas encore, assurez-vous d'ajouter un en-tête de section, tel que

[Default Applications]
application/pdf=evince.desktop

Plus profondément, les types MIME sont définis dans /usr/local/share/applications/mimeinfo.cache(cela peut être /usr/share/…si vous n'êtes pas sur un système FreeBSD), qui fait la liste application/pdf=inkscape.desktop;evince.desktop;. Les deux evince.desktopet inkscape.desktopdans ce dossier contiennent MimeType=[…]application/pdf;[…].

Le mimeinfo.cacheest généré automatiquement à partir des types MIME répertoriés dans les .desktopfichiers sans ordre bien défini, vous devrez donc soit supprimer le type update-mime-databaseMIME PDF d'Inkscape et régénérer le cache à l'aide , soit générer une liste mimeapps.list (soit globalement dans /usr/local/share/applications/, soit pour votre utilisateur ~/.local/share/applications/mimeapps.list).

Anaphory
la source
Sur mon ancien Debian Linux, update-mime-databasefait quelque chose de différent, j'avais besoin update-desktop-database ~/.local/share/applications.
Palec
En outre, xdg-open file.pdfouvre Evince ( tout comme Nautilus), tandis que Firefox ouvre xpdf. En utilisant, find ~/.local/share/applications/ /usr/share/applications/ -type f -exec grep -i pdf '{}' +j'ai trouvé que PDF n'est mentionné nulle part dans la configuration utilisateur, uniquement dans /usr/share/applications/mimeinfo.cacheles *.desktopfichiers respectifs . La ligne mimeinfo.cacheest application/pdf=xpdf.desktop;evince.desktop;xournal.desktop;. Je suppose que FF prend le premier élément. Mais comment xdg-opensais-je que je veux Evince?
Palec
1
En utilisant strace, j'ai découvert que les xdg-openappels gnome-openet les gnome-openlectures /usr/share/gnome/applications/defaults.list, qui est un lien symbolique vers /etc/gnome-vfs-2.0/defaults.list, qui spécifie application/pdf=evince.desktop. De toute évidence, vanilla FF manque d'intégration GNOME et ignore donc cette préférence.
Palec
7

Dans Firefox 38.8.0 ESR, sous Debian Lenny avec GNOME 2, j'ai découvert que l'application associée via XDG (décrite dans la réponse de l'OP ) n'est utilisée que lors de l'ouverture d'un fichier téléchargé depuis Téléchargements dans la bibliothèque.

Et même là, l'implémentation donne des résultats incohérents xdg-opencar elle ignore les chemins spécifiques à GNOME (dans mon cas /usr/share/gnome/applications/defaults.list, qui est un lien symbolique /etc/gnome-vfs-2.0/defaults.list). Je devais préciser application/pdf=evince.desktopdans mon ~/.local/share/applications/defaults.list. (Notez que cela a defaults.listété fusionné dans mimeapps.listles versions plus récentes de XDG.)

Au lieu de XDG, les capacités de métamail (mailcap) sont utilisées pour résoudre l'application associée pour les cas d'utilisation suivants:

  • ouverture du fichier téléchargé à partir du panneau de téléchargement (affiché après avoir appuyé sur le bouton de téléchargement dans la barre d'outils)
  • application par défaut dans la liste déroulante de la boîte de dialogue de téléchargement de fichier
  • application par défaut dans le menu déroulant dans Préférences → Applications ( about:preferences#applications)

La préférence dans about:preferences#applicationsest utilisée lors de la navigation vers une URL avec ce type de contenu, sauf si le téléchargement est forcé.

Mailcap est un mécanisme plus ancien que XDG et a ses racines dans le courrier électronique, d'où provient également MIME. L' run-mailcaputilitaire est analogue à xdg-open. Sa configuration comprend trois fichiers (de priorité décroissante):

  • ~/.mailcap - entrées utilisateur
  • /etc/mailcap.order - spécification de commande des entrées à l'échelle du système
  • /etc/mailcap - entrées à l'échelle du système (même format que les entrées utilisateur)

Ensemble, ils produisent une liste d'entrées d'une ligne qui spécifient l'application à utiliser pour tout type MIME donné. Les entrées sont appariées de haut en bas, donc ce qui vient en premier est prioritaire.

Pour que la modification des entrées soit prioritaire à l'échelle du système, vous devez la modifier /etc/mailcap.orderet l'exécuter update-mime.

Pour remplacer certaines des entrées ou spécifier la vôtre, à l'échelle du système, vous devez modifier la section supérieure (destinée aux entrées créées manuellement) /etc/mailcapet l'exécuter update-mime. Voir les commentaires dans la section supérieure.

Pour les entrées utilisateur et les remplacements, utilisez ~/.mailcap. Les modifications prennent effet immédiatement. Aucun ~/.mailcap.ordern'existe; si vous souhaitez modifier la priorité des entrées, les réorganiser physiquement (si elles sont en ~/.mailcap) ou les remplacer par la version préférée (si elles sont en /etc/mailcap).

Voir man update-mime, man mailcapet man mailcap.order.

Notez que certaines applications utilisent des utilitaires génériques (tels que x-www-browserou pager) au lieu de détecter l'application préférée. Vous devrez peut-être utiliser update-alternativesou un mécanisme similaire pour choisir l'implémentation préférée d'un utilitaire générique dans votre distribution. Ou, pour remplacer une alternative préférée à l'échelle du système pour un utilisateur spécifique, définissez des variables d'environnement telles que EDITOR(ou VISUAL) PAGERet BROWSER. Ils sont pris en charge par d' sensible-browserautres outils, souvent plus spécifiques (par exemple, les git commitutilisations EDITORet VISUAL).

Palec
la source
1
Cette réponse est toujours valable dans Firefox Quantum (64.0). Cependant, mailcap fonctionne mieux que Firefox réel, vous ne pouvez donc pas vous fier entièrement à run-mailcap --debug --norun. J'ai une entrée comme ceci: application/pdf; sh -c "MEANINGFUL_VAR=preset /usr/bin/evince '%s'". Firefox invoque ensuite sh downloaded_file.pdf. Sur ma console, je vois, entre autres, /tmp/mozilla_user/downloaded_file.pdf: line 3: 5: command not foundetc. Ce comportement restera pour toujours, à moins que quelqu'un ne le corrige. Voir Mozilla Bugzilla .
u_Ltd.
1
Ainsi, afin de créer une expérience cohérente pour ses utilisateurs, un administrateur déployant une combinaison de Debian avec Gnome, devrait définir les valeurs par défaut du mime en utilisant pas moins de 4 utilitaires: update-mime(pour mettre à jour mailcap), xdg-settings(pour mettre à jour xdg-open), gio(pour mettre à jour gnome-open) et update-alternatives(pour mettre à jour les soi-disant utilitaires génériques). Et bien sûr, il / elle ne doit pas oublier de gérer les paramètres à la fois à l'échelle du système et pour chaque utilisateur séparément (probablement mieux pour bloquer la capacité de l'utilisateur à modifier les valeurs par défaut) ... - ah, et le fichier handlers.json de FF également: mzl.la/1xKrLAq
zenlord