¿Cómo elige Linux qué aplicación abrir un archivo?

38

Si un archivo le dice al sistema operativo su formato de archivo, ¿cómo elige el sistema operativo qué aplicación abrir por defecto?

En Windows, ¿se almacena la asociación en la tabla de registro?

¿Cómo elige Linux qué aplicación abrir un archivo?

Solía ​​usar mucho Nautilus, pero ahora cambio a terminal. ¿Es cierto que en la terminal, siempre tenemos que especificar explícitamente qué aplicación abrir un archivo? ¿La configuración de qué aplicación para abrir un archivo de cierto formato por defecto pertenece al administrador de archivos (por ejemplo, Nautilus), y no es un problema cuando vivimos en terminales?

Tim
fuente
24
Linux es solo el núcleo del sistema operativo. Supongo que te refieres a tu entorno de escritorio o tu administrador de archivos aquí. Probablemente sea diferente en sistemas operativos Android, ChromeOS, Linux (o no Linux) con KDE, Gnome, XFCE ... u otros)
Stéphane Chazelas
probablemente. No sé cuál hace el trabajo. Estoy usando gnome, pero también me gustaría saber sobre general.
Tim
Luego aclare el entorno y la aplicación del sistema operativo y del escritorio. Como nautilus en Ubuntu 12.04 con escritorio de "unidad".
Stéphane Chazelas
(1) Estoy bajo Ubuntu 12.04. ¿Es mi escritorio Gnome o "Unity"? (2) Solía ​​usar mucho Nautilus, pero ahora cambio a terminal. ¿Es cierto que en la terminal, siempre tenemos que especificar explícitamente qué aplicación abrir un archivo? ¿La configuración de qué aplicación para abrir un archivo de cierto formato por defecto pertenece al administrador de archivos (por ejemplo, Nautilus), y no es un problema cuando vivimos en terminales?
Tim

Respuestas:

35

Puede haber diferentes mecanismos para manejar esta configuración predeterminada. Sin embargo, otras respuestas tienden a centrarse en entornos de escritorio completos, cada uno de ellos con su propio mecanismo. Sin embargo, estos no siempre se instalan en un sistema (uso mucho OpenBox), y en este caso, herramientas como las que xdg-opense pueden usar.

Citando el Arch Wiki :

xdg-open es una herramienta independiente del escritorio para configurar las aplicaciones predeterminadas de un usuario. Muchas aplicaciones invocan el comando xdg-open internamente.

En este momento, estoy usando Ubuntu (12.04) y xdg-openestá disponible. Sin embargo, cuando utiliza un entorno de escritorio completo como GNOME, xdg-openactúa como un simple reenviador y transmite las solicitudes de archivos a su DE, que luego es libre de manejar como lo desee (consulte otras respuestas para GNOME y Nautilus, por ejemplo) .

Dentro de un entorno de escritorio (por ejemplo, GNOME, KDE o Xfce), xdg-open simplemente pasa los argumentos a la aplicación de apertura de archivos de ese entorno de escritorio (gvfs-open, kde-open o exo-open, respectivamente), lo que significa que Las asociaciones se dejan en manos del entorno de escritorio.

... lo que te lleva de vuelta a las otras respuestas en ese caso. Aún así, dado que esto es Unix y Linux, y no Ask Ubuntu:

Cuando no se detecta un entorno de escritorio (por ejemplo, cuando se ejecuta un administrador de ventanas independiente, por ejemplo, Openbox), xdg-open utilizará sus propios archivos de configuración.

Considerándolo todo:

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

Si es el primer caso, deberá configurarlo xdg-opendirectamente , utilizando el xdg-mimecomando (que también le permitirá ver qué aplicación debe manejar qué archivo). En el segundo caso ...

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

... deberá configurar el abridor de archivos asociado con su entorno de escritorio. En algunos casos, la configuración realizada xdg-mimepuede redirigirse a la herramienta de configuración adecuada en su entorno.

John WH Smith
fuente
11
En un mundo ideal, Gnome y KDE usarían la configuración xdg para elegir qué aplicación abrir un archivo y proporcionarían IU para cambiar las opciones de xdg. Entonces podríamos tener solo una base de datos de configuración, en lugar de una para cada DE. Alas xdg apareció demasiado tarde.
joeytwiddle
2
En un mundo ideal, no tendrías tres DE.
Russell Borogove
1
@RussellBorogove: todos deberíamos mudarnos a Windows. Es un mundo ideal.
don_crissti
@don_crissti Creo que esto fue más como "ideal para un desarrollador o administrador". Si bien es una gran cosa ofrecer variedad a un usuario final, de hecho sería mucho más fácil (pero no necesariamente "mejor") que los diseñadores se concentren en un solo sistema. xdg-openes solo uno de estos componentes que intentan unir ambos extremos.
John WH Smith
1
@John: sobre administradores y desarrolladores / diseñadores de varias aplicaciones: de acuerdo ... pero luego, los desarrolladores en desarrollo solo pueden hacer mucho. En un mundo ideal, en lugar de quejarnos de esto o aquello, todos contribuiríamos a proyectos ascendentes como KDE, Gnome, etc. para mejorar la usabilidad y la operatividad entre ED. Si todos nosotros (millones) hiciéramos un pequeño esfuerzo, todos estos problemas se resolverían en unos pocos días.
don_crissti
11

