Comment Linux choisit-il quelle application ouvrir un fichier?

38

Si un fichier indique au système d'exploitation son format, comment le système d'exploitation choisit-il l'application à ouvrir par défaut?

Dans Windows, l’association est-elle stockée dans la table de registre?

Comment Linux choisit-il quelle application ouvrir un fichier?

J'utilisais beaucoup Nautilus, mais maintenant je change de terminal. Est-il vrai qu'en terminal, nous devons toujours spécifier explicitement quelle application ouvrir un fichier? Est-ce que les paramètres de quelle application pour ouvrir un fichier d'un certain format par défaut appartiennent au gestionnaire de fichiers (par exemple, Nautilus), et ce n'est pas un problème lorsque nous vivons dans des terminaux?

Tim
la source
24
Linux n'est que le noyau du système d'exploitation. Je suppose que vous voulez dire votre environnement de bureau ou votre gestionnaire de fichiers ici. Cela va probablement être différent sur les systèmes d'exploitation Android, ChromeOS, Linux (ou non-Linux) fonctionnant sous KDE, Gnome, XFCE ... ou autre)
Stéphane Chazelas
Probablement. Je ne sais pas qui fait le travail. J'utilise gnome, mais j'aimerais aussi en savoir plus sur general.
Tim
Puis clarifiez le système d'exploitation et l'environnement de bureau et l'application. Comme dans Nautilus dans Ubuntu 12.04 avec le bureau "Unity".
Stéphane Chazelas
(1) Je suis sous Ubuntu 12.04. Mon bureau est-il Gnome ou "Unity"? (2) J'utilisais beaucoup Nautilus, mais maintenant je change de terminal. Est-il vrai qu'en terminal, nous devons toujours spécifier explicitement quelle application ouvrir un fichier? Est-ce que les paramètres de quelle application pour ouvrir un fichier d'un certain format par défaut appartiennent au gestionnaire de fichiers (par exemple, Nautilus), et ce n'est pas un problème lorsque nous vivons dans des terminaux?
Tim

Réponses:

35

Il peut y avoir différents mécanismes pour gérer ces paramètres par défaut. Cependant, les autres réponses ont tendance à viser des environnements de bureau complets, chacun avec son propre mécanisme. Cependant, ils ne sont pas toujours installés sur un système (j'utilise beaucoup OpenBox), et dans ce cas, des outils tels que ceux xdg-openutilisés peuvent être utilisés.

Citant le Wiki Arch :

xdg-open est un outil indépendant du bureau qui permet de configurer les applications par défaut d'un utilisateur. De nombreuses applications appellent la commande xdg-open en interne.

En ce moment, j'utilise Ubuntu (12.04) et xdg-openest disponible. Cependant, lorsque vous utilisez un environnement de bureau complet tel que GNOME, xdg-openagit comme un simple redirecteur et relaie les demandes de fichier à votre DE, qui est ensuite libre de le gérer à sa guise (voir d'autres réponses pour GNOME et Nautilus, par exemple). .

Dans un environnement de bureau (par exemple, GNOME, KDE ou Xfce), xdg-open transmet simplement les arguments à l'application d'ouverture de fichier de cet environnement de bureau (respectivement gvfs-open, kde-open ou exo-open), ce qui signifie que les associations sont laissées à l'environnement de bureau.

... ce qui vous ramène aux autres réponses dans ce cas. Cependant, étant donné qu’il s’agit de Unix et Linux, demandez plutôt à Ubuntu:

Si aucun environnement de bureau n’est détecté (par exemple, lorsque l’on utilise un gestionnaire de fenêtres autonome, par exemple Openbox), xdg-open utilisera ses propres fichiers de configuration.

En tout:

                            |-- no desktop env. > handle directly.
User Request > xdg-open > --|
                            |-- desktop env.    > pass information to the DE.

Dans le premier cas, vous devrez configurer xdg-opendirectement , à l'aide de la xdg-mimecommande (qui vous permettra également de voir quelle application est supposée gérer quel fichier). Dans le second cas ...

                        |-- GNOME? > gvfs-open handles the request.
                        |
Info. from xdg-open > --|-- KDE?   > kde-open handles the request.
                        |
                        |-- XFCE?  > exo-open handles the request.

... vous devez configurer l'ouvre-fichier associé à votre environnement de bureau. Dans certains cas, la configuration effectuée xdg-mimepeut être redirigée vers l'outil de configuration approprié dans votre environnement.

