Onde as associações de arquivos são armazenadas?


67

Como o Ubuntu ou qualquer outro sistema Linux armazena associações de arquivos?

Existe algum /etc/asscociationsarquivo ou algo assim?

Sei que posso clicar com o botão direito do mouse no arquivo e alterá-lo via "abrir com", mas estou curioso para saber como ele é armazenado internamente.

Respostas:


67

O gerenciador de arquivos (Nautilus, por padrão) usa o tipo MIME de um arquivo para determinar com qual programa abri-lo. Quando um aplicativo é instalado, ele pode especificar quais tipos MIME ele pode abrir e o comando a ser usado para abrir os arquivos no arquivo .desktop em que ele é colocado /usr/share/applications. Esse é o arquivo usado para menus, atalhos da área de trabalho etc.

Por exemplo, o GIMP possui o seguinte arquivo .desktop:

[Desktop Entry]
Version=1.0
Type=Application
Name=GNU Image Manipulation Program
GenericName=Image Editor
Comment=Create images and edit photographs
Exec=gimp-2.7 %U
TryExec=gimp-2.7
Icon=gimp
Terminal=false
Categories=Graphics;2DGraphics;RasterGraphics;GTK;
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=GIMP
X-GNOME-Bugzilla-Component=General
X-GNOME-Bugzilla-Version=2.7.2
X-GNOME-Bugzilla-OtherBinaries=gimp-2.7
StartupNotify=true
MimeType=application/postscript;application/pdf;image/bmp;image/g3fax;image/gif;image/x-fits;image/pcx;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-psd;image/x-sgi;image/x-tga;image/x-xbitmap;image/x-xwindowdump;image/x-xcf;image/x-compressed-xcf;image/tiff;image/jpeg;image/x-psp;image/png;image/x-icon;image/x-xpixmap;image/svg+xml;application/pdf;image/x-wmf;image/jp2;image/jpeg2000;image/jpx;image/x-xcursor;

Consulte o MimeTypecampo - isso lista os tipos MIME suportados. O Execcampo instrui o sistema a usar o comando gimp-2.7 %U, substituindo '% U' pelos arquivos a serem abertos. (Nota: O GIMP 2.7 é uma versão que instalei a partir de um PPA, portanto, é superior à versão atual nos repositórios do Ubuntu).

Quando o pacote de aplicativos é instalado, o sistema extrai esses dados do tipo MIME em um banco de dados mais facilmente acessível, porque a procura em cada arquivo .desktop levaria muito tempo se fosse feita toda vez que um arquivo fosse aberto.

Isso informa ao sistema quais aplicativos podem ser usados ​​para esse tipo MIME e fornece os aplicativos na lista 'Abrir com'. O padrão é definido em outro lugar. O arquivo /usr/share/applications/defaults.listfornece as informações para os padrões do sistema. A menos que você escolha o contrário, esses são os aplicativos usados ​​quando você 'abre' um arquivo.


7
Após alterar os tipos de MIME nos /usr/share/applications .desktoparquivos, existe um comando para recriar esse banco de dados MIME para ver novas associações em ação?
Redsandro 10/10

12
Sim. sudo update-desktop-databaseVeja jarrpa.net/2011/10/28/…
NoBugs

Um local mais apropriado para mudanças locais é /usr/local/share/applications. Eu acho que o gtk também está lá, por padrão. Ele funciona no meu sistema, mas foi atualizado (não reinstalado) desde o Ubuntu 7.04 ou mais.
Peter Cordes

2
O Ubuntu parece seguir o freedesktop.org: standards.freedesktop.org/mime-apps-spec/… , um projeto incrível .
Ciro Santilli publicou 30/03/15

23

Para complementar a excelente resposta do dv3500ea, gostaria de adicionar algumas informações sobre o que acontece quando você altera suas associações.

Enquanto o defaults.list (que você pode encontrar digitando 'localizar defaults.list') fornece a lista de aplicativos associados a cada tipo MIME, as personalizações feitas são armazenadas no diretório inicial, em ~ / .local / share / applications / mimeapps.list. Portanto, se você adicionar ou remover associações ou alterar a associação padrão, esse arquivo será atualizado.

O Guia de Administração do Sistema GNOME para Desktop em http://library.gnome.org/admin/system-admin-guide/stable/ não parece discutir o mimeapps.list, mas eu encontrei a seguinte descrição em http: //live.gnome .org / SysAdminGuideUpdate :

mimeapps.list está localizado em $ XDG_DATA_DIRS / applications. Seu objetivo é adicionar ou remover associações mime dos aplicativos. o nautilus grava ~ / .local / share / applications / mimeapps.list quando o usuário faz alterações na caixa de diálogo "Abrir com".


