¿Cómo configuro una nueva configuración xdg-open?

Respuestas:

17

xdg-open básicamente solo busca ver qué entorno de escritorio tiene y luego ejecuta gnome-open, gvfs-open, xfce-open, etc. Consulte a continuación las instrucciones específicas del entorno de escritorio ...

Gnomo

Gnome usa el programa gnome-open que usa gconf para almacenar todo. Por ejemplo, en mi máquina con Ubuntu 10.10 ejecutando gnome-open irc: // blah abre xchat porque xchat incluye un parche de configuración de gconf para agregar un controlador irc: //.

gconf-editor mostrando irc con configuración xchat

Esto muestra cómo gnome hace esto, con una configuración de gconf en /desktop/gnome/url-handlers/. Ver xchat-2.8.8/src/common/dbus/apps_xchat_url_handler.schemascomo un ejemplo.

KDE

Para KDE, debe mirar los archivos .protocol en / usr / share / kde4 / services /, crear uno nuevo para su nuevo protocolo y ponerlo en ~ / .kde / share / kde4 / services /, si es súper útil, entonces considere agregarlo al paquete como una solución para otros usuarios.

KDE está utilizando kde-open o kfmclient dependiendo de lo que esté disponible y de la versión de KDE que tenga.

XFCE

XFCE usa un programa llamado exo-open, este programa no tiene ninguna forma de configurarlo o agregar controladores de uri. Ver el código fuente muestra que utiliza archivos de escritorio para especificar solo tres tipos de programas. TerminalEmulator, WebBrowser y EmailClient.

Con XFCE4 (y probablemente también otros) es posible configurar xdg-open para definir un controlador de protocolo personalizado. En algunos tienes que crear / editar los siguientes archivos:

~ / .local / share / aplicaciones / protocolhandler.desktop ~ / .local / share / aplicaciones / mimeapps.list

Se proporciona un ejemplo que agrega un controlador para el protocolo ed2k en stackexchange.com 2 .

Martin Owens -doctormo-
fuente
¿Puedes mencionar cómo hacer eso para todos los DE oficiales?
Oxwivi
No está exactamente relacionado con la pregunta, pero ¿puede citar por completo el directorio en la parte inferior de la captura de pantalla? Gracias.
Oxwivi
44
xdg-open básicamente solo busca ver qué entorno de escritorio tiene y luego ejecuta gnome-open, gvfs-open, xfce-open, etc. --- No lo creo. Primero, la página de manual no dice eso, y segundo, xdg-open funciona perfectamente sin entorno de escritorio. Por ejemplo, lo uso con el administrador de ventanas i3.
Alois Mahdal
¿Existe una forma genérica de crear una nueva asociación de url / aplicación durante la instalación de la aplicación?
jayarjo
14

Lo describiré con el magnet:tipo de URI y la transmisión (es decir, caso de bittorent), pero el mismo método se puede aplicar a cualquier esquema o tipo de archivo.

También verifiqué esto con Debian Jessie, y en realidad no tengo una máquina Ubuntu, pero creo que debería funcionar igual (al menos para xdg-open , tenga en cuenta que los administradores de archivos pueden optar por usar una lógica diferente).

  1. Descubra la cadena de tipo MIME. Para los tipos de archivos MIME, puede encontrarlo con el comando de archivo :

    $ file -i Broken_Blossoms.webm 
    Broken_Blossoms.webm: video/webm; charset=binary
    $
    

    Para el archivo anterior, el tipo MIME es video/webm.

    Para los manejadores de URI, el tipo es x-scheme-handler/<scheme>, donde <scheme>es la parte de URI antes de los dos puntos, por ejemplo, "http", "mailto", "irc" o "magnet". Los siguientes son ejemplos de tipos MIME válidos:

    x-scheme-handler/http
    x-scheme-handler/irc
    x-scheme-handler/magnet
    x-scheme-handler/mailto
    
  2. Averigüe el nombre del archivo .desktop de la aplicación.

    A menudo no es lo mismo que el nombre "oficial" sino una versión en minúsculas del mismo, o un nombre completamente diferente. Los archivos .desktop instalados viven bajo / usr / share / aplicaciones. Como son archivos de texto normales y contienen el nombre "oficial", el siguiente comando puede ayudarlo:

    $ grep "Transmission" -l -r /usr/share/applications
    /usr/share/applications/transmission-gtk.desktop
    $
    

    El comando efectivamente significa "listar archivos en este directorio que contienen la palabra 'Transmisión'". Algunas aplicaciones pueden instalarse solo para el usuario, en ese caso la ruta sería ~/.local/share/applications.

    En caso de que tenga una aplicación "extraña" que no tenga el archivo, siempre puede crear una (y quizás enviarla a los desarrolladores de la aplicación). Una manera fácil sería copiar una existente, reescribir los campos que comprenda y eliminar los que no. Consulte la especificación para más detalles.

  3. Realice la asignación con el comando xdg-mime :

    $ xdg-mime default transmission-gtk.desktop x-scheme-handler/magnet
    $
    

    Tenga en cuenta que no importa dónde esté realmente el archivo (/ usr / share / aplicaciones, ~ / .local / share / aplicaciones ...), siempre usa solo el nombre , no la ruta completa.

    Normalmente, el comando no generará nada, eso está bien. Si desea verificar lo que acaba de hacer o ver lo que está asignado actualmente a cualquier tipo MIME sin abrirlo:

    $ xdg-mime query default x-scheme-handler/magnet
    transmission-gtk.desktop
    $
    