John WH Smith
la source
11
Dans un monde idéal, Gnome et KDE utiliseraient les paramètres xdg pour choisir l'application à laquelle ouvrir un fichier et fourniraient des interfaces utilisateur pour modifier les options xdg. Ensuite, nous pourrions avoir juste une base de données de paramètres, au lieu d'une pour chaque DE. Hélas xdg est apparu trop tard.
joeytwiddle
2
Dans un monde idéal, vous n'auriez pas trois DE.
Russell Borogove
1
@RussellBorogove - alors nous devrions tous passer à Windows. C'est un monde idéal.
don_crissti
@don_crissti Je pense que cela était davantage considéré comme "idéal pour un développeur ou un administrateur". Bien que proposer de la variété à un utilisateur final soit une bonne chose, il serait en effet beaucoup plus facile (mais pas nécessairement "meilleur") pour les concepteurs de se concentrer sur un seul système. xdg-openest juste un de ces composants qui essayent de réunir les deux bouts.
John WH Smith
1
@ John - à propos des administrateurs et de divers développeurs / concepteurs d'applications: d'accord ... mais les développeurs en amont ne peuvent en faire que beaucoup. Dans un monde idéal, au lieu de nous plaindre de ceci ou de cela, nous contribuerions tous à des projets en amont tels que KDE, Gnome, etc., afin d'améliorer la convivialité et l'itéropérativité entre les DE. Si nous faisions tous un petit effort, tous ces problèmes seraient résolus en quelques jours.
don_crissti
11

De l' entrée du wiki ,

Les interfaces graphiques basées sur Linux, telles que KDE et GNOME, prennent en charge les associations de type MIME. Par exemple, le type MIME text / plain serait associé à un éditeur de texte.

En outre, cette réponse a plus de détails.

Le gestionnaire de fichiers utilise souvent une combinaison des options a et b (par exemple, regardez d'abord l'extension du fichier, si elle n'est pas connue (ou si le fichier ne possède pas d'extension), regardez le contenu).

Un type de fichier n'est pas stocké en tant que métadonnées sur les systèmes de fichiers linux courants.

De cette réponse, je vois les informations ci-dessous.

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.

Ramesh
la source
1
Ma question est "Compte tenu du type de format d'un fichier", détermine quelle application ouvrir le fichier.
Tim
11

Un fichier n'indique pas le format de fichier du système d'exploitation, à une exception près:

Si un fichier exécutable commence par une ligne dite shebang, comme

#! /usr/bin/perl

alors cette ligne indique au noyau Linux avec lequel il doit être démarré /usr/bin/perl(c'est-à-dire qu'au lieu d'exécuter ce fichier, il devrait s'exécuter usr/bin/perlet donner ce fichier en argument). Ceci ne fonctionne bien entendu qu'avec les formats de fichiers qui ignorent (ou comprennent) une telle ligne shebang.

Autre que cela, le système d'exploitation en tant que tel ne sait rien sur les types de fichiers. Cependant, beaucoup de programmes qui permettent d'ouvrir d'autres fichiers ont leur propre mécanisme pour décider quel programme utiliser pour ouvrir quel fichier. Cela peut être une liste dans le programme lui-même (Firefox, par exemple, maintient une telle liste), ou le programme peut la déléguer à l'environnement de bureau (il en existe plusieurs pour Linux).

Généralement, ces mécanismes ne considèrent que le nom de fichier pour décider du type de fichier; les clients de messagerie et les navigateurs Web constituent une exception, le type de fichier étant généralement indiqué explicitement par le serveur / indiqué dans le courrier.

Le mécanisme est généralement en deux étapes:

  • Tout d'abord, à partir du nom de fichier ou des informations fournies, déterminez le type MIME du fichier (le type MIME est une liste de types de fichiers normalisée mais extensible).
  • Deuxièmement, à partir du type MIME, déterminez le programme à exécuter, généralement via une sorte de registre géré par le programme lui-même ou par l'environnement de bureau pour lequel il a été écrit.
celtschk
la source
Merci. Est-il vrai qu'en terminal, nous devons toujours spécifier explicitement quelle application ouvrir un fichier (sauf le script avec shebang)? Les paramètres de quelle application pour ouvrir un fichier d'un certain format par défaut appartiennent-ils au gestionnaire de fichiers (par exemple, Nautilus), alors que ce n'est pas un problème lorsque nous vivons dans des terminaux?
Tim
Si vous souhaitez utiliser les associations Gnome à partir de la ligne de commande, vous pouvez utiliser la commande gnome-open. Je suis sûr qu'il existe des outils de ligne de commande similaires pour les autres environnements de bureau. Edit: Je viens de noter que John WH Smith donne une commande indépendante de votre environnement de bureau.
celtschk
6
Correction : la ligne shebang n'est pas un message au noyau; c'est un message à la coquille .
Kazark
1
@Kazark: coderwall.com/p/pdg77q
celtschk
2
Puisque le lien vers le code réel dans cette page liée ne semble pas fonctionner, voici un autre lien vers les lignes de traitement du code du noyau: lxr.free-electrons.com/source/fs/binfmt_script.c - bien sûr, vous pouvez aussi installez vous-même les sources du noyau et examinez le fichier.
celtschk
4

C'est similaire à MS-Windows.

Ce n'est pas fait par OS. C'est fait par le gestionnaire de fichiers, une partie du système de fenêtrage. Habituellement, la partie du nom de fichier après le dernier point .est utilisée pour prendre la décision. Il existe un moyen de les définir dans les paramètres ou lorsque vous cliquez avec le bouton droit sur un fichier.

