¿Por qué falla mi script cuando se ejecuta desde udev?

¿Por qué falla mi script cuando se ejecuta desde udev?

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 attiene que estar instalado y hay que habilitarlo atdllamando 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.

información relacionada