Я нашел эту ветку и реализовал ее, поделившись своей версией.
Я создал исполняемый файл /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