User Tools

Site Tools


asociacion_de_aplicaciones_mime_en_linux

Asociación de iconos y aplicaciones según los tipos MIME de ficheros en Linux

En este se comenta como funciona la vinculación de iconos y aplicaciones con los diferentes ficheros del sistema. Al haber diferentes rutas donde poder configurar dichas asociaciones y diferentes formatos donde guardar las configuración (ficheros .list, .desktop y .cache), es común encontrarse con algún problema en algún momento. Por ejemplo tener unos ficheros con un icono que no les corresponde, que al hacer doble click no se ejecute o que lo haga con la aplicación errónea. Que al pulsar con el ratón las aplicaciones que se propongan estén repetidas o estas no sean las deseadas, etc. El funcionamiento de lo que aquí expuesto puede variar en base al escritorio en uso, aunque en principio todos deben seguir unas mínimas pautas establecidas https://www.freedesktop.org/wiki/.

Como ya dijimos, en GNU/Linux se utilizan ficheros .desktop y archivos .list/.cache con listados de tipos MIME para asociar / vincular una aplicación con determinados tipos de archivo. Esta asociación determina con qué aplicación o aplicaciones se puede ejecutar / abrir un fichero cuando hacemos clic sobre él. Las extensiones de los ficheros también juegan un papel importante al ser utilizadas en muchas ocasiones para mostrar correctamente el icono del archivo en base a su tipo mime.

El menú que muestra LXDE u otros escritorios cuando pulsamos botón derecho sobre un archivo propone un listado de aplicaciones posibles con las que abrirlo. Es posible vincularlas de dos maneras, por medio de los ficheros .desktop o bien desde el fichero lista mime (depende de la aplicación usará la cache generada a partir de ese fichero .list).

Vinculación de tipos MIME para el fichero “.desktop” del reproductor mplayer: /usr/share/applications/mplayer.desktop

MimeType=application/ogg;application/x-ogg;application/sdp;application/smil;application/x-smil;application/streamingmedia;application/x-streamingmedia;application/vnd.rn-realmedia;application/vnd.rn-realmedia-vbr;audio/aac;audio/x-aac;audio/m4a;audio/x-m4a;audio/mp1;audio/x-mp1;audio/mp2;audio/x-mp2;audio/mp3;audio/x-mp3;audio/mpeg;audio/x-mpeg;audio/mpegurl;audio/x-mpegurl;audio/mpg;audio/x-mpg;audio/rn-mpeg;audio/scpls;audio/x-scpls;audio/vnd.rn-realaudio;audio/wav;audio/x-pn-windows-pcm;audio/x-realaudio;audio/x-pn-realaudio;audio/x-ms-wma;audio/x-pls;audio/x-wav;video/mpeg;video/x-mpeg;video/x-mpeg2;audio/mp4;video/mp4;audio/mp4a;video/mp4a;video/msvideo;video/x-msvideo;video/quicktime;video/vnd.rn-realvideo;video/x-ms-afs;video/x-ms-asf;video/x-ms-wmv;video/x-ms-wmx;video/x-ms-wvxvideo;video/x-avi;video/x-fli;video/x-flv;video/x-theora;video/x-matroska;

Como comentamos, también se puede definir en el fichero “mimeapps.list”, además así se puede establecer el orden en el que serán propuestas al hacer clic derecho con el ratón sobre el fichero.

Fichero con los MIME types: $HOME/.config/mimeapps.list (hay varias rutas como se verá más adelante)

video/mp4=mplayer.desktop
audio/mp4=mplayer.desktop
audio/mp4a=mplayer.desktop
audio/m4a=mplayer.desktop
...

En el fichero .desktop se puede definir también como ejecutar o abrir el fichero, por ejemplo indicarle que que se ejecute en una terminal. También son utilizados por algunos escritorios o gestores de ventanas como disparadores para ejecutar aplicaciones al iniciar el escritorio (en LXDE: $HOME/.config/autostart).

Ejemplo de un fichero .desktop creado al vincular desde LXDE un archivo con MIME “video/webm” con el reproductor mplayer.

cat ~/.local/share/applications/userapp-mplayer-XUL1ZY.desktop 
[Desktop Entry]
Type=Application
Name=mplayer
Exec=mplayer %f
Categories=Other;        # Permite situarlo en el submenú deseado de la barra de tareas: Gráficos, Internet, Juegos, Oficina, etc.
NoDisplay=true
MimeType=video/webm
Terminal=true            # Se ejecuta en una terminal.
X-KeepTerminal=false

El prefijo “userapp-” u otro similar indica que fue una aplicación agregada desde alguna aplicación de escritorio. Si se quiere eliminar también es conveniente mirar en los fichero “mimeapps.list” para ver sonde está asociada.

