¿Cómo puedo registrar un protocolo personalizado con xdg?


22

He estado luchando esta mañana tratando de asociar una aplicación con un protocolo personalizado, a saber, emacsclient y org-protocol .

Llamo a este protocolo desde un bookmarklet de navegador web y obtengo el siguiente comportamiento:

En cromo,
aparece el cuadro de diálogo "Iniciar aplicación", y llama a xdg-open org-protocol: // ... que termina disparando un nuevo marco de cromo.

En firefox,
he intentado configurar el protocolo network.protocol-handler.app.org en una cadena vacía o en la ruta de mi emacsclient, de todos modos
aparece el siguiente mensaje de error: "Firefox no sabe cómo abrir esta dirección, porque protocol (org-protocol) no está asociado con ningún programa "sin siquiera mostrar ningún diálogo de selección de aplicación externa.

No estoy usando ningún entorno de escritorio, así que necesito hacer que esto funcione estrictamente con xdg, sin embargo, a pesar de leer la especificación de información mime compartida, etc., todavía no puedo entender una configuración que funcione.


Respuestas:


18

El método XDG: cree un emacsclient.desktoparchivo que maneje el x-scheme-handler/org-protocoltipo MIME:

[Desktop Entry]
Name=Emacs Client
Exec=emacsclient %u
Icon=emacs-icon
Type=Application
Terminal=false
MimeType=x-scheme-handler/org-protocol;

(Tenga en cuenta la MimeType=línea anterior, que es para org-protocol:URI).

Pon el archivo en ~/.local/share/applicationso /usr/local/share/applications.

Puede que tenga que abrir el archivo ~/.local/share/applications/mimeapps.listy agregar una línea como esta:

x-scheme-handler/org-protocol=emacsclient.desktop

Agregue eso debajo de la [Default Applications]sección.


todavía me abre una ventana cromada; ¿Algo más? (Estoy usando fluxbox sin entorno de escritorio similar al autor original)
ensamblar

8
También puede lograr el último paso a través xdg-mime default emacsclient.desktop x-scheme-handler/org-protocol, que es probablemente la forma más oficial de hacerlo.
Adam Spires

¿Hay alguna otra variable útil además %u? Por ejemplo, ¿una variable que expresa solo la parte del dominio o la ruta del URI?
Jonathan Neufeld

11

@grawity es casi correcto, pero pasó por alto dos detalles:

  1. Después de instalar el .desktoparchivo, es posible que deba ejecutarlo manualmente sudo update-desktop-database. (Esto puede hacerse por usted si instaló el .desktoparchivo usando xdg-desktop-menu install emacsclient.desktop)

    Eso fue lo que se requería para que mi Firefox mostrara "¿Qué debería manejar este protocolo?" diálogo en lugar de solo mostrar una página de error.

  2. En el momento en que se hizo esta pregunta, había un error xdg-openque causaba que entregara URL a ciegas en $BROWSERescritorios "genéricos" (no KDE, no GNOME, no Xfce, etc.) y que produce exactamente el comportamiento @ julien estaba experimentando.

    Debería arreglarse en las versiones modernas de xdg-open pero, si su escritorio no está usando una versión moderna por alguna razón, aquí está la versión de xdg-open que uso /usr/local/binpara resolver el problema.


1
actualizar xdg-open funcionó para mí, ¡gracias!
George Marques

0

Al menos en Fedora 13 y en varias distribuciones basadas en Debian, xdg-open abre todas las URL que no tienen un esquema file: // en un navegador si no se ejecuta en un entorno de escritorio compatible. La forma en que intenta detectar qué navegador usar depende de la distribución.

Como xdg-open es solo un script de shell, puede adaptarlo fácilmente a sus necesidades.


De hecho, pero es la configuración que se necesita entre xdg-open y xdg-mime lo que es muy opaco para mí, a pesar de leer los documentos ...
julien

Si abre un archivo: // URI Ubuntu no llama a xdg-mime en absoluto, pero usa run-mailcap si no se ejecuta bajo un DE compatible, Fedora 13 primero intenta encontrar la aplicación predeterminada usando xdg-mime y si eso no funciona el trabajo vuelve a mimeopen. xdg-mime utiliza la base de datos de información compartida MIME freedesktop.org/wiki/Software/shared-mime-info
Florian Diesch
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.