11
Mas, usando o Ubuntu 12.04, percebo que o mimeapps.listé substituído por entradas no defaults.list.
feeela

11
no 14.04, eu era capaz de s / vlc / mplayer / no meu ~/.local/share/applications/mimeapps.liste processos em execução como o pcmanfm capturavam as alterações sem reiniciar. . (mplayer.desktop é apenas executa mplayer eu tinha um em torno de mentir de uma mplayer velho instalar em / usr / local, eu acho IDK se ter um. MimeType=list;era necessário ou não.
Peter Cordes

Mais precisamente, mimeapps.listpode estar em qualquer lugar no seguinte caminho de pesquisa: Specifications.freedesktop.org/mime-apps-spec/…
Ciro Santilli 事件 改造 中心 法轮功 事件

18

Descobri que no meu sistema (Debian Jessie) também ~/.config/mimeapps.listhavia uma associação que eu criei acidentalmente para abrir um tipo de arquivo específico com o gedit. Nenhuma das maneiras padrão de corrigir isso (configurações padrão do aplicativo, Thunar é aberto com propriedade) refletia isso, mas o gedit era o aplicativo padrão.

Consegui remover a linha ~/.config/mimeapps.liste agora o aplicativo correto abre o arquivo.


2
Obrigado, você acidentalmente me ajudou a corrigir o Firefox abrindo tudo no Gedit. No openSUSE 13.2, removi a linha com "application / octet-stream = org.gnome.gedit.desktop;". :)
user31389

3
desde o ubuntu 15.04, as modificações específicas do usuário também são armazenadas ~/.config/mimeapps.list.
DJCrashdummy

2
Mais precisamente, mimeapps.listpode ser em qualquer lugar do seguinte caminho: specifications.freedesktop.org/mime-apps-spec/...
Ciro Santilli新疆改造中心法轮功六四事件

8

Encontrei este link sobre a associação padrão, pode ser útil. https://wiki.archlinux.org/index.php/Default_Applications
para associação global:

/usr/share/applications/mimeapps.list

por associação de usuário:

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

sintaxe é a seguinte:

[Added Associations]
mimetype=desktopfile1;desktopfile2;...;desktopfileN
...
[Removed Associations]
mimetype=desktopfile1;desktopfile2;...;desktopfileN

A seção [Associações Adicionadas] é usada para especificar aplicativos preferidos (padrão) em preferência decrescente. o que significa que o arquivo de desktop1 é o mais preferido e o arquivo de desktopN é o menos preferido.
A seção [Associações removidas] é usada para remover explicitamente quaisquer associações herdadas anteriormente.


11
Isso vem de um site archlinux , não se aplica necessariamente ao Ubuntu, /usr/share/applications/mimeapps.listnão existe.
guntbert

Obrigado por apontar isso, no entanto, o usuário disse no Ubuntu ou em outros sistemas Linux, isso significa que esta também é uma resposta para sua pergunta: P.
IdontCareAboutReputationPoints

5
Essa resposta é perfeitamente ok se você substituir mimeapps.desktopcomdefaults.desktop
szx

8

Consegui definir uma associação como esta:

xdg-mime default xnview.desktop image/jpeg

Você também pode remover associações e fazer outras coisas: man xdg-mime

Eu não precisava correr sudo update-desktop-database.


7

Crie um arquivo truecrypt.desktopem ~/.local/share/applicationscom as seguintes linhas:

[Desktop Entry]
Encoding=UTF-8
Type=Application
Icon=
Exec=/usr/bin/truecrypt %U
Name=truecrypt
Comment=manage truecrypt volumes

edite o arquivo ~/.local/share/applications/mimeapps.liste adicione a seguinte linha:

application/octet-stream=truecrypt.desktop

Eu descobri o tipo mime do Truecrypt seguindo este comando:

file --mime-type -b <any truecrypt filename>

Boa resposta, porque funciona para quem usa o kde, mas possui alguns programas nativos do gtk, como o firefox.
precisa saber é o seguinte

5

mimeapps.list caminho de pesquisa

Outros mencionaram este arquivo, mas nenhum explicou sua localização com precisão.

O padrão freedesktop.org diz em https://specifications.freedesktop.org/mime-apps-spec/mime-apps-spec-1.0.html :

A ordem de pesquisa para este arquivo é a seguinte:

