Como faço para definir uma nova configuração xdg-open?

Respostas:

17

O xdg-open basicamente olha apenas para ver qual ambiente de desktop você possui e, em seguida, executa o gnome-open, o gvfs-open, o xfce-open, etc. Veja abaixo as instruções específicas do ambiente de desktop ...

Gnomo

O Gnome usa o programa gnome-open, que usa o gconf para armazenar tudo. Por exemplo, na minha máquina com o Ubuntu 10.10 executando o gnome-open irc: // blah abre o xchat porque o xchat inclui um patch de configuração do gconf para adicionar um manipulador irc: //.

gconf-editor mostrando o irc com a configuração do xchat

Isso mostra como o gnome faz isso, com as configurações do gconf ativadas /desktop/gnome/url-handlers/. Veja xchat-2.8.8/src/common/dbus/apps_xchat_url_handler.schemascomo um exemplo.

KDE

Para o KDE, você deve olhar para os arquivos .protocol em / usr / share / kde4 / services /, criar um novo para o seu novo protocolo e colocá-lo em ~ / .kde / share / kde4 / services /, se for super útil, considere adicioná-lo ao pacote como uma correção para outros usuários.

O KDE está usando o kde-open ou o kfmclient, dependendo do que está disponível e da versão do KDE que você possui.

XFCE

O XFCE usa um programa chamado exo-open, este programa não tem como configurá-lo ou adicionar manipuladores de uri. Examinar o código-fonte mostra que ele usa arquivos da área de trabalho para especificar apenas três tipos de programas. TerminalEmulator, WebBrowser e EmailClient.

Com o XFCE4 (e provavelmente também outros), é possível configurar o xdg-open para definir um manipulador de protocolo personalizado. Em alguns, você precisa criar / editar os seguintes arquivos:

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

Um exemplo de adição de um manipulador para o protocolo ed2k é fornecido em stackexchange.com 2 .

Martin Owens -doctormo-
fonte
Você pode mencionar como fazer isso para todos os DEs oficiais?
Oxwivi 22/09/11
Não está exatamente relacionado à pergunta, mas você pode citar o diretório na parte inferior da captura de tela? Obrigado.
Oxwivi 23/09/11
4
O xdg-open basicamente olha apenas para ver qual ambiente de desktop você possui e depois executa o gnome-open, o gvfs-open, o xfce-open, etc. --- Acho que não. Primeiro, a página de manual não diz que, e segundo, o xdg-open funciona perfeitamente sem o ambiente da área de trabalho. Por exemplo, eu o uso com o gerenciador de janelas i3.
Alois Mahdal
Existe uma maneira genérica de criar uma nova associação de URL / aplicativo durante a instalação do aplicativo?
jayarjo 21/04
14

Descreverei isso com o magnet:tipo de URI e a transmissão (por exemplo, caso de bittorent), mas o mesmo método pode ser aplicado a qualquer esquema ou tipo de arquivo.

Também verifiquei isso com o Debian Jessie, e na verdade não tenho uma máquina Ubuntu, mas acredito que deve funcionar da mesma forma (pelo menos no xdg-open , observe que os gerenciadores de arquivos podem optar por usar uma lógica diferente).

  1. Descubra a sequência do tipo MIME. Para tipos de arquivo MIME, você pode encontrá-lo com o comando file :

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

    Para o arquivo acima, o tipo MIME é video/webm.

    Para manipuladores de URI, o tipo é x-scheme-handler/<scheme>, onde <scheme>é a parte do URI antes dos dois pontos, por exemplo, "http", "mailto" "irc" ou "magnet". A seguir, exemplos de tipos MIME válidos:

    x-scheme-handler/http
    x-scheme-handler/irc
    x-scheme-handler/magnet
    x-scheme-handler/mailto
    
  2. Descubra o nome do arquivo .desktop do aplicativo.

    Frequentemente, não é o mesmo que o nome "oficial", mas sim uma versão em minúscula ou um nome completamente diferente. Os arquivos .desktop instalados estão em / usr / share / applications. Como são arquivos de texto normais e contêm o nome "oficial", o seguinte comando pode ajudá-lo:

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

    O comando significa efetivamente "listar arquivos nesse diretório que contêm a palavra 'Transmissão'". Alguns aplicativos podem ser instalados apenas para o usuário; nesse caso, o caminho seria ~/.local/share/applications.

    Caso você tenha um aplicativo "estranho" que pode não ter o arquivo, você sempre pode criar um (e talvez enviá-lo aos desenvolvedores do aplicativo). A maneira mais fácil seria copiar um existente, reescrever os campos que você entende e remover aqueles que não são. Consulte a especificação para obter detalhes.

  3. Faça a atribuição usando o comando xdg-mime :

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

    Observe que não importa onde o arquivo esteja (/ usr / share / applications, ~ / .local / share / applications ...), você sempre usa apenas o nome , não o caminho completo.

    Normalmente, o comando não produzirá nada - tudo bem. Se você deseja verificar o que acabou de fazer ou ver o que está atualmente atribuído a qualquer tipo MIME sem abri-lo:

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

