
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 at
tem que estar instalado e você tem que habilitar atd
chamando 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.