¿De dónde obtiene Firefox las aplicaciones "predeterminadas" para abrir archivos?

12

Por defecto, Firefox (33.0) en mi FreeBSD 11.0-CURRENT tiene la aplicación predeterminada para abrir archivos PDF configurada en Inkscape. Firefox recuerda mi elección anterior, por ejemplo , en "¿Qué debe hacer Firefox con este archivo?" diálogo, por lo que hasta hace poco estaba confundido de dónde provenía esta configuración, pero en su mayoría lo ignoré porque apenas me preocupaba.

Sin embargo, recientemente comencé a usar Zotero como mi base de datos de literatura. Zotero se ejecuta como un complemento de Firefox e ignora las elecciones realizadas en mis preferencias de Firefox para abrir archivos PDF con evidencia o preguntarme qué hacer con ellos, y simplemente los abre usando Inkscape. Esto me hizo intentar seguir este elemento de configuración particular de Firefox, pero no pude encontrar dónde está establecido ese valor predeterminado.

No pude encontrar la cadena Inkscape(o inkscape) en ningún archivo relacionado con Firefox en mi directorio de inicio.

Anaphory
fuente
1
Relacionado: unix.stackexchange.com/questions/149033/…
John WH Smith
Mi Firefox predeterminado está configurado en Font-Viewer.
usuario

Respuestas:

14

Un enlace a una "pregunta similar" ( comportamiento de las aplicaciones predeterminadas de xdg-open , obviamente no relacionado, pero cierta experimentación mostró que el comportamiento es realmente equivalente al de xdg-open) me llevó a lo más profundo. Si bien Firefox no se basa ni hereda las reglas xdg-open, usa los archivos de especificación MIME tal como lo xdg-openhace.

En función del usuario, el archivo de especificación configura el comportamiento de apertura MIME ~/.local/share/applications/mimeapps.list.

Para mí, este archivo contiene solo unos pocos protocolos razonables y archivos HTML (y similares) conectados userapp-Firefox-??????.desktop, pero podría agregar fácilmente una línea como

application/pdf=evince.desktop

para resolver ese problema por usuario. Si el archivo aún no existe, asegúrese de agregar un encabezado de sección, como

[Default Applications]
application/pdf=evince.desktop

Más profundo, los tipos mime se definen en /usr/local/share/applications/mimeinfo.cache(esto puede ser /usr/share/…si no está en un sistema FreeBSD), que sí enumera application/pdf=inkscape.desktop;evince.desktop;. Ambos evince.desktopy inkscape.desktopen esa carpeta contienen MimeType=[…]application/pdf;[…].

El mimeinfo.cachese genera automáticamente a partir de los tipos mime enumerados en los .desktoparchivos sin un orden bien definido, por lo que tendrá que eliminar el tipo mime PDF de Inkscape y regenerar el caché usando update-mime-database, o generar un mimeapps.list (globalmente en /usr/local/share/applications/, o para su usuario en ~/.local/share/applications/mimeapps.list).

Anaphory
fuente
En mi antiguo Debian Linux, update-mime-databasehace algo diferente que necesitaba update-desktop-database ~/.local/share/applications.
Palec
Además, xdg-open file.pdfabre Evince (al igual que Nautilus), mientras que Firefox abre xpdf. Utilizando find ~/.local/share/applications/ /usr/share/applications/ -type f -exec grep -i pdf '{}' +, descubrí que el PDF no se menciona en ninguna parte de la configuración del usuario, solo en los archivos /usr/share/applications/mimeinfo.cacherespectivos *.desktop. La línea de entrada mimeinfo.cachees application/pdf=xpdf.desktop;evince.desktop;xournal.desktop;. Supongo que FF toma el primer artículo. ¿Pero cómo xdg-opensabe que quiero a Evince?
Palec
1
Usando strace, descubrí que las xdg-openllamadas gnome-openy las gnome-openlecturas /usr/share/gnome/applications/defaults.list, que es un enlace simbólico /etc/gnome-vfs-2.0/defaults.list, que especifica application/pdf=evince.desktop. Obviamente, Vanilla FF carece de la integración de GNOME y, por lo tanto, ignora esta preferencia.
Palec
7

En Firefox 38.8.0 ESR, bajo Debian Lenny con GNOME 2, descubrí que la aplicación asociada a través de XDG (descrita en la respuesta del OP ) se usa solo al abrir un archivo descargado desde Descargas en la Biblioteca.

