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
example@unixlinux.online
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.