Я нашел эту ветку и реализовал ее, поделившись своей версией.
Я создал исполняемый файл /usr/local/bin/run_once.sh содержащий
#! /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
$@
fi
Это проверяет с помощью wmctrl , что приложение, которое вы пытаетесь запустить, уже имеет открытое окно (некоторые программы с графическим интерфейсом поддерживают рабочих без графического интерфейса ) вместо использования ps , используя -x для использования WM_CLASS вместо имени строки заголовка.
Для каждой программы , которую я только хочу один окно я скопировал систему .desktop файл в ~/.local/share/applications и изменил exec поле от exec=program --arguments для exec=/usr/local/bin/run_once.sh program --arguments