De onde o firefox obtém os aplicativos "padrão" para abrir arquivos?

12

Por padrão, o Firefox (33.0) no meu FreeBSD 11.0-CURRENT possui o aplicativo padrão para abrir arquivos PDF definido como Inkscape. O Firefox se lembra da minha escolha anterior, evidenciada em "O que o Firefox deve fazer com este arquivo?" até recentemente, eu estava confuso de onde vinha essa configuração, mas a ignorei porque mal me preocupava.

No entanto, recentemente comecei a usar o Zotero como meu banco de dados de literatura. O Zotero é executado como um plug-in do Firefox, e ignora as opções feitas nas minhas preferências do Firefox para abrir arquivos PDF com evince ou me perguntar o que fazer com eles, e apenas os abre usando o Inkscape. Isso me fez tentar acompanhar esse item de configuração específico do Firefox, mas não consegui encontrar onde esse padrão está definido.

Não consegui encontrar a string Inkscape(ou inkscape) em nenhum arquivo relacionado ao Firefox no meu diretório pessoal.

Anaphory
fonte
1
Relacionados: unix.stackexchange.com/questions/149033/...
John WH Smith
Meu padrão do Firefox está definido como Font-Viewer.
usuário

Respostas:

14

Um link para uma “pergunta semelhante” ( comportamento padrão de aplicativos xdg-open - não obviamente relacionados, mas algumas experiências mostraram que o comportamento é realmente equivalente ao de xdg-open) me levou mais fundo na toca do coelho. Embora o Firefox não dependa ou herda regras de xdg-open, ele usa os arquivos de especificação MIME da mesma forma que xdg-openfaz.

Com base no usuário, o comportamento de abertura do MIME é configurado pelo arquivo de especificação ~/.local/share/applications/mimeapps.list.

Para mim, esse arquivo contém apenas alguns protocolos razoáveis ​​e arquivos HTML (e similares) conectados userapp-Firefox-??????.desktop, mas você pode adicionar facilmente uma linha como

application/pdf=evince.desktop

para resolver esse problema por usuário. Se o arquivo ainda não existir, adicione um cabeçalho de seção, como

[Default Applications]
application/pdf=evince.desktop

Mais profundamente, os tipos MIME são definidos em /usr/local/share/applications/mimeinfo.cache(isto pode ser /usr/share/…se você não estiver em um sistema FreeBSD), que lista application/pdf=inkscape.desktop;evince.desktop;. Ambos evince.desktope inkscape.desktopnessa pasta contêm MimeType=[…]application/pdf;[…].

O mimeinfo.cacheé gerado automaticamente a partir dos tipos MIME listados nos .desktoparquivos sem nenhuma ordem bem definida, portanto, você precisará remover o tipo MIME PDF do Inkscape e regenerar o cache usando update-mime-databaseou gerar um mimeapps.list (globalmente em /usr/local/share/applications/ou para o seu usuário em ~/.local/share/applications/mimeapps.list).

Anaphory
fonte
No meu antigo Debian Linux, update-mime-databasefaz algo diferente, eu precisava update-desktop-database ~/.local/share/applications.
Palec
Além disso, xdg-open file.pdfabre o Evince (como o Nautilus), enquanto o Firefox abre o xpdf. Usando find ~/.local/share/applications/ /usr/share/applications/ -type f -exec grep -i pdf '{}' +, descobri que o PDF não é mencionado em nenhum lugar na configuração do usuário, apenas nos arquivos /usr/share/applications/mimeinfo.cachee respectivos *.desktop. A linha mimeinfo.cacheé application/pdf=xpdf.desktop;evince.desktop;xournal.desktop;. Eu acho que FF leva o primeiro item. Mas como xdg-opensei que eu quero Evince?
Palec
1
Usando strace, descobri que xdg-openchamadas gnome-opene gnome-openleituras /usr/share/gnome/applications/defaults.list, que é um link simbólico /etc/gnome-vfs-2.0/defaults.list, o que especifica application/pdf=evince.desktop. Obviamente, o FF baunilha não possui integração com o GNOME e, portanto, ignora essa preferência.
Palec
7

No Firefox 38.8.0 ESR, no Debian Lenny com GNOME 2, descobri que o aplicativo associado via XDG (descrito na resposta pelo OP ) é usado apenas ao abrir um arquivo baixado de Downloads na Biblioteca.

