Ciao giannigianni,
il fatto è che Nautilus, il gestore dei file predefinito di Ubuntu, attualmente non permette di eseguire direttamente quelli che sono assimilabili a file di tipo testuale (a prescindere da ciò che questi possano rappresentare), e purtroppo quella guida che hai letto non è valida per le versioni più recenti del programma. Praticamente, se il file da “attivare” contiene del testo, Nautilus non lo considererà mai un file da eseguire
direttamente, tramite il doppio click o la pressione del tasto «Invio» dopo la selezione, seppur abbia il permesso di esecuzione, e si dovrà quindi utilizzare «Esegui come programma» come hai già fatto. Questo è proprio il modo in cui al momento è programmato.
Se desideri cambiare questo comportamento, dovrai modificare il programma tramite una cosiddetta “patch”. Ne ho generata una che trovi allegata a questo messaggio e che potrai applicare seguendo le mie istruzioni:
1. Innanzitutto crea la cartella che ospiterà la patch:
2. Adesso,
manualmente, scarica l'archivio allegato e estrai la patch in "$HOME/Patch/nautilus" ("$HOME" è la cartella principale del tuo utente, quindi se l'utente si chiama “gianni” il percorso sarà "/home/gianni/Patch/nautilus").
3. Assicurati che la patch sia effettivamente dove dovrebbe trovarsi:
Codice: Seleziona tutto
if [ -f "$HOME/Patch/nautilus/allow-direct-script-execution.patch" ]; then echo -e "\033[92mOK: la patch è al suo posto, puoi proseguire.\033[39m"; else echo -e "\033[91mERRORE: la patch non è stata trovata o non è un file.\033[39m"; fi
4. Abilita i repository del codice sorgente e installa il necessario per generare i pacchetti deb:
Codice: Seleziona tutto
sudo sed -i 's/^# deb-src/deb-src/' /etc/apt/sources.list
sudo apt update
sudo apt install devscripts
sudo apt build-dep nautilus
5. Applica la patch al codice sorgente del programma, installa i pacchetti generati, e infine chiedi l'interruzione del processo di Nautilus (in modo da poter eseguire la versione a cui è stata applicata la patch):
Codice: Seleziona tutto
tmpdir="$(mktemp -d --suffix=-patch-nautilus)"
cd "$tmpdir"
apt source nautilus
for entry in nautilus-*; do [ -d "$entry" ] && cd "$entry"; done # change directory to, for example, "nautilus-42.6"
patch -p1 <"$HOME/Patch/nautilus/allow-direct-script-execution.patch"
EMAIL="$USER@localhost" debchange --local "-userpatched" --urgency low "Apply patch to allow direct script execution."
DEB_BUILD_OPTIONS=nocheck debuild -b -uc -us -jauto
sudo debi
\rm -r "$tmpdir" ####
pkill nautilus
Nota: ogni volta che Nautilus verrà aggiornato, il codice suindicato (da “tmpdir” a “pkill nautilus”
* per capirci) andrà rieseguito per modificare nuovamente il programma. Per cui può essere una buona idea salvare questo codice in uno script, così da poterlo eseguire agevolmente quando ce ne sarà bisogno.
* In realtà, “pkill nautilus” (che serve a interrompere l'esecuzione del programma in questione) non è necessario se il Nautilus modificato è già in esecuzione; dunque, quest'ultima riga può tranquillamente essere omessa in uno script da utilizzare per le successive applicazioni della patch (ma ha comunque una sua utilità perché permette di caricare le nuove versioni del programma).
Se un giorno vorrai reinstallare il pacchetto senza patch:
Codice: Seleziona tutto
version="$(dpkg -l | grep "^ii nautilus " | awk '{ sub("-userpatched[0-9]+", ""); print $3 }')"
sudo apt reinstall "nautilus=$version" "libnautilus-extension1a=$version" "nautilus-data=$version" "gir1.2-nautilus-3.0=$version"
pkill nautilus
Considerazioni finali:
- Non è detto che questa sia la soluzione “migliore” (infatti, se devo essere sincero, neanch'io ho compreso al cento per cento il modo in cui operate), ma se non altro vi permette di fare ciò che hai chiesto.
- Effettuare e gestire modifiche al codice sorgente è senz'altro più semplice e immediato in distribuzioni come Gentoo.
- L'idea di albyCardu è sicuramente intelligente, però ha dei limiti su Ubuntu con Nautilus: infatti, per utilizzare direttamente il file desktop, questo dovrebbe trovarsi sulla Scrivania (oppure essere utilizzato dal lanciatore delle applicazioni o come applicazione preferita dalla dock, che potrebbe essere ancor più limitante).
- Un'altra soluzione, che non ho proposto intenzionalmente, sarebbe quella di associare i file di tipo “application/x-shellscript” a un file desktop che esegua la shell; ma non posso consigliarla perché permetterebbe di eseguire anche gli script che non hanno il permesso di esecuzione, e dal punto di vista della sicurezza non sarebbe di certo l'ideale.
P.S.: dimenticavo, la mia patch è applicabile sia alla versione di Nautilus 42.6, che a quella attualmente in sviluppo (e probabilmente è compatibile con tutte le versioni dalla 42.6 alla 46.0, in quanto non credo che nel mezzo siano stati fatti cambiamenti rilevanti a quella parte del codice).