Dove sono archiviate le associazioni di file?

In che modo Ubuntu o altri sistemi Linux memorizzano le associazioni di file?

C’è qualche /etc/asscociations o qualcosa del genere?

So che posso fare clic destro su file e modificarlo tramite “Apri con”, ma sono solo curioso di sapere come viene memorizzato internamente.

Il file manager (Nautilus, per impostazione predefinita) utilizza il tipo MIME di un file per determinare con quale programma aprirlo. Quando un’applicazione è installata, può specificare quali tipi MIME può aprire e il comando da utilizzare per aprire i file nel file .desktop che si trova in /usr/share/applications . Questo è il file utilizzato per i menu, le scorciatoie del desktop, ecc.

Ad esempio, GIMP ha il seguente file .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; 

Vedi il campo MimeType – questo elenca i tipi MIME supportati. Il campo Exec dice al sistema di usare il comando gimp-2.7 %U , sostituendo ‘% U’ con i file da aprire. (Nota GIMP 2.7 è una versione che ho installato da un PPA, quindi è superiore alla versione corrente nei repository di Ubuntu).

Quando il pacchetto dell’applicazione viene installato, il sistema estrae i dati di questo tipo MIME in un database più facilmente accessibile perché l’esecuzione di ciascun file .desktop richiederebbe troppo tempo se veniva eseguita ogni volta che veniva aperto un file.

Questo indica al sistema quali applicazioni possono essere utilizzate per quel tipo MIME e fornisce le applicazioni nell’elenco “Apri con”. Il valore predefinito è definito altrove. Il file /usr/share/applications/defaults.list fornisce le informazioni per i valori di default del sistema. A meno che tu non scelga diversamente, queste sono le applicazioni utilizzate quando apri un file.

Per completare la risposta eccellente di dv3500ea, vorrei aggiungere alcune informazioni su cosa succede quando cambi le tue associazioni.

Mentre il file defaults.list (che puoi trovare digitando ‘locate defaults.list’) fornisce l’elenco delle applicazioni associate a ciascun tipo MIME, qualsiasi personalizzazione che fai viene memorizzata nella tua home directory, in ~ / .local / share / applications / mimeapps.list. Quindi, se aggiungi o rimuovi associazioni o cambia l’associazione predefinita, questo file viene aggiornato.

La GNOME Desktop System Guide Guide su http://library.gnome.org/admin/system-admin-guide/stable/ non sembra discutere di mimeapps.list, ma ho trovato la seguente descrizione su http: //live.gnome .org / SysAdminGuideUpdate :

mimeapps.list si trova in $ XDG_DATA_DIRS / applicazioni. Il suo scopo è aggiungere o rimuovere associazioni di mime dalle applicazioni. nautilus scrive ~ / .local / share / applications / mimeapps.list quando l’utente apporta modifiche nella finestra di dialogo “Apri con”.

Ho scoperto che sul mio sistema (Debian Jessie) c’è anche un ~/.config/mimeapps.list che aveva un’associazione che ho creato per sbaglio per aprire un tipo di file specifico con gedit. Nessuno dei modi standard per correggere questo problema (le impostazioni dell’applicazione predefinite, la proprietà aperta di Thunar con la proprietà) lo ha riflesso, ma gedit era l’applicazione predefinita.

Sono stato in grado di rimuovere la riga da ~/.config/mimeapps.list e ora l’applicazione corretta apre il file.

Crea un file truecrypt.desktop in ~/.local/share/applications con le seguenti linee:

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

quindi modifica il file ~/.local/share/applications/mimeapps.list e aggiungi la seguente riga:

 application/octet-stream=truecrypt.desktop 

Ho scoperto il tipo mime di TrueCrypt seguendo questo comando:

 file --mime-type -b  

Sono stato in grado di impostare un’associazione come questa:

 xdg-mime default xnview.desktop image/jpeg 

Puoi anche rimuovere associazioni e fare altre cose: man xdg-mime

Non avevo bisogno di eseguire sudo update-desktop-database .

