estendere file manager con script-personalizzati-nautilus | Linuxiano.it
Privacy Policy

estendere file manager con script-personalizzati-nautilus

Come estendere il file manager GNOME con script-personalizzati-nautilus

In questo tutorial vedremo come estendere il file manager Nautilus con funzionalità fornite da script-personalizzati-nautilus

Sebbene GNOME, nella sua iterazione 3.x sia stato oggetto di numerosi dibattiti, a causa del suo paradigma desktop non tradizionale, è probabilmente il desktop più utilizzato su Linux. Il file manager predefinito incluso in GNOME è Nautilus (il nuovo nome dell’applicazione è “File”).

In questo tutorial imparerai:

Come utilizzare script personalizzati per estendere le funzionalità di Nautilus

Convegni # – richiede che i comandi linux forniti siano eseguiti con i privilegi di root direttamente come utente root o usando il comando sudo
$ – richiede che i comandi linux forniti siano eseguiti come un normale utente non privilegiato

script-personalizzati-nautilus

Creazione della directory degli script-personalizzati-nautilus

La prima cosa da fare è creare la directory che ospiterà i nostri script: ~/.local/share/nautilus/scripts. Una volta inseriti in questa directory, gli script appariranno automaticamente nel menu contestuale di Nautilus visualizzato quando selezioniamo uno o più file:

Terminale
  • mkdir -p ~/.local/share/nautilus/scripts

Nel comando sopraindicato ho usato la -p (abbreviazione di –parents ) per essere sicuro che tutte le directory nel percorso specificato siano create sono all’ occorrenza, senza creare nessun errore anche se alcune directory esistessero.
Con la nostra directory in atto, possiamo iniziare a lavorare sui nostri script: notate che saranno inclusi correttamente nel menu di scelta rapida di Nautilus solo se resi esecutivi. Prima di scrivere il codice dovremmo imparare a conoscere alcune variabili che possiamo usare all’interno degli script: sono il modo principale in cui possiamo interagire con lo stato del file manager, accedendo a informazioni utili.

Variabili di script Nautilus

Affinché i nostri script siano utili, dovrebbe essere possibile interagire con lo stato del file manager ed essere in grado di fare riferimento, ad esempio, al percorso e ai nomi dei file selezionati o alla directory di lavoro corrente: possiamo accedere a queste informazioni tramite alcuni variabili impostate esattamente per questo scopo. Vediamoli.

Innanzitutto abbiamo la variabile NAUTILUS_SCRIPT_SELECTED_FILE_PATHS. Come sempre, il nome della variabile si spiega da sé: questa variabile contiene il percorso completo del file system dei file attualmente selezionati nel file manager. Il valore della variabile è una stringa; i percorsi dei file sono delimitati dall’uso di caratteri di newline.

Un’altra variabile molto utile è NAUTILUS_SCRIPT_SELECTED_URIS. Possiamo usare questa variabile, come quella che abbiamo appena visto, per fare riferimento a file selezionati, con una differenza: i file non sono referenziati dai loro percorsi, ma dal loro URI o “Unified Resource Identifier”. Il ruolo di questa variabile diventa evidente quando si lavora su filesystem remoti: in tal caso, i percorsi semplici non funzioneranno e la variabile NAUTILUS_SCRIPT_SELECT_FILE_PATHS sarà vuota. In queste situazioni, per accedere ai file dobbiamo anche conoscere il tipo di protocollo in uso: un file selezionato nel file manager tramite il protocollo sftp, ad esempio, verrà indicato come sftp://path/to/file.

Infine, abbiamo le variabili NAUTILUS_SCRIPT_CURRENT_URI e NAUTILUS_SCRIPT_WINDOW_GEOMETRY. Il primo contiene URI della directory aperta nel file manager; queste ultime informazioni sulla geometria (larghezza e altezza) e sulla posizione della finestra del file manager (es. 631×642 + 26 + 23).

Un esempio pratico

Ad esempio, costruiremo uno script molto semplice: il suo scopo sarà quello di organizzare le immagini selezionate nel file manager sulla base della loro data di creazione. In questo caso lo script verrà scritto in python, un linguaggio supportato di default su ogni distribuzione; possiamo, ovviamente, anche scrivere script bash o usare qualsiasi altro linguaggio di scripting supportato.

Oggi quasi tutte le immagini digitali contengono metadati che possiamo usare per recuperare tutti i tipi di informazioni, come il tipo di fotocamera o dispositivo utilizzato per creare l’immagine e le impostazioni utilizzate. Quello di cui stiamo parlando sono chiamati tag exif: ciò che ci interessa in questo caso è il campo OriginalDateTime (36867). Lo script sarà in grado di organizzare solo le immagini che includono quel tag e le riorganizzerà in directory create utilizzando il modello “nome anno/mese”. Le immagini che non contengono informazioni verranno inserite in una directory chiamata “non ordinata”. Ecco il nostro script, lo salveremo come “organizza.py”:

#!/usr/bin/env python3
“””
Author: Egidio Docile
Organize selected pictures by their creation date, using the exif
DateTimeOriginal tag
“””