Nota 1: Se você deseja verificar outros tipos MIME, consulte /etc/mime.types. Ele não contém todos os tipos no mundo; por exemplo, os manipuladores de URI, mas poderia ser usado para a forma "agressiva" de manipular as associações. Por exemplo:

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

associaria todos os formatos de vídeo conhecidos ao VLC.

Nota 2: Os arquivos .desktop geralmente contêm uma lista de tipos MIME que eles afirmam poder manipular usando o MimeTypecampo. A página de manual do xdg-mime diz que o arquivo .desktop deve reivindicar o tipo MIME antes que o comando mencionado acima funcione, mas para mim parece funcionar mesmo se o campo estiver ausente. (Quero dizer, a associação será aplicada e o aplicativo será iniciado - se ele realmente puder lidar com o tipo é uma pergunta diferente). Não tenho certeza do que é desvantagem (talvez no futuro o xdg-mime seja mais restritivo).

Alois Mahdal
fonte
wiki.archlinux.org/index.php/xdg-open fornece mais ou menos o mesmo. ainda é bom lá.
Shirish
Esta resposta é a melhor maneira. Dica: 1) xdg-mime query filetype FILEé a maneira XDG de encontrar tipos de mímica. 2) Você também pode editar os padrões para manter as coisas mais organizadas e fazer backup posteriormente: .config/mimeapps.listé o arquivo.
Ciro Santilli # 20/16
reverteu 2 edições: @frank, gostaria de explicar como o xdg-mime "funciona melhor"? O arquivo IMO é a ferramenta autoritativa para tipos MIME, o xdg-mime query filetype xyz.wbemOTOH fornece menos informações e é muito mais para digitar.
Alois Mahdal 15/05
1
Ótima explicação e a dica para usar o único nome do arquivo da área de trabalho foi a solução que eu estava procurando, obrigado!
Andrea Richiardi
1
esse conselho finalmente me ajudou a resolver não conseguir fazer login usando o aplicativo de desktop slack no linux. o slack redireciona para um navegador, mas o navegador usa um esquema de URI para redirecionar de volta para o slack. suas dicas me ajudaram a ver que o mapeamento folgado do URI xdg-mime havia desaparecido. tão feliz que eu encontrei isso depois de uma hora de pesquisa! obrigado!
pestófago
2

Eu queria associar postmanlinks ao meu aplicativo Postman instalado manualmente (não à extensão chrome) para poder abrir os documentos do carteiro no navegador da seguinte maneira:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

O link que eu queria associar se parece com isso:

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

Para fazer a associação, executei as seguintes etapas:

  1. Instale o aplicativo manualmente (faça o download e descompacte um tar.gz) em /home/andrzej.rehmann/software/postman/
  2. Crie um arquivo da área de trabalho no /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. Associe o postmanlink xdg ao aplicativo executando:

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


Anunciei essa configuração se alguém estiver interessado: https://github.com/hoto/ansible-home-fedora/blob/fedora/roles/postman/tasks/postman_installer.yml

Andrzej Rehmann
fonte