Desde el entrada de wiki ,

Las GUI basadas en Linux, como KDE y GNOME, admiten asociaciones basadas en tipos MIME. Por ejemplo, el tipo de texto MIME / sin formato se asociaría con un editor de texto.

También, esta respuesta tiene más detalles.

El administrador de archivos a menudo usa alguna combinación de las opciones a y b (por ejemplo, mire primero la extensión del archivo, si no se conoce (o el archivo no tiene una extensión), mire el contenido).

El tipo de un archivo no se almacena como metadatos en los sistemas de archivos de Linux comunes.

De esta respuesta, veo la siguiente información.

El administrador de archivos (Nautilus, por defecto) usa el tipo MIME de un archivo para determinar con qué programa abrirlo. Cuando se instala una aplicación, puede especificar qué tipos MIME puede abrir y el comando que se usará para abrir los archivos en el archivo .desktop que se encuentra en / usr / share / aplicaciones. Este es el archivo utilizado para menús, accesos directos de escritorio, etc.

Ramesh
fuente
1
Mi pregunta es "dado el tipo de formato de un archivo", determina qué aplicación abrir el archivo.
Tim
11

Un archivo no le dice al sistema operativo su formato de archivo, con una excepción:

Si un archivo ejecutable comienza con una línea llamada shebang, como

#! /usr/bin/perl

entonces esta línea le dice al kernel de Linux que debe iniciarse /usr/bin/perl(es decir, en lugar de ejecutar este archivo, debe ejecutarse usr/bin/perly proporcionar este archivo como argumento). Por supuesto, esto solo funciona con formatos de archivo que ignoran (o entienden) esa línea shebang.

Aparte de eso, el sistema operativo como tal no sabe nada sobre los tipos de archivos. Sin embargo, muchos programas que permiten abrir otros archivos tienen su propio mecanismo para decidir qué programa usar para abrir qué archivo. Puede ser una lista dentro del programa en sí (Firefox, por ejemplo, mantiene dicha lista), o el programa puede delegarla en el entorno de escritorio (de los cuales hay varios para Linux).

Por lo general, esos mecanismos solo consideran el nombre del archivo para decidir de qué tipo es el archivo; una excepción son los clientes de correo electrónico y los navegadores web, donde el servidor proporciona el tipo de archivo de manera explícita / se indica en el correo.

El mecanismo suele ser de dos pasos:

  • Primero, a partir del nombre del archivo o la información suministrada, determine el tipo MIME del archivo (el tipo MIME es una lista estandarizada, pero extensible de tipos de archivo).
  • En segundo lugar, desde el tipo MIME, determine qué programa ejecutar, generalmente a través de una especie de registro mantenido por el propio programa o por el entorno de escritorio para el que se escribió el programa.
celtschk
fuente
Gracias. ¿Es cierto que en la terminal, siempre tenemos que especificar explícitamente qué aplicación abrir un archivo (excepto el script con shebang)? ¿La configuración de qué aplicación para abrir un archivo de cierto formato por defecto pertenece al administrador de archivos (por ejemplo, Nautilus), mientras que no es un problema cuando vivimos en terminales?
Tim
Si desea usar las asociaciones Gnome desde la línea de comando, puede usar el comando gnome-open. Estoy seguro de que hay herramientas de línea de comandos similares para los otros entornos de escritorio. Editar: solo noto que John WH Smith da un comando que es independiente de su entorno de escritorio.
celtschk
66
Corrección : la línea shebang no es un mensaje para el núcleo; Es un mensaje para el caparazón .
Kazark
1
@Kazark: coderwall.com/p/pdg77q
celtschk
2
Dado que el enlace al código real en esa página vinculada no parece funcionar ahora, aquí hay otro enlace al código del núcleo que maneja las líneas shebang: lxr.free-electrons.com/source/fs/binfmt_script.c , por supuesto, también podría simplemente instale las fuentes del núcleo usted mismo y mire el archivo.
celtschk
4

Se hace similar a MS-Windows.

