Doporučil bych nahradit odkaz na program odkazem na shellový skript, který zkontroluje, zda program běží, a pokud ano, použije funkci správce oken k uvedení programu do popředí, a pokud ne, spustí jej .
Našel jsem toto vlákno a implementoval jsem ho a sdílel svou verzi.
Vytvořil jsem spustitelný soubor /usr/local/bin/run_once.sh
obsahující
#! /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
Toto kontroluje pomocí wmctrl
pokud aplikace, kterou se pokoušíte spustit, již má otevřené okno (některé programy gui udržují pracovníky bez gui spuštěné) namísto použití ps
, pomocí -x použijte WM_CLASS
místo názvu titulního pruhu.
Pro každý program, ze kterého chci pouze jedno okno, jsem zkopíroval systém .desktop
soubor na ~/.local/share/applications
a změnil exec
pole od exec=program --arguments
na exec=/usr/local/bin/run_once.sh program --arguments
Obecně je nutné upravit zdrojový kód aplikace. Není to něco, co dělá operační systém.