Comment Ubuntu ou tout autre système Linux stocke-t-il les associations de fichiers?
Y at-il un fichier /etc/asscociations
ou quelque chose?
Je sais que je peux cliquer avec le bouton droit de la souris sur le fichier et le modifier via "Ouvrir avec", mais je suis simplement curieux de savoir comment il est stocké en interne.
Le gestionnaire de fichiers (Nautilus, par défaut) utilise le type MIME d'un fichier pour déterminer le programme avec lequel l'ouvrir. Quand une application est installée, elle peut spécifier les types MIME qu’elle peut ouvrir et la commande à utiliser pour ouvrir les fichiers du fichier .desktop qui est placé dans /usr/share/applications
. C'est le fichier utilisé pour les menus, les raccourcis sur le bureau, etc.
Par exemple, GIMP contient le fichier .desktop suivant:
[Desktop Entry]
Version=1.0
Type=Application
Name=GNU Image Manipulation Program
GenericName=Image Editor
Comment=Create images and edit photographs
Exec=gimp-2.7 %U
TryExec=gimp-2.7
Icon=gimp
Terminal=false
Categories=Graphics;2DGraphics;RasterGraphics;GTK;
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=GIMP
X-GNOME-Bugzilla-Component=General
X-GNOME-Bugzilla-Version=2.7.2
X-GNOME-Bugzilla-OtherBinaries=gimp-2.7
StartupNotify=true
MimeType=application/postscript;application/pdf;image/bmp;image/g3fax;image/gif;image/x-fits;image/pcx;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-psd;image/x-sgi;image/x-tga;image/x-xbitmap;image/x-xwindowdump;image/x-xcf;image/x-compressed-xcf;image/tiff;image/jpeg;image/x-psp;image/png;image/x-icon;image/x-xpixmap;image/svg+xml;application/pdf;image/x-wmf;image/jp2;image/jpeg2000;image/jpx;image/x-xcursor;
Voir le champ MimeType
- ceci répertorie les types MIME pris en charge. Le champ Exec
indique au système d'utiliser la commande gimp-2.7 %U
, en remplaçant '% U' par les fichiers à ouvrir. (Remarque: GIMP 2.7 est une version que j'ai installée à partir d'un PPA, elle est donc supérieure à la version actuelle dans les référentiels Ubuntu).
Lorsque le package d'application est installé, le système extrait ces données de type MIME dans une base de données plus facilement accessible, car la recherche dans chaque fichier .desktop prendrait trop de temps si cette opération était effectuée chaque fois qu'un fichier était ouvert.
Cela indique au système quelles applications peuvent être utilisées pour ce type MIME et fournit les applications dans la liste "Ouvrir avec". La valeur par défaut est définie ailleurs. Le fichier /usr/share/applications/defaults.list
fournit les informations sur les valeurs par défaut du système. Sauf indication contraire de votre part, ce sont les applications utilisées lorsque vous "ouvrez" un fichier.
Pour compléter l'excellente réponse de dv3500ea, j'aimerais ajouter quelques informations sur ce qui se passe lorsque vous changez d'associations.
Alors que le fichier defaults.list (que vous pouvez localiser en tapant "localiser le fichier defaults.list") fournit la liste des applications associées à chaque type MIME, toutes les personnalisations que vous apportez sont stockées dans votre répertoire personnel, dans ~/.local /. share/applications/mimeapps.list. Ainsi, si vous ajoutez ou supprimez des associations ou modifiez l'association par défaut, ce fichier est mis à jour.
Le Guide d'administration système de GNOME Desktop à l'adresse http://library.gnome.org/admin/system-admin-guide/stable/ ne semble pas discuter de mimeapps.list, mais j'ai trouvé la description suivante dans http://live.gnome.org/SysAdminGuideUpdate :
mimeapps.list se trouve dans $ XDG_DATA_DIRS/applications. Son but est d'ajouter ou de supprimer des associations de mime d'applications. nautilus écrit ~/.local/share/applications/mimeapps.list lorsque l'utilisateur apporte des modifications dans la boîte de dialogue "Ouvrir avec".
J'ai trouvé que sur mon système (Debian Jessie), il y avait aussi un ~/.config/mimeapps.list
avec une association que j'avais créée par inadvertance pour ouvrir un type de fichier spécifique avec gedit. Aucune des méthodes standard pour corriger cela (paramètres de l'application par défaut, propriété ouverte avec de Thunar) ne le reflétait pas, mais gedit était l'application par défaut.
J'ai été en mesure de supprimer la ligne de ~/.config/mimeapps.list
et maintenant l'application correcte ouvre le fichier.
J'ai pu créer une association comme celle-ci:
xdg-mime default xnview.desktop image/jpeg
Vous pouvez également supprimer des associations et faire d'autres choses: man xdg-mime
Je n'ai pas eu besoin d'exécuter Sudo update-desktop-database
.
J'ai trouvé ce lien concernant l'association par défaut, cela pourrait être utile. https://wiki.archlinux.org/index.php/Default_Applications
pour une association globale:
/usr/share/applications/mimeapps.list
par association d'utilisateurs:
~/.local/share/applications/mimeapps.list
la syntaxe est la suivante:
[Added Associations]
mimetype=desktopfile1;desktopfile2;...;desktopfileN
...
[Removed Associations]
mimetype=desktopfile1;desktopfile2;...;desktopfileN
[La section Associations ajoutées] permet de spécifier les applications préférées (par défaut) avec une préférence décroissante. ce qui signifie que desktopfile1 est le plus préféré et desktopfileN est le moins préféré.
[La section Associations supprimées] permet de supprimer explicitement les associations héritées précédemment.
Créez un fichier truecrypt.desktop
dans ~/.local/share/applications
avec les lignes suivantes:
[Desktop Entry]
Encoding=UTF-8
Type=Application
Icon=
Exec=/usr/bin/truecrypt %U
Name=truecrypt
Comment=manage truecrypt volumes
puis éditez le fichier ~/.local/share/applications/mimeapps.list
et ajoutez la ligne suivante:
application/octet-stream=truecrypt.desktop
J'ai découvert le type mime de Truecrypt en suivant cette commande:
file --mime-type -b <any truecrypt filename>
Pour tous les utilisateurs:
/usr/share/applications/defaults.list
Chaque utilisateur a un fichier de configuration pour remplacer ces valeurs par défaut:
~/.config/mimeapps.list
voir aussi https://specifications.freedesktop.org/mime-apps-spec/mime-apps-spec-1.0.1.html pour les emplacements pouvant être utilisés pour remplacer des défauts.
Vous devez connaître le type mime du fichier dont vous souhaitez modifier l'association.
De plus, toutes les associations peuvent être gérées-modifiées en ligne de commande en utilisant:
xdg-mime
Freedesktop.org (anciennement appelé le groupe de bureaux X, d'où l'abréviation "XDG") est le groupe qui utilise actuellement les normes X de la sorte ( en savoir plus sur Wikipedia ).
la réponse de warvariuc mentionne déjà xdg-mime utilisation comme:
xdg-mime default xnview.desktop image/jpeg
Après avoir beaucoup joué avec les éditeurs d’image et les lecteurs, je me suis retrouvé avec différents lecteurs pour différents types d’image avec une cohérence quasi nulle, en particulier parmi les types d’images plus rares.
J'ai pris la commande ci-dessus et l'ai affectée à chacun des types MIME contrôlés par les visualiseurs d'images, puis j'ai créé un nouveau image-viewer.desktop
en clonant l'un d'entre eux (facultatif, vous pouvez simplement réutiliser votre favori). Ensuite, j'ai vérifié manuellement qu'aucun des types MIME ne serait incompatible avec ma nouvelle application préférée. Enfin, j'ai défini cette application comme étant la valeur par défaut pour tous les types MIME des autres applications:
sed '/^MimeType=/!d; s///; s/;/\n/g' \
/usr/share/applications/{ristretto,geeqie,gthumb}.desktop |sort -u \
|xargs xdg-mime default image-viewer.desktop
Ceci examine les fichiers .desktop
de chacun des visualiseurs ( Ristretto , Geeqie et GThumb dans mon cas), extrait la définition MIME (qui est préfacé par MimeType=
et contient ensuite une liste délimitée par des points-virgules), supprime le libellé de la préface (précédemment mis en correspondance) et scinde la liste en une entrée par ligne. sort -u
supprime ensuite les lignes redondantes, puis elles sont transmises à xdg-mime
pour définir les nouvelles valeurs par défaut.
(Si vous souhaitez tester ceci avant de l'exécuter en direct, changez xargs
en xargs echo
et la commande obtenue sera imprimée au lieu de l'exécuter.)
Cette technique devrait fonctionner pour tout ce que vous souhaitez récupérer pour une application cible. Vous n'avez même pas besoin de créer un nouveau fichier .desktop
(vous pouvez utiliser un fichier existant). J'ai fait cette étape supplémentaire de sorte que, lorsque je change inévitablement d'allégeance entre les prévisualisateurs d'images, je dois simplement changer ce fichier.