Rutas a directorios con los ficheros que contienen las asociaciones MIME por orden de prioridad. Se debe prestar atención para no repetir vinculaciones con diferentes aplicaciones. Si se tiene problemas a la hora de personalizar asociaciones entre aplicaciones y tipos de ficheros es aconsejable mirar donde está definido.

~/.config/mimeapps.list
~/.local/share/applications/mimeapps.list
~/.local/share/applications/defaults.list
/usr/local/share/applications/defaults.list
/usr/share/applications/defaults.list
/usr/share/applications/mimeinfo.cache
$XDG_DATA_DIRS/applications/

Se recomienda mirar en todos esos directorios por mime types (ej. image/jpeg) definidos para encontrar posibles configuraciones erróneas.

Mostrar tipo MIME de un fichero.

file --mime-type logs.txt
logs.txt: text/plain 

Aplicación predeterminada para ejecutar al hacer clic con el ratón.

Los fichero defaults.list (ej. /usr/share/applications/defaults.list) también definen una aplicación para ejecutar al dar doble clic sobre un archivo.

[Default Applications]
application/wps-office.et=wps-office-et.desktop
application/wps-office.ett=wps-office-et.desktop
application/wps-office.xls=wps-office-et.desktop
...

Iconos vinculados a tipos de extensiones en Linux.

En el fichero “freedesktop.org.xml” se pueden agregar nuevas extensiones y a qué tipos MIME de fichero están ligadas. Por ejemplo si queremos agregar la extensión mp4a que a fecha del artículo todavía no ha sido agregada oficialmente, sería suficiente con agregar la siguiente linea al archivo /usr/share/mime/packages/freedesktop.org.xml dentro de la sección de “audio/mp4”.

<glob pattern="*.mp4a"/>

Si hay una extensión de un archivo no definida en el archivo “freedesktop.org.xml”, pese a que pacman lo muestre de tipo “desconocido”, si estuviera vinculado a su tipo MIME de alguna de las dos maneras comentadas anteriormente se ejecutaría sin problemas.

NOTA: Puede haber ficheros .xml con definiciones de extensiones también en otros lugares, como por ejemplo “$HOME/.local/share/mime/packages/”.

Actualizar bases de datos desktop y mimetypes

Los listados mime que hemos modificado deben ser cacheados para que algunas aplicaciones los utilicen.

# Buscar ficheros mimeinfo.cache en el sistema.
find / -name mimeinfo.cache

#### Opción 1: Crear bases de datos MIME cache desde los ficheros directorios MIME.

# Root
update-mime-database -V  /usr/share/mime/
# Usuario 
update-mime-database -V $HOME/.local/share/mime/


#### Opción 2: Crear bases de datos MIME cache desde los ficheros ".desktop".

# Root
update-desktop-database /usr/share/mime/
# Usuario 
update-desktop-database $HOME/.local/share/mime/

# Por defecto busca en $XDG_DATA_DIRS/applications

Completar rutas a determinadas extensiones cuando se usan comandos en consola.

Que al pulsar tabulador usando el comando firefox nos muestre unos archivos con unas determinadas extensiones (html, htm, shtml,xml,etc) u otros no tiene que ver con lo comentado en este post. De eso se encarga la propia terminal mediante el autocompletado inteligente (bash-completion) y por eso simplemente lo comentamos sin entrar en detalle.

grep -i avi /usr/share/bash-completion/completions/mplayer
             _filedir '@(m?(j)p?(e)g|M?(J)P?(E)G|wm[av]|WM[AV]|avi|AVI|asf|ASF|vob|VOB|bin|BIN|dat|DAT|vcd|VCD|ps|PS|pes|PES|fl[iv]|FL[IV]|fxm|FXM|viv|VIV|rm?(j)|RM?(J)|ra?(m)|RA?(M)|yuv|YUV|mov|MOV|qt|QT|mp[234]|MP[234]|m?(p)4[av]|M?(P)4[AV]|og[gmavx]|OG[GMAVX]|w?(a)v|W?(A)V|dump|DUMP|mk[av]|MK[AV]|m4a|M4A|aac|AAC|m[24]v|M[24]V|dv|DV|rmvb|RMVB|mid|MID|t[ps]|T[PS]|3g[p2]|3gpp?(2)|mpc|MPC|flac|FLAC|vro|VRO|divx|DIVX|aif?(f)|AIF?(F)|m2t?(s)|M2T?(S)|mts|MTS|vdr|VDR|xvid|XVID|ape|APE|gif|GIF|nut|NUT|bik|BIK|web[am]|WEB[AM]|amr|AMR|awb|AWB|iso|ISO|opus|OPUS)?(.part)'

Es recomendable actualizar todas las bases de datos del sistema, sobre todo no olvidar actualizar la base de datos del usuario.

Enlaces de interés.

asociacion_de_aplicaciones_mime_en_linux.txt · Last modified: 2020/12/25 22:57 by 127.0.0.1