Je recommanderais de remplacer le lien vers le programme par un lien vers un script shell qui vérifie si le programme est en cours d'exécution, et si c'est le cas, il utilise la fonction du gestionnaire de fenêtres pour mettre le programme en premier, et si ce n'est pas le cas, le démarre .
J'ai trouvé ce fil et l'ai implémenté, en partageant ma version.
J'ai créé un fichier exécutable /usr/local/bin/run_once.sh
contenant
#! /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
Cela vérifie en utilisant wmctrl
si l'application que vous essayez de démarrer a déjà une fenêtre ouverte (certains programmes d'interface graphique maintiennent les travailleurs sans interface graphique en cours d'exécution) au lieu d'utiliser ps
, en utilisant -x pour utiliser le WM_CLASS
au lieu du nom de la barre de titre.
Pour chaque programme dont je ne veux qu'une seule fenêtre j'ai copié le système .desktop
fichier en ~/.local/share/applications
et changé le exec
champ de exec=program --arguments
à exec=/usr/local/bin/run_once.sh program --arguments
Généralement, le code source de l'application doit être modifié. Ce n'est pas quelque chose fait par le système d'exploitation.