$XDG_CONFIG_HOME/$desktop-mimeapps.list user overrides, desktop-specific (for advanced users)
$XDG_CONFIG_HOME/mimeapps.list             user overrides (recommended location for user configuration GUIs)
$XDG_CONFIG_DIRS/$desktop-mimeapps.list sysadmin and ISV overrides, desktop-specific
$XDG_CONFIG_DIRS/mimeapps.list             sysadmin and ISV overrides
$XDG_DATA_HOME/applications/$desktop-mimeapps.list  for completeness, deprecated, desktop-specific
$XDG_DATA_HOME/applications/mimeapps.list             for compatibility, deprecated
$XDG_DATA_DIRS/applications/$desktop-mimeapps.list    distribution-provided defaults, desktop-specific
$XDG_DATA_DIRS/applications/mimeapps.list              distribution-provided defaults

e os valores padrão para essas variáveis ​​de ambiente são fornecidos em https://specifications.freedesktop.org/basedir-spec/basedir-spec-0.6.html :

  • $XDG_DATA_HOME: $HOME/.local/share
  • $XDG_CONFIG_HOME: $HOME/.config
  • $XDG_DATA_DIRS: none, anexado a XDG_DATA_HOME
  • $XDG_CONFIG_DIRS: none, anexado a XDG_CONFIG_HOME

As versões mais antigas do Ubuntu podem não estar disponíveis ~/.config, por isso tente ~/.local/sharetambém.

Comandos como:

 xdg-settings set default-web-browser chromium-browser.desktop
 xdg-settings get default-web-browser

irá editar automaticamente esses arquivos.


2

Para todos os usuários:

/usr/share/applications/defaults.list

Cada usuário possui um arquivo de configuração para substituir esses padrões:

~ / .config / mimeapps.list

consulte também https://specifications.freedesktop.org/mime-apps-spec/mime-apps-spec-1.0.1.html para locais que podem ser usados ​​para substituir padrões.

Você deve conhecer o tipo MIME do arquivo que deseja alterar sua associação.

Além disso, todas as associações podem ser alteradas na linha de comando usando:

xdg-mime


1

O Freedesktop.org (anteriormente chamado de X Desktop Group, portanto, a abreviatura "XDG") é o grupo que atualmente dirige padrões X como este ( saiba mais na Wikipedia ).

A resposta de warvariuc já menciona o uso do xdg-mime como:

xdg-mime default xnview.desktop image/jpeg

 

Depois de brincar muito com editores e visualizadores de imagens, acabei com visualizadores diferentes para diferentes tipos de imagem com quase nenhuma consistência, especialmente entre os tipos de imagem mais raros.

Peguei o comando acima e o atribuí a cada um dos tipos MIME controlados pelos visualizadores de imagens e, em seguida, criei um novo image-viewer.desktopclonando um deles (isso é opcional, você pode simplesmente reutilizar o seu favorito). Em seguida, verifiquei manualmente que nenhum dos tipos MIME seria incompatível com meu novo aplicativo preferido. Por fim, defino esse aplicativo como padrão para todos os tipos MIME de outros aplicativos:

sed '/^MimeType=/!d; s///; s/;/\n/g' \
  /usr/share/applications/{ristretto,geeqie,gthumb}.desktop |sort -u \
  |xargs xdg-mime default image-viewer.desktop

Isso examina os .desktoparquivos de cada um dos visualizadores ( Ristretto , Geeqie e GThumb no meu caso), extrai a definição MIME (que é precedida por MimeType=e contém uma lista delimitada por ponto-e-vírgula), remove o rótulo de prefácio (correspondido anteriormente) e divide a lista em uma entrada por linha. sort -uremove as linhas redundantes e são entregues xdg-mimepara definir os novos padrões.

(Se você quiser testar isso antes de executá-lo ao vivo, mude xargspara xargs echoe ele imprimirá o comando resultante em vez de executá-lo.)

Essa técnica deve funcionar para qualquer coisa que você queira recuperar para um aplicativo de destino. Você nem precisa criar um novo .desktoparquivo (você pode usar um existente). Eu dei esse passo extra para que, quando eu inevitavelmente mudei minha fidelidade entre os visualizadores de imagens, eu apenas precisasse alterar esse arquivo.


1

No Ubuntu 18.04, achei a ordem de precedência da seguinte forma, do mais forte ao mais fraco:

  1. ~/.local/share/applications/defaults.list
  2. /usr/share/applications/defaults.list
  3. ~/.config/mimeapps.list ("Abrir com outro aplicativo" atualizará isso)
  4. ~/.local/share/applications/mimeapps.list
  5. A primeira correspondência encontrada no mimeinfo.cacheregistro de aplicativos compatíveis, que são gerados a partir dos .desktoparquivos presentes em /usr/share/applicationse /usr/local/share/applications, e podem ser regenerados usando update-desktop-database.
  6. (Nunca usado) /etc/gnome/defaults.list
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.