Ho trovato questo collegamento riguardo all’associazione predefinita, potrebbe essere utile. https://wiki.archlinux.org/index.php/Default_Applications
per l’associazione globale:

 /usr/share/applications/mimeapps.list 

per associazione utente:

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

la syntax è la seguente:

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

La sezione [Associazioni aggiunte] viene utilizzata per specificare le applicazioni preferite (predefinite) in ordine decrescente di preferenza. il che significa che desktopfile1 è il più preferito e desktopfileN è il meno preferito.
La sezione [Rimosse associazioni] viene utilizzata per rimuovere esplicitamente eventuali associazioni ereditate in precedenza.

percorso di ricerca mimeapps.list

Altri hanno menzionato questo file, ma nessuno ha spiegato con precisione la sua posizione.

Lo standard freedesktop.org dice in https://specifications.freedesktop.org/mime-apps-spec/mime-apps-spec-1.0.html :

L’ordine di ricerca per questo file è il seguente:

 $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 quindi i valori predefiniti per quelle variabili d’ambiente sono forniti su 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 : nessuno, aggiunto a XDG_DATA_HOME
  • $XDG_CONFIG_DIRS : nessuno, aggiunto a XDG_CONFIG_HOME

Le versioni precedenti di Ubuntu potrebbero non controllare ~/.config , quindi assicurati di provare anche ~/.local/share .

Comandi come:

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

modificherà automaticamente quei file.

Per tutti gli utenti:

/usr/share/applications/defaults.list

Ogni utente ha un file di configurazione per ignorare questi valori predefiniti:

~ / .config / mimeapps.list

vedere anche https://specifications.freedesktop.org/mime-apps-spec/mime-apps-spec-1.0.1.html per i posti che potrebbero essere usati per sovrascrivere i default.

Devi conoscere il tipo mime del file che vuoi modificare è associazione.

Anche tutte le associazioni possono essere gestite, modificate in riga di comando usando:

xdg-mime

Freedesktop.org (precedentemente chiamato X Desktop Group, quindi l’abbreviazione “XDG”) è il gruppo che al momento guida standard X come questo ( maggiori informazioni su Wikipedia ).

La risposta di warvariuc menziona già l’uso di xdg-mime come:

 xdg-mime default xnview.desktop image/jpeg 

Dopo aver giocato molto con editor di immagini e spettatori, ho finito con diversi visualizzatori per diversi tipi di immagini con quasi nessuna coerenza, specialmente tra i tipi di immagini più rari.

Ho preso il comando precedente e l’ho assegnato a ciascuno dei tipi MIME controllati dai visualizzatori di immagini e poi image-viewer.desktop creato un nuovo image-viewer.desktop clonando uno di essi (questo è opzionale, puoi semplicemente riutilizzare il tuo preferito). Successivamente, ho verificato manualmente che nessuno dei tipi MIME sarebbe incompatibile con la mia nuova applicazione preferita. Infine, ho impostato quell’applicazione come predefinita per tutti i tipi MIME di altre applicazioni:

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

Questo esamina i file .desktop per ciascuno dei visualizzatori ( Ristretto , Geeqie e GThumb nel mio caso), estrae la definizione MIME (che è preceduta da MimeType= e quindi contiene un elenco delimitato da punto e virgola), rimuove il (precedentemente abbinato) etichetta di prefazione e divide l’elenco in una voce per riga. sort -u quindi rimuove le linee ridondanti, quindi vengono xdg-mime a xdg-mime per impostare i nuovi valori di default.

(Se vuoi testarlo prima di eseguirlo dal vivo, cambia xargs in xargs echo e stamperà il comando risultante invece di eseguirlo.)

Questa tecnica dovrebbe funzionare per tutto ciò che desideri recuperare per un’app di destinazione. Non è nemmeno necessario creare un nuovo file .desktop (è ansible utilizzarne uno esistente). Ho fatto quel passo in più in modo tale che, quando inevitabilmente cambio la mia fedeltà tra i visualizzatori di immagini, ho semplicemente bisogno di cambiare quel file.