E incluso allí, la implementación da resultados inconsistentes xdg-openya que ignora las rutas específicas de GNOME (en mi caso /usr/share/gnome/applications/defaults.list, que es un enlace simbólico a /etc/gnome-vfs-2.0/defaults.list). Tuve que especificar application/pdf=evince.desktopen mi ~/.local/share/applications/defaults.list. (Tenga en cuenta que defaults.listse fusionó en mimeapps.listversiones más recientes de XDG).

En lugar de XDG, las capacidades de metamail (mailcap) se utilizan para resolver la aplicación asociada para los siguientes casos de uso:

  • abrir el archivo descargado desde el panel de descarga (se muestra después de presionar el botón de descarga en la barra de herramientas)
  • aplicación predeterminada en el menú desplegable en el cuadro de diálogo de descarga de archivos
  • aplicación predeterminada en el menú desplegable en Preferencias → Aplicaciones ( about:preferences#applications)

La preferencia en about:preferences#applicationsse utiliza cuando se navega a una URL con ese tipo de contenido, a menos que la descarga sea forzada.

Mailcap es un mecanismo más antiguo que XDG y tiene sus raíces en el correo electrónico, de donde también proviene MIME. La run-mailcaputilidad es análoga a xdg-open. Su configuración comprende tres archivos (en precedencia decreciente):

  • ~/.mailcap - entradas de usuario
  • /etc/mailcap.order - especificación de pedido de entradas de todo el sistema
  • /etc/mailcap - entradas de todo el sistema (mismo formato que las entradas de usuario)

Juntos producen una lista de entradas de una línea que especifican la aplicación que se utilizará para cualquier tipo MIME. Las entradas coinciden de arriba hacia abajo, por lo que lo que viene primero tiene prioridad.

Para realizar un cambio de precedencia en todo el sistema, debe editar /etc/mailcap.ordery ejecutar update-mime.

Para anular algunas de las entradas o especificar la suya propia, en todo el sistema, debe editar la sección superior (destinada a entradas creadas manualmente) de /etc/mailcapy ejecutar update-mime. Vea los comentarios en la sección superior.

Para entradas de usuario y anulaciones, use ~/.mailcap. Los cambios surten efecto inmediatamente. No ~/.mailcap.orderexiste si desea cambiar la prioridad de las entradas, reordenarlas físicamente (si están en ~/.mailcap) o anularlas con la versión preferida (si están en /etc/mailcap).

Ver man update-mime, man mailcapy man mailcap.order.

Tenga en cuenta que algunas aplicaciones usan utilidades genéricas (como x-www-browsero pager) en lugar de la detección de la aplicación preferida. Es posible que deba usar update-alternativesun mecanismo similar para elegir la implementación preferida de una utilidad genérica en su distribución. O, para anular una alternativa preferida en todo el sistema para un usuario específico, establezca variables de entorno como EDITOR(o VISUAL), PAGERy BROWSER. Son compatibles con sensible-browsery otras herramientas, a menudo más específicas (por ejemplo, git commitusos EDITORy VISUAL).

Palec
fuente
1
Esta respuesta todavía es válida en Firefox Quantum (64.0). Sin embargo, mailcap funciona mejor que Firefox real, por lo que no puede confiar completamente en run-mailcap --debug --norun. Tengo una entrada como esta: application/pdf; sh -c "MEANINGFUL_VAR=preset /usr/bin/evince '%s'". Firefox luego invoca sh downloaded_file.pdf. Luego veo en mi consola, entre otros, /tmp/mozilla_user/downloaded_file.pdf: line 3: 5: command not foundetc. Este comportamiento permanecerá para siempre, a menos que alguien solucione esto. Ver Mozilla Bugzilla .
u_Ltd.
1
Entonces, para crear una experiencia consistente para sus usuarios, un administrador que implemente una combinación de Debian con Gnome, debe establecer los valores predeterminados de mime utilizando no menos de 4 utilidades: update-mime(para actualizar mailcap), xdg-settings(para actualizar xdg-open), gio(para actualizar gnome-open) y update-alternatives(para actualizar las llamadas utilidades genéricas). Y, por supuesto, no debe olvidarse de administrar la configuración tanto en todo el sistema como para cada usuario por separado (probablemente lo mejor sea bloquear la capacidad del usuario para cambiar los valores predeterminados) ... - ah, y el archivo handlers.json de FF también: mzl.la/1xKrLAq
zenlord