import datetime
import os

from PIL import Image

DATETIME_ORIGINAL=36867

def main():
for path in os.getenv(‘NAUTILUS_SCRIPT_SELECTED_FILE_PATHS’,”).splitlines():
try:
exif_data = Image.open(path)._getexif()
except OSError:
continue

try:
date = datetime.datetime.strptime(exif_data[DATETIME_ORIGINAL], ‘%Y:%m:%d %H:%M:%S’)
directory = os.path.join(date.strftime(‘%Y’), date.strftime(‘%B’))
except (KeyError, ValueError, TypeError):
directory = “unsorted”

os.makedirs(directory, exist_ok=True)
os.rename(path, os.path.join(directory, os.path.basename(path)))

if __name__ == ‘__main__’:
main()

script-personalizzati-nautilus

Come puoi vedere, accediamo e leggiamo la variabile NAUTILUS_SCRIPT_SELECTED_FILE_PATHS usando il metodo os.getenv, fornendo anche una stringa vuota come valore predefinito, nel caso in cui la variabile non sia impostata. Abbiamo quindi usato il metodo splitlines per “esplodere” la stringa che è il valore della variabile che abbiamo appena citato, in un elenco, usando il carattere di nuova riga delimitata. Alla fine abbiamo elaborato ogni percorso di file in un ciclo forloop.

Naturalmente lo script può essere migliorato, ma verificiamo quali funzioni. Una volta posizionato nella directory ~/.local/share/nautilus/scripts, dobbiamo renderlo eseguibile eseguendo:

Terminale
  • chmod +x ~/.local/share/nautilus/scripts/organize.py

Ora quando selezionerete i file nel menu contestuale del vostro file manager nautilus troverete una nuova vove.

Ed ecco la nostra sceneggiatura in azione. Selezioniamo le immagini che vogliamo ordinare e facciamo clic su “script / organizza.py” nel menu contestuale:

Utilizzo di dialoghi grafici negli script-personalizzati-nautilus

Puo capitare che i nostri script, per funzionare correttamente, devono essere in grado di interagire con l’utente, magari per chiedere conferma prima di eseguire un’operazione. Possiamo creare dialoghi di questo tipo nei nostri script, a seconda del linguaggio di programmazione che stiamo utilizzando. Quando scriviamo script bash, ad esempio, possiamo usare zenity, un programma per creare finestre di dialogo GTK, che di solito è incluso in un’installazione GNOME; in caso contrario possiamo installarlo utilizzando il nostro gestore di pacchetti di distribuzione preferito. Su Fedora, ad esempio, possiamo eseguire:

Terminale
  • sudo dnf install zenity

Nelle distribuzioni basate su Debian, invece, possiamo usare apt-get:

Terminale
  • sudo apt-get install zenity

Il pacchetto è anche incluso nei repository Archlinux “Extra”:

Terminale
  • sudo pacman -S zenity

Vediamo un esempio su come usare zenity. Questa volta scriveremo uno script bash che, una volta eseguito, metterà in minuscolo il nome di tutti i file selezionati. Sarà mostrato di seguito un esempio di immagini jpg che verranno messe in ordine automaticamente creando tre cartelle e ordinandole. Lo script dovete salvarlo nello stesso percorso sopranominato ( ~/.local/share/nautilus/scripts). Quando salviamo un immagine essa viene catalogata per data, percorso, dimensione e formato. Con questo dialogo di zenity le immagini saranno catagologate in base alle lettere maiuscole  e data.

script-personalizzati-nautilus

#!/bin/bash
set -e
set -u
set -o pipefail

if zenity –question –title=”Confirmation” –text=”Should I run the script?”; then
echo “${NAUTILUS_SCRIPT_SELECTED_FILE_PATHS}” | while read -r selected_file; do
file=”$(basename “$selected_file”)”
mv “${file}” “${file,,}”
done
fi

Il dialogo zenity

Quando utilizziamo linguaggi di programmazione più sofisticati come python, possiamo accedere a diversi tipi di librerie grafiche, per generare dialoghi, come TkInter che è il toolkit GUI python standard di fatto o PyGObject per utilizzare il toolkit e le librerie GTK.

conclusioni

In questo tutorial abbiamo visto come, in pochi semplici passaggi, possiamo estendere il file manager Nautilus usando script personalizzati scritti in vari tipi di linguaggi di programmazione. Abbiamo visto dove posizionare gli script nel filesystem e quali sono le variabili a cui possiamo fare riferimento al loro interno per ottenere i percorsi o l’URI del file selezionato, l’URI della directory aperta nel file manager e la sua geometria. Finalmente abbiamo due esempi, uno scritto in Python e l’altro in Bash. In quest’ultimo, abbiamo visto anche come generare un dialogo grafico usando la zenity.

Grazie! per l’utilizzo della Guida di Linuxiano.

Trovi questo tutorial utile? Condividi con i tuoi amici per tenerlo in vita.
Sii il primo a commentare, apprezzo i tuoi suggerimenti. Per ulteriori domande potete commentare qui sotto.