Où firefox obtient-il les applications "par défaut" pour l'ouverture des files?

Par défaut, Firefox (33.0) sur mon FreeBSD 11.0-CURRENT a l'application par défaut pour ouvrir les files PDF définis sur Inkscape. Firefox se souvient de mon choix précédent dans la boîte de dialog "Que faire de Firefox avec ce file?", Jusqu'à récemment, j'étais confus d'où venait cette configuration, mais la plupart du time je l'ignorais parce que cela me préoccupait à peine.

Cependant, j'ai récemment commencé à utiliser Zotero comme database de littérature. Zotero fonctionne comme un plugin firefox, et ignore les choix faits dans mes preferences Firefox pour ouvrir des files PDF avec evince ou me requestr 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 ne pouvais pas find où ce défaut est défini.

Je n'ai pas pu find la string Inkscape (ou inkscape ) dans n'importe quel file lié à Firefox dans mon directory personnel.

Un lien vers une "question similaire" ( comportement des applications par défaut xdg-ouvert – pas évidemment apparenté, mais une expérimentation a montré que le comportement est en effet équivalent à celui de xdg-open ) m'a conduit plus profondément dans le lapin. Bien que Firefox ne s'appuie pas sur, ou hérite des règles de xdg-open , il utilise les files de spécification MIME comme xdg-open .

A titre d'user, le comportement d'ouverture MIME est configuré par le file de spécification ~/.local/share/applications/mimeapps.list .

Pour moi, ce file contient juste quelques protocoles raisonnables et des files HTML (et similaires) connectés à userapp-Firefox-??????.desktop , mais vous pourriez facilement append une ligne comme

 application/pdf=evince.desktop 

pour résoudre ce problème sur une base par user. Si le file n'existe pas encore, assurez-vous d'append un en-tête de section, tel que

 [Default Applications] application/pdf=evince.desktop 

Plus bas, les types MIME sont définis dans /usr/local/share/applications/mimeinfo.cache (ceci peut être /usr/share/… si vous n'êtes pas sur un système FreeBSD), qui list list application/pdf=inkscape.desktop;evince.desktop; . evince.desktop et inkscape.desktop dans ce dossier contiennent MimeType=[…]application/pdf;[…] .

Le mimeinfo.cache est automatiquement généré à partir des types mime répertoriés dans les files .desktop sans ordre bien défini. Vous devez soit supprimer le type MIME PDF d'Inkscape et régénérer le cache à l'aide de update-mime-database , soit générer un mimeapps.list (globalement dans /usr/local/share/applications/ , ou pour votre user dans ~/.local/share/applications/mimeapps.list ).

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 par l'OP ) est utilisée uniquement lors de l'ouverture d'un file téléchargé depuis Downloads in the Library.

Et même là, la mise en œuvre donne des résultats incohérents avec xdg-open car il ignore les paths propres à GNOME (dans mon cas /usr/share/gnome/applications/defaults.list , qui est un lien symbolique vers /etc/gnome-vfs-2.0/defaults.list ). Je devais spécifier application/pdf=evince.desktop dans mon application/pdf=evince.desktop ~/.local/share/applications/defaults.list . (Notez que defaults.list été fusionné dans mimeapps.list dans les versions plus récentes de XDG.)

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

  • ouvrir le file téléchargé à partir du panneau de téléchargement (affiché après avoir appuyé sur le button de téléchargement dans la barre d'outils)
  • application par défaut dans le drop down menu dans la boîte de dialog de téléchargement de file
  • application par défaut dans la list déroulante dans Preferences → Applications ( about:preferences#applications )

La preference dans about:preferences#applications est 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 MIME. L'utilitaire run-mailcap est run-mailcap à xdg-open . Sa configuration comprend trois files (en priorité décroissante):

  • ~/.mailcap – inputs user
  • /etc/mailcap.order – spécification de command des inputs système
  • /etc/mailcap – inputs à l'échelle du système (même format que les inputs user)

Ensemble, ils produisent une list d'inputs d'une ligne qui spécifient l'application à utiliser pour un type MIME donné. Les inputs sont appariées de haut en bas, donc ce qui vient en premier a priorité.

Pour effectuer un changement de priorité des inputs à l'échelle du système, vous devez modifier /etc/mailcap.order et exécuter update-mime .

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

Pour les inputs user et les rlocations, utilisez ~/.mailcap . Les changements prennent effet immédiatement. Non ~/.mailcap.order existe; si vous souhaitez modifier la priorité des inputs, réorganisez-les physiquement (s'ils sont dans ~/.mailcap ) ou remplacez-les par la version préférée (s'ils sont dans /etc/mailcap ).

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

Notez que certaines applications utilisent des utilitaires generics (tels que x-www-browser ou pager ) au lieu de la détection de l'application préférée. Vous devrez peut-être utiliser update-alternatives ou un mécanisme similaire pour choisir l'implémentation préférée d'un utilitaire générique dans votre dissortingbution. Ou, pour replace une alternative préférée à l'échelle du système pour un user spécifique, définissez des variables d'environnement telles que EDITOR (ou VISUAL ), PAGER et BROWSER . Ils sont supportés par un sensible-browser et d'autres outils, souvent plus spécifiques (par exemple, git commit utilise EDITOR et VISUAL ).