No lo hace el sistema operativo. Lo realiza el administrador de archivos, una parte del sistema de ventanas. Por lo general, la parte del nombre del archivo después del último punto .se usa para tomar la decisión. Hay una manera de configurarlos en la configuración, o cuando hace clic derecho en un archivo.

Por lo tanto, el archivo no le dice al sistema operativo, el archivo no está activo, por lo que no puede hacer nada por sí solo, pero el administrador de archivos mira el nombre del archivo, el administrador de archivos también podría mirar dentro del archivo de la misma manera que lo hace la fileutilidad.

ctrl-alt-delor
fuente
Podría decirse que en Windows no lo hace el administrador de archivos per se. Cualquier aplicación puede llamar shell32!ShellExecute(), y aunque shell32 es parte de Windows Shell, no es parte del Explorador de Windows, que es el administrador de archivos predeterminado.
Ruslan
3

Como dice @richard, es similar a Windows. Un administrador de archivos genérico puede mirar primero el nombre de un archivo e intentar reconocer una extensión de archivo asociada con un programa. Si eso falla, puede intentar abrir el archivo y buscar un encabezado. Si intenta leer un archivo que no es de texto (por ejemplo, un .jpeg), verá una cadena de datos que describe el archivo. Por ejemplo, esta es la primera línea de un .jpeg que tenía por ahí:

'\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
fuente
2
Algunos administradores de archivos analizan el contenido del archivo antes de la extensión del nombre de archivo (tal vez incluso siempre ignoran la extensión, no estoy seguro). Por ejemplo, en Dolphin de KDE, si tiene imágenes GIF asociadas con un navegador y PNG con un visor de imágenes, al cambiar el nombre del file.pngarchivo PNG file.giftodavía se abrirá el visor de imágenes. Y si vacía el archivo, se abrirá en el editor de texto.
Ruslan
3

Intentaré dar una respuesta subyacente sobre cómo los sistemas Unix manejan los archivos. Como otros han señalado, su formulación de la pregunta es engañosa ya que los archivos en sí mismos no informan de qué tipo son y el núcleo en sí no decide qué aplicaciones usar.

En los sistemas operativos Unix y Windows, los archivos están estructurados simplemente como una secuencia de bytes. De los sistemas operativos de Tanenbaum , tercera edición:

En efecto, el sistema operativo no sabe ni le importa lo que hay en el archivo. Todo lo que ve son bytes. Cualquier significado debe ser impuesto por los programas a nivel de usuario.

Es por eso que, en un entorno de escritorio, xdg-opense utiliza para determinar aplicaciones predeterminadas para abrir tipos de archivos específicos.

En un sistema Unix, los archivos se diferencian entre archivos normales y archivos especiales . Un archivo normal es simplemente información del usuario que puede ser un archivo de texto (codificación ASCII o Unicode) o binario (código ejecutable). Los archivos especiales son archivos que son esenciales para ejecutar el sistema operativo. Estos incluyen directorios, enlaces, tuberías, sockets y archivos de dispositivos. ¹

Es por convención que los nombres de archivo contienen extensiones para indicar qué tipo de archivo pueden ser, por ejemplo, * .c para código fuente C, * .html para páginas web, etc. De Tanenbaum:

En algunos sistemas (por ejemplo, UNIX), las extensiones de archivo son solo convenciones y el sistema operativo no las aplica. Un archivo llamado file.txt podría ser algún tipo de archivo de texto, pero ese nombre es más para recordarle al propietario que para transmitir cualquier información real a la computadora. Por otro lado, un compilador de C puede insistir en que los archivos que debe compilar terminen en .c, y puede negarse a compilarlos si no lo hacen.

Si un archivo se guarda o cambia de nombre sin la extensión adecuada, aún conserva el mismo formato para ese tipo de archivo. Así es como la mayoría de los administradores de archivos deciden con qué aplicaciones abrir archivos, y por qué sin la extensión la mayoría le preguntará al usuario "Elija el programa que desea usar para abrir este archivo:".

Por último, las variables de entorno se utilizan para definir configuraciones de todo el sistema y de nivel de usuario. Por ejemplo, la variable EDITORse usa para especificar qué editor de texto abrir cuando se maneja texto vim, por ejemplo nano, etc. Así es como los procesos saben qué editor abrir, como cuando se edita un gitmensaje de confirmación. De lo contrario, tiene razón en que debe especificar qué aplicación utilizar. Tenga en cuenta que vimdetecta los tipos de archivo comprobando las extensiones e inspeccionando el contenido del archivo, si se establece la configuración filetype on, que luego aplica el resaltado de sintaxis correcto, sangría, etc. ²

TL; DR

En resumen, son las aplicaciones de nivel de usuario las que determinan con qué programas abrir un tipo de archivo específico, y no el sistema operativo en sí.

Roberto Gomez
fuente