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.

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

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


Edit: Aggiunta immagine della gui