Utilizzo di StartupWMClass per le applicazioni in esecuzione in un terminale

Oct 04 2020

In 18.04 avevo un launcher nel Dash per eseguire un'applicazione in un terminale con il Dash che mostrava un punto indicatore per il launcher quando era in esecuzione, piuttosto che un indicatore per il generico launcher del terminale (in questo modo sono stato in grado di trovarlo se altre finestre di terminale sono aperte). Sono stato in grado di utilizzare l'opzione --class nella voce Exec insieme a StartupWMClass per ottenere questo risultato.

Nella 20.04 il launcher non funziona in quanto viene aperto un terminale, l'applicazione tenta di avviarsi e poi il terminale si chiude. Ho cercato su Google e ci sono alcune chiacchiere sull'opzione --class che è stata deprezzata. Se elimino l'opzione --class, il programma di avvio funziona, ma il punto indicatore è attaccato al programma di avvio generico del terminale.

Ecco il file .desktop prima di eliminare l'opzione --class

[Desktop Entry]
Version=1.0
Type=Application
Terminal=true
Encoding=UTF-8
StartupNotify=true
Icon[en_US]=sage-terminal
Icon=sage-terminal
Exec=/home/rquint/Sage/SageMath/sage --class=SageTerminal
StartupWMClass=SageTerminal
Name=SageTerminal
Name[en_US]=SageTerminal
Actions=SageDocumentation;

[Desktop Action SageDocumentation]
Name=Sage Documentation
Exec=firefox /home/rquint/Sage/SageMath/local/share/doc/sage/html/en/index.html

Risposte

1 RichardQuint Oct 06 2020 at 00:10

Questa non è una soluzione perfetta, ma per ora funziona. Cercando su Google ho trovato quanto segue

https://itectec.com/ubuntu/ubuntu-how-to-make-a-custom-launcher-for-terminal-applications/

che mostra come avviare un'applicazione in un terminale sebbene il programma di avvio utilizzi Terminal = false. In sostanza stai lanciando un emulatore di terminale che poi esegue l'applicazione. Ci sono due possibili trucchi con questo metodo. In primo luogo, chiama specificamente un particolare emulatore di terminale; secondo, l'opzione --class è ammortizzata e potrebbe non funzionare in futuro.

Quindi, per ora (Ubuntu 20.04.1 e Gnome 3.36.3), ho sostituito le righe

Terminal=true
Exec=/home/rquint/Sage/SageMath/sage --class=SageTerminal

con

Terminal=false
Exec=gnome-terminal --class=SageTerminal -e /home/rquint/Sage/SageMath/sage

e avere il comportamento che desideravo.