Por que meu script falha ao executar no udev?

Por que meu script falha ao executar no udev?

Estou escrevendo um script bash e verificando se o aplicativo está em execução. Se não estiver em execução, deverá ser iniciado em um processo separado (não em um processo filho). Se estiver em execução, a janela deverá estar maximizada. Eu meio que consegui, mas o novo processo termina logo após ser iniciado, provavelmente porque o processo do script termina. Quando não o executo em segundo plano via &, o aplicativo não fecha, mas não consigo executar o script uma segunda vez para maximizar o aplicativo.

#!/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

Quando executo em um terminal, funciona bem. Quando eu chamo da regra do udev, o aplicativo é encerrado. Usar nohup produz o mesmo resultado. Aqui está a regra do udev

ACTION=="add" \
, KERNEL=="hci0:3585" \
, SUBSYSTEM=="bluetooth" \
, ENV{DISPLAY}=":0" \
, ENV{HOME}="/home/user"
, RUN+="/home/user/runapp"

Responder1

Finalmente encontrei uma solução alternativa aqui. Você precisa de um segundo script que contenha

#!/bin/bash
echo /pathto/runApp | at now

Este script deve ser chamado a partir da regra do udev. Para funcionar attem que estar instalado e você tem que habilitar atdchamando sudo systemctl enable atd --now. É um pouco hackeado, mas pelo menos funciona.

Excluí a abordagem systemd para que a postagem seja um guia mais fácil.

informação relacionada