Ainsi, le fichier ne dit pas au système d'exploitation, le fichier n'est pas actif et ne peut donc rien faire par lui-même, mais le gestionnaire de fichiers examine le nom du fichier. Le gestionnaire de fichiers peut également examiner l'intérieur du fichier de la même manière que l' fileutilitaire.

ctrl-alt-delor
la source
On peut dire que, dans Windows, ce n'est pas le gestionnaire de fichiers en tant que tel. Toute application peut appeler shell32!ShellExecute(), et bien que shell32 fasse partie de Windows Shell, il ne fait pas partie de l'explorateur Windows, qui est le gestionnaire de fichiers par défaut.
Ruslan
3

Comme @richard le dit, c'est similaire à Windows. Un gestionnaire de fichiers générique peut d'abord examiner le nom d'un fichier et essayer de reconnaître une extension de fichier associée à un programme. Si cela échoue, il peut essayer d'ouvrir le fichier et rechercher un en-tête. Si vous essayez de lire un fichier non-texte (par exemple, un fichier .jpeg), vous verrez une chaîne de données décrivant le fichier. Par exemple, c’est la première ligne d’un fichier .jpeg que j’ai traîné:

'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xfe\x00;CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), quality = 90'

KidElephant
la source
2
Certains gestionnaires de fichiers analysent le contenu du fichier avant l’extension du nom de fichier (peut-être même ignorent-ils toujours l’extension, pas sûr). Par exemple, dans Dolphin de KDE si vous avez des images GIF associées à un navigateur et un file.pngfichier PNG avec visionneuse d'images, le fait de renommer le fichier PNG pour file.gifouvrir la visionneuse d'images. Et si vous videz le fichier, il s'ouvrira dans l'éditeur de texte.
Ruslan
3

Je vais tenter de donner une réponse sous-jacente sur la façon dont les systèmes Unix traitent les fichiers. Comme d'autres l'ont souligné, votre formulation de la question est trompeuse, car les fichiers eux-mêmes ne signalent pas leur type et le noyau lui-même ne décide pas des applications à utiliser.

Dans les systèmes d'exploitation Unix et Windows, les fichiers sont structurés simplement comme une séquence d'octets. De Tanenbaum's Operating Systems , troisième édition:

En effet, le système d'exploitation ne sait pas ou ne se soucie pas du contenu du fichier. Tout ce qu'il voit sont des octets. Toute signification doit être imposée par les programmes au niveau utilisateur.

C’est pourquoi, dans un environnement de bureau, xdg-open est utilisé pour déterminer les applications par défaut permettant d'ouvrir des types de fichiers spécifiques.

Sur un système Unix, les fichiers sont différenciés entre fichiers normaux et fichiers spéciaux . Un fichier normal est simplement une donnée utilisateur qui peut être un fichier texte (encodage ASCII ou Unicode) ou binaire (code exécutable). Les fichiers spéciaux sont des fichiers indispensables à l'exécution du système d'exploitation. Ceux-ci incluent des répertoires, des liens, des tubes, des sockets et des fichiers de périphérique.¹

C’est par convention que les noms de fichier contiennent des extensions indiquant le type de fichier qu’ils peuvent être, par exemple * .c pour le code source C, * .html pour les pages Web, etc. De Tanenbaum:

Dans certains systèmes (par exemple, UNIX), les extensions de fichier ne sont que des conventions et ne sont pas appliquées par le système d'exploitation. Un fichier nommé fichier.txt peut être une sorte de fichier texte, mais ce nom est plus destiné à rappeler au propriétaire que de transmettre des informations réelles à l'ordinateur. D'autre part, un compilateur C peut en fait insister pour que les fichiers qu'il doit compiler se terminent par .c, et il peut refuser de les compiler s'ils ne le font pas.

Si un fichier est enregistré ou renommé sans l’extension appropriée, il conserve le même format pour ce type de fichier. C’est ainsi que la plupart des gestionnaires de fichiers décident avec quelles applications ouvrir les fichiers et pourquoi, sans extension, l’utilisateur sera invité à choisir "Choisissez le programme que vous souhaitez utiliser pour ouvrir ce fichier:".

Enfin, les variables d’environnement permettent de définir des paramètres au niveau du système et de l’utilisateur. Par exemple, la variable EDITORest utilisée pour spécifier l'éditeur de texte pour ouvrir lors de la manipulation par exemple du texte vim, nanoetc. Voici comment les processus savent quel éditeur ouvert, comme lors de l' édition d' un gitmessage de validation. Sinon, vous avez raison de préciser quelle application utiliser. Notez que vimles types de fichier sont détectés en vérifiant les extensions et en inspectant le contenu du fichier, si le paramètre filetype onest défini, ce qui applique ensuite la coloration syntaxique correcte, l'indentation, etc. ²

TL; DR

En résumé, ce sont les applications de niveau utilisateur qui déterminent les programmes avec lesquels ouvrir un type de fichier spécifique, et non le système d'exploitation lui-même.

Roberto Gomez
la source