
Estoy escribiendo un script bash y comprobando si la aplicación se está ejecutando. Si no se está ejecutando, debe iniciarse en un proceso separado (no en un proceso secundario). Si se está ejecutando, la ventana debe estar maximizada. En cierto modo lo logré, pero el nuevo proceso finaliza poco después de iniciarse, probablemente porque finaliza el proceso del script. Cuando no lo ejecuto en segundo plano a través de &, la aplicación no se cierra, pero luego no puedo ejecutar el script por segunda vez para maximizar la aplicación.
#!/bin/bash
if pgrep app
then
echo app is running
# Maximize the app
wmctrl -x -r WMClassOfapp -b "add,maximized_vert,maximized_horz"
else
echo app is not running
/usr/bin/app
fi
Cuando lo ejecuto en una terminal, funciona bien. Cuando lo llamo desde la regla udev, la aplicación finaliza. Usar nohup produce el mismo resultado. Aquí está la regla udev.
ACTION=="add" \
, KERNEL=="hci0:3585" \
, SUBSYSTEM=="bluetooth" \
, ENV{DISPLAY}=":0" \
, ENV{HOME}="/home/user"
, RUN+="/home/user/runapp"
Respuesta1
Por fin encontré una solución aquí. Necesita un segundo script que contenga
#!/bin/bash
echo /pathto/runApp | at now
Este script debe llamarse desde la regla udev. Para que funcione at
tiene que estar instalado y hay que habilitarlo atd
llamando sudo systemctl enable atd --now
. Es un poco complicado, pero al menos funciona.
Eliminé el enfoque systemd para que la publicación sea una guía más sencilla.