Recomendaría reemplazar el enlace al programa con un enlace a un script de shell que verifica si el programa se está ejecutando y, si es así, usa la función del administrador de ventanas para destacar el programa y, si no es así, lo inicia. .
Encontré este hilo y lo implementé, compartiendo mi versión.
Creé un archivo ejecutable /usr/local/bin/run_once.sh
que contiene
#! /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
Esto comprueba usando wmctrl
si la aplicación que está tratando de iniciar ya tiene una ventana abierta (algunos programas de interfaz gráfica de usuario mantienen a los trabajadores sin una interfaz gráfica de usuario en ejecución) en lugar de usar ps
, usando -x para usar el WM_CLASS
en lugar del nombre de la barra de título.
Para cada programa del que solo quiero una ventana copié el sistema .desktop
archivo a ~/.local/share/applications
y cambió el exec
campo de exec=program --arguments
a exec=/usr/local/bin/run_once.sh program --arguments
Generalmente, el código fuente de la aplicación debe modificarse. No es algo hecho por el sistema operativo.