Apri una directory nel file manager predefinito e seleziona un file


9

In un programma che sto scrivendo voglio offrire la funzionalità per aprire la directory in cui si trova il file che sto elaborando e selezionare automaticamente quel file (in modo che l'utente non debba cercarlo).

So che posso aprire una directory nel file manager predefinito usando

xdg-open /path/to/directory

So che posso aprire una directory in nautilus e selezionare un file usando

nautilus /path/to/file.txt

Ho pensato che avrei potuto usare

xdg-mime query default inode/directory

per ottenere il file manager predefinito e, se è nautilus, chiamarlo come mostrato sopra. Ma, nonostante il fatto che nautilus sia l'impostazione predefinita sul mio sistema ( xdg-openapre nautilus e così fa il menu dei luoghi nella shell di gnome), xdg-mimeritorna Thunar.desktop. (Ho provato find / -name Thunar.desktop -mount 2>/dev/nullma non ha trovato nulla.)

Inoltre, non so come aprire una directory e selezionare una sotto directory in Nautilus (con l'approccio di cui sopra si aprirebbe la sottodirectory).

Come posso aprire una directory nel filemanager predefinito e selezionare un file in quella directory (se anche selezionare una directory fosse possibile sarebbe fantastico, ma per questa applicazione non necessaria) o almeno scoprire il filemanager predefinito in modo che io puoi chiamarlo direttamente?

Risposte:


6

1. Per aprire una directory e selezionare una sottodirectory / file in nautilus:

nautilus --select path/to/file/or/directory

Dalla pagina man nautilus (1) :

-s, --select
  Seleziona l'URI specificato nella cartella principale.

2. xdg-mime ritorna Thunar.desktopma si xdg-openaprenautilus

xdg-mimeutilizza mimeapps.listper determinare l'applicazione predefinita da utilizzare.

mimeapps.listEsistono file separati per gestire requisiti specifici dell'utente, specifici del sistema e specifici della distribuzione. Il loro ordine di ricerca può essere trovato qui .

mimeapps.listelenca le applicazioni predefinite per un dato mimetype nella sezione [Applicazioni predefinite]. Consente di elencare più applicazioni predefinite in ordine decrescente di preferenza. Per esempio :

[Default Applications]
mimetype1 = default1.desktop;default2.desktop;

dove mimetype1 è il tipo mime e * .desktop sono i file desktop.

xdg-opencerca il file desktop nell'ordine di ricerca, nell'elenco delle preferenze fino a quando non trova un file desktop valido. Se tale file non viene trovato in tutti i file, viene scelto il più preferito in base alle associazioni e viene utilizzato come applicazione predefinita.

Quindi, nel nostro esempio, supponiamo che default1.desktopnon sia presente sul nostro sistema, quindi xdg-opencercheremo di aprire il nostro file usando default2.desktop. Tuttavia, xdg-mimerestituisce default1.desktopqual è la prima voce nel nostro mimeapps.listfile.

Nel tuo caso default1.desktopdeve essere Thunar.desktopquindi l'output. Tuttavia, non è installato sul tuo sistema. Quindi xdg-openapre il tuo file / directory usando nautilusquale è presente sul tuo sistema. Per verificare ciò, è possibile controllare il mimeapps.listfile per la riga contenente inode/directory. Per Ubuntu 17.10, la posizione del mimeapps.listfile è:/usr/share/applications/defaults.list

NOTA: l'algoritmo completo per determinare le "Applicazioni predefinite" è disponibile qui .


Nel caso in cui qualcosa sia rimasto senza risposta o in caso di confusione, rilascia un commento.
Amit Singh,

1
La tua risposta eccellente sembrava una domanda al primo posto (qual è il motivo dell'eliminazione), potrebbe fuorviare i revisori, quindi l'ho modificata un po '. Sentiti libero di tornare indietro se non va bene.
Peter - Ripristina Monica il

@peterh Grazie per la modifica! Lo terrò a mente per le risposte future.
Amit Singh,

+1. Grazie mille per la tua risposta. La prima parte funziona perfettamente. La seconda parte insieme a questa specifica che spiega quali valori vengono assunti se le variabili di ambiente non sono impostate, spiega perché viene restituito Thunar.
Jakun

1
Tuttavia, non riesco ancora a ripercorrere il motivo per cui Nautilus viene avviato perché non è specificato in a mimeapps.list. Puoi spiegare in cosa consistono queste associazioni "se dopo che tutti i file sono stati gestiti, non abbiamo ancora trovato un'applicazione predefinita, seleziona l'applicazione preferita (secondo le associazioni) che supporta il tipo"? Sai un modo per scoprire quale programma verrà avviato automaticamente senza necessità di reimplementare questo algoritmo?
Jakun

0

Si consiglia di utilizzare dbus per aprire il file in quanto sta rapidamente diventando più popolare.

Il concetto di un file manager "predefinito" esiste davvero solo se ci si concentra esclusivamente su xdg-mime, tuttavia in dbus land, e in effetti la maggior parte delle applicazioni là fuori, la storia prende una svolta diversa e il concetto di un file manager "predefinito" cessa di esistere.

Ecco come si apre un file ( /home/me/path/to/folder/or/file) nel file manager (predefinito?), Usando dbus:

dbus-send --session --print-reply --dest=org.freedesktop.FileManager1 --type=method_call /org/freedesktop/FileManager1 org.freedesktop.FileManager1.ShowItems array:string:"file:///home/me/path/to/folder/or/file" string:""

Ciò che questo comando fa è cercare qualsiasi servizio dbus che implementa l' org.freedesktop.FileManager1interfaccia e lo chiama con il percorso del file che si desidera aprire.

Il motivo per cui ho messo un punto interrogativo dopo l' impostazione predefinita è perché dbus non rispetta il concetto di file manager "predefinito"; tutto ciò che fa è inviare la chiamata al primo servizio che trova che implementa l'interfaccia e gli consente di gestire l'operazione. Ora può darsi che l'applicazione scelta sia il file manager "predefinito", ma non è sempre una garanzia.

La maggior parte delle applicazioni moderne utilizzerà dbusper impostazione predefinita e quindi fallback xdg-mimese la chiamata dbus fallisce, quindi questo è quello che ti suggerirei di fare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.