Nota 1: si desea consultar otros tipos MIME, puede consultar /etc/mime.types. No contiene todos los tipos en el mundo; por ejemplo, los manejadores de URI, pero podría usarse para una forma "agresiva" de manejar las asociaciones. Por ejemplo:

grep ^video/ | cut -d\t -f1 | xargs xdg-mime default vlc.desktop

asociaría todos los formatos de video conocidos a VLC.

Nota 2: los archivos .desktop a menudo contienen una lista de tipos MIME que afirman poder manejar usando el MimeTypecampo. La página de manual de xdg-mime dice que el archivo .desktop debe reclamar el tipo MIME antes de que funcione el comando mencionado anteriormente, pero para mí parece funcionar incluso si falta el campo. (Quiero decir, la asociación se aplicará y la aplicación se iniciará, si realmente puede manejar el tipo es una pregunta diferente). No estoy seguro de cuál es el inconveniente (tal vez en el futuro el xdg-mime será más restrictivo).

Alois Mahdal
fuente
wiki.archlinux.org/index.php/xdg-open da más o menos lo mismo. Sigue siendo buena.
Shirish
Esta respuesta es la mejor manera. Consejo: 1) xdg-mime query filetype FILEes la forma XDG de encontrar tipos mime. 2) También puede editar los valores predeterminados para mantener las cosas más organizadas y respaldarlas más tarde: .config/mimeapps.listes el archivo.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
revierte 2 ediciones: @frank, ¿quieres explicar cómo xdg-mime "funciona mejor"? El archivo IMO es la herramienta autoritativa para los tipos MIME, xdg-mime query filetype xyz.wbemOTOH da menos información y es mucho más para escribir.
Alois Mahdal
1
Una gran explicación y el consejo para usar el único nombre del archivo de escritorio fue la solución que estaba buscando, ¡gracias!
Andrea Richiardi
1
Este consejo finalmente me ayudó a resolver no poder iniciar sesión con la aplicación de escritorio slack en Linux. slack redirige a un navegador, pero luego el navegador usa un esquema URI para redirigir de nuevo a slack. sus consejos me ayudaron a ver que el mapeo de URI xdg-mime se había ido. ¡Me alegro de haber encontrado esto después de una hora de búsqueda! ¡gracias!
pesófago
2

Quería asociar postmanenlaces con mi aplicación Postman instalada manualmente (no con la extensión de Chrome) para poder abrir documentos de Postman desde el navegador de esta manera:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

El enlace que quería asociar se ve así:

postman://app/collections/import/39995-2b0394ab-b007-488d-9a0a...

Para hacer la asociación hice los siguientes pasos:

  1. Instale la aplicación manualmente (descargue y desempaquete un tar.gz) en /home/andrzej.rehmann/software/postman/
  2. Crear un archivo de escritorio en /usr/share/applications/Postman.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name=Postman
Icon=/home/andrzej.rehmann/software/postman/app/resources/app/assets/icon.png
Exec="/home/andrzej.rehmann/software/postman/Postman" %u
Comment=Develop with pleasure!
Categories=Development;
Terminal=false
StartupWMClass=Postman
  1. Asocia el postmanenlace xdg con la aplicación ejecutando:

xdg-mime default Postman.desktop x-scheme-handler/postman


He respondido esta configuración si alguien está interesado: https://github.com/hoto/ansible-home-fedora/blob/fedora/roles/postman/tasks/postman_installer.yml

Andrzej Rehmann
fuente