Script per creare file .desktop da Nautilus

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
Duke_Fleed
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 277
Iscrizione: domenica 2 agosto 2009, 15:41
Desktop: Gnome
Distribuzione: EndeavourOS, Ubuntu 24.04.2
Sesso: Maschile

Script per creare file .desktop da Nautilus

Messaggio da Duke_Fleed »

Ciao a tutti.

Siccome ultimamente mi è capitato spesso di creare file .desktop manualmente, ho deciso di fare uno script in bash per fare prima. L'ho voluto fare con una gui, e ho scelto yad che non avevo mai usato perché mi ha permesso di fare l'interfaccia come volevo (con zenity i campi del form non erano come volevo io). Yad, fork di zenity, è molto vasto, ma grazie a questa guida trovata in rete https://yad-guide.ingk.se/index.html ho avuto un grande aiuto e poi fortunatamente avevo già le idee chiare di come farlo.

Lo script (CreaFiledesktop) va copiato in ~/.local/share/nautilus/scripts e reso eseguibile. L'unica dipendenza è appunto yad, basta che lo installate prima di usarlo. Per l'uso basta selezionare un programma che non ha file .desktop (a me è successo recentemente con FS-UAE), e poi eseguire lo script da Nautilus.

Immagine

Lo script è fatto in modo che i campi Nome, Comando, Icona, siano già compilati ma sono ovviamente editabili. Anzi, volendo si può anche creare il file .desktop per un altro programma editando i campi del form (non lo raccomando però, per il semplice fatto che facendo così "salta" i controlli degli errori che lo script fa all'inizio. Il campo Comando dovrebbe essere editato solo nel caso rarissimo che il path dell'eseguibile sia sbagliato). L'interfaccia come si vede assomiglia a Alacarte o al vecchio programma che c'era su Unity (gnome-desktop-item-edit). Io ho aggiunto in più la possibilità di creare anche una scorciatoia sulla Scrivania :D e naturalmente per usufruirne su gnome dovete installare l'estensione Desktop Icon NG (DING) che su Ubuntu 24.04 è installata di default.

Lo script l'ho testato su Ubuntu 20.04 e 24.04 (Virtualbox)

Ecco il codice:

Codice: Seleziona tutto

#!/bin/bash

# ** Crea file desktop **

# Copiare lo script in ~/.local/share/nautilus/scripts/ e renderlo eseguibile.
# Installare poi yad prima di usarlo.

# Ricava il path completo del file selezionato
file="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"

# Con il comando basename si ricava da $file il nome dell'eseguibile.
# Le doppie virgolette sono necessarie nel caso in $file ci siano degli spazi
nome=$(basename "${file}")

# Path di dove verrà salvato il file .desktop 
path="$HOME/.local/share/applications/"

# Controllo degli errori. Se li trova esce dallo script
if ! [[ -f $nome ]]; then
  yad --image=dialog-error --text="Non è un file quello che hai selezionato!" --title="Errore" \
  --buttons-layout=center --button="Chiudi"
  exit 1
fi

if ! [[ -x $nome ]]; then
  yad --image=dialog-error --text="Devi selezionare un file eseguibile!" --title="Errore" \
  --buttons-layout=center --button="Chiudi"
  exit 1
fi

# Gui del programma (form con vari campi)
var=$(yad --image=applications-system --form --separator="," --title="Creazione file .desktop" \
--field="Nome:" --field="Comando:":SFL --field="Icona:":SFL --field="Commento:" \
--field="Scorciatoia sulla Scrivania":CHK "$nome" "$file" "$nome" "" FALSE \
--button="gtk-cancel:1" --button="gtk-ok:0" --width=500)

# Se clicca su 'Annulla' esce dallo script
if [[ $? != 0 ]]; then
  exit 1
fi

# assegnazione dei campi del form alle rispettive variabili
nome=$(echo $var | awk 'BEGIN {FS="," } { print $1 }')
comando=$(echo $var | awk 'BEGIN {FS="," } { print $2 }')
icona=$(echo $var | awk 'BEGIN {FS="," } { print $3 }')
commento=$(echo $var | awk 'BEGIN {FS="," } { print $4 }')
scorciatoia=$(echo $var | awk 'BEGIN {FS="," } { print $5 }')

# Se esiste già un file .desktop con lo stesso nome lo rinomina con suffisso .bak
if [ -f "$path$nome.desktop" ]; then
  mv "$path$nome.desktop" "$path$nome.desktop.bak"
fi

# Crea il file .desktop
destinazione="$path$nome.desktop"
echo "[Desktop Entry]" > "$destinazione"
echo "Name=$nome" >> "$destinazione"
echo "Exec=$comando" >> "$destinazione"
echo "Comment=$commento" >> "$destinazione"
echo "Terminal=false" >> "$destinazione"
echo "Icon=$icona" >> "$destinazione"
echo "Type=Application" >> "$destinazione"
echo "NoDisplay=false" >> "$destinazione"

# Crea la scorciatoia sulla Scrivania se ha spuntato l'opzione nel form
if [ "$scorciatoia" = TRUE ]; then
  ln -s $path$nome.desktop $HOME/Scrivania/$nome.desktop
fi
Spero possa servire a qualcuno :)

:ciao:


Edit: Aggiunta immagine della gui
Ultima modifica di Duke_Fleed il sabato 9 novembre 2024, 11:12, modificato 1 volta in totale.
Guide all'emulazione di Amiga e dell'Amstrad CPC
Un semplice script per creare file .desktop da Nautilus
nicNiz
Prode Principiante
Messaggi: 82
Iscrizione: domenica 4 ottobre 2020, 20:31

Re: Script per creare file .desktop da Nautilus

Messaggio da nicNiz »

Questo Yad non lo conoscevo, buona scoperta.
Peccato che gli esempi riportati nel sito siano tutti in 🤮 Bash 🤮.
Per i file desktop ho sempre usato un semplice file di modello in cui basta modificare i campi, ma certamente chi deve crearne di frequente va meglio con uno script grafico.
Il mio Linguaggio di scripting dichiarativo
https://dunocode.altervista.org
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: Bing [Bot] e 5 ospiti