E mesmo lá, a implementação fornece resultados inconsistentes xdg-open, pois ignora os caminhos específicos do GNOME (no meu caso /usr/share/gnome/applications/defaults.list, que é um link simbólico /etc/gnome-vfs-2.0/defaults.list). Eu tive que especificar application/pdf=evince.desktopno meu ~/.local/share/applications/defaults.list. (Observe que defaults.listfoi mesclado nas mimeapps.listversões mais recentes do XDG.)

Em vez do XDG, os recursos de metamail (mailcap) são usados ​​para resolver o aplicativo associado nos seguintes casos de uso:

  • abrir arquivo baixado no painel de downloads (exibido após pressionar o botão de download na barra de ferramentas)
  • aplicativo padrão no menu suspenso de download de arquivo
  • aplicativo padrão no menu suspenso em Preferências → Aplicativos ( about:preferences#applications)

A preferência about:preferences#applicationsé usada ao navegar para um URL com esse tipo de conteúdo, a menos que o download seja forçado.

O Mailcap é um mecanismo mais antigo que o XDG e tem suas raízes no email, de onde também vem o MIME. O run-mailcaputilitário é analógico para xdg-open. Sua configuração compreende três arquivos (em precedência decrescente):

  • ~/.mailcap - entradas de usuário
  • /etc/mailcap.order - especificação de pedidos de entradas em todo o sistema
  • /etc/mailcap - entradas em todo o sistema (mesmo formato das entradas do usuário)

Juntos, eles produzem uma lista de entradas de uma linha que especificam o aplicativo a ser usado para qualquer tipo MIME. As entradas são correspondidas de cima para baixo; portanto, o que vem primeiro tem precedência.

Para fazer uma alteração em todo o sistema de precedência de entradas, você precisa editar /etc/mailcap.ordere executar update-mime.

Para substituir algumas das entradas ou especificar suas próprias, em todo o sistema, é necessário editar /etc/mailcape executar a seção superior (destinada a entradas criadas manualmente) update-mime. Veja os comentários na seção superior.

Para entradas e substituições de usuário, use ~/.mailcap. As alterações entram em vigor imediatamente. Não ~/.mailcap.orderexiste; se você deseja alterar a precedência das entradas, reordene-as fisicamente (se estiverem dentro ~/.mailcap) ou substitua-as pela versão preferida (se estiverem dentro /etc/mailcap).

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

Observe que alguns aplicativos usam utilitários genéricos (como x-www-browserou pager) em vez da detecção do aplicativo preferido. Pode ser necessário usar update-alternativesum mecanismo semelhante para escolher a implementação preferida de um utilitário genérico em sua distribuição. Ou, para substituir uma alternativa preferida em todo o sistema para um usuário específico, defina variáveis ​​de ambiente como EDITOR(ou VISUAL) PAGERe BROWSER. Eles são suportados por sensible-browsere outras ferramentas, geralmente mais específicas (por exemplo, git commitusos EDITORe VISUAL).

Palec
fonte
1
Esta resposta ainda é válida no Firefox Quantum (64.0). No entanto, o mailcap tem um desempenho melhor que o firefox real, portanto você não pode confiar totalmente no run-mailcap --debug --norun. Eu tenho uma entrada como esta: application/pdf; sh -c "MEANINGFUL_VAR=preset /usr/bin/evince '%s'". O Firefox então chama sh downloaded_file.pdf. No meu console, vejo, entre outros, /tmp/mozilla_user/downloaded_file.pdf: line 3: 5: command not foundetc. Esse comportamento permanecerá para sempre, a menos que alguém conserte isso. Veja Mozilla Bugzilla .
u_Ltd.
1
Portanto, para criar uma experiência consistente para seus usuários, um administrador que implemente uma combinação do Debian com o Gnome deve definir os padrões mime usando nada menos que 4 utilitários: update-mime(para atualizar o mailcap), xdg-settings(para atualizar o xdg-open), gio(para atualizar o gnome-open) e update-alternatives(para atualizar os chamados utilitários genéricos). E é claro que ele / ela não deve esquecer de gerenciar as configurações em todo o sistema e para cada usuário separadamente (provavelmente melhor bloquear a capacidade do usuário de alterar os padrões) ... - ah, e o arquivo handlers.json do FF: mzl.la/1xKrLAq
zenlord 02/12/19