Consiglierei di sostituire il collegamento al programma con un collegamento a uno script di shell che controlla se il programma è in esecuzione e, in caso affermativo, utilizza la funzione del gestore delle finestre per portare il programma in primo piano e, in caso contrario, lo avvia .
Ho trovato questo thread e l'ho implementato, condividendo la mia versione.
Ho creato un file eseguibile /usr/local/bin/run_once.sh
contenente
#! /bin/bash
application=$1
if wmctrl -xl | grep "${application}" > /dev/null ; then
# Already running, raising to front
wmctrl -x -R "$application"
else
# Not running: starting
[email protected]
fi
Questo controlla usando wmctrl
se l'applicazione che stai tentando di avviare ha già una finestra aperta (alcuni programmi gui mantengono i lavoratori senza gui in esecuzione) invece di usare ps
, usando -x per usare il WM_CLASS
invece del nome della barra del titolo.
Per ogni programma di cui voglio solo una finestra ho copiato il sistema .desktop
file in ~/.local/share/applications
e cambiato il exec
campo da exec=program --arguments
a exec=/usr/local/bin/run_once.sh program --arguments
Generalmente il codice sorgente dell'applicazione deve essere modificato. Non è qualcosa fatto dal sistema operativo.