comment linux sait que ce fichier s'ouvre avec cette application ? (mime)

Windows utilise l'extension des fichiers (.doc, .xls...) pour savoir quelle application lancer. Les fichiers sous Linux (Unix) ont des permissions: lire, écrire, executer... et, contrairement aux Windows,  le noyeau n'utilise pas ces extentions. Alors comment Linux (Ubuntu) détermine-t-il cette association?

des pistes

file et les en-tete de fichiers

file est un outil linux, qui utilise les nombres magiques dans les en-tete des fichiers (qu'il compare à une base de donnée).
Par ex: chaque fichier JPEG commence par FFD8 et se termine par FFD9 ; les vieux exe DOS commencent toujours par MZ, qui est aussi un "magic number".

xdg et mime

La pluspart des environnement graphiques sous linux utilisent xdg-open, qui utilise les données (locale) XML de xdg-mime. Selon la configuration, soit il utilise les bits magiques (de l'entete du fichier, voir paragraphe précédent) soit il utilise l'extention (méthode "windows").
Un autre alternative est théoriquement possible: mailcap (run-mailcap) - basé sur mime, mais c'est plus ancien (et rare).

xdg-mime s'utilise en ligne de commande (pas en root), et retourne des informations sur la gestion des types de fichiers, mais il permet aussi d'ajouter des descriptions pour de nouveaux types de fichiers.

xdg-mime query { filetype | default } ...
xdg-mime default application mimetype(s)
xdg-mime install [--mode mode] [--novendor] mimetypes-file
xdg-mime uninstall [--mode mode] mimetypes-file
xdg-mime { --help | --manual | --version }

Deux variables d'environnement: XDG_UTILS_DEBUG_LEVEL et XDG_UTILS_INSTALL_MODE

XDG_UTILS_DEBUG_LEVEL si >0 alors joue sur les logs en stderr (3 est plus verbeux que 1).

XDG_UTILS_INSTALL_MODE permer d'overrider le mode d'instalation (2 valeurs possibles: user ou system).

Codes de sortie (0 ok sinon erreur)

1 : erreur de syntaxe (cli) ; 2: fichier non trouvé ; 3: outil non trouvé ; 4: echec action ; 5: soucis de perm sur un des fichiers

interroger via xdg-mime -> query

  • query filetype FILE: affiche le type de fichier de FILE sous forme de type MIME.
  • query default mimetype: affiche les fichiers *.desktop de l'application par défaut (utilisée par l'environnement du bureau) pour ouvrir les fichiers du type mimetype.
Ex d'utilisation de xdg-mime
saisir la commande affiche, modifie...
xdg-mime query filetype /tmp/foobar.png
image/png
xdg-mime query default image/png
shotwell-viewer.desktop
xdg-mime install shinythings-shiny.xml
ajout d'une description pour les fichiers "shiny", shinythings étant le prefix vendor.
Le fichier shinythings-shiny.xml pourrait ressembler à
<?xml version="1.0"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
  <mime-type type="text/x-shiny">
    <comment>Shiny new file type</comment>
    <glob pattern="*.shiny"/>
    <glob pattern="*.shi"/>
  </mime-type>
</mime-info>

Emplacement des fichiers .desktop

Dans le rep du user (ie /home/user ou ~) voir les contenus de (dossiers)

  • .config (avec dossier autostart)
  • .gnome2/panel2.d/default/launchers
  • .local/share  et .local/share/applications

 

Sources (web)

en anglais: http://superuser.com/questions/556060/how-does-linux-know-what-app-to-use-to-open-a-file

La référence (en anglais) http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html