
Ich schreibe ein Bash-Skript und prüfe, ob die Anwendung läuft. Wenn sie nicht läuft, sollte sie in einem separaten Prozess (kein untergeordneter Prozess) gestartet werden. Wenn sie läuft, sollte das Fenster maximiert sein. Ich habe es irgendwie geschafft, aber der neue Prozess wird kurz nach dem Start beendet, wahrscheinlich weil der Skriptprozess endet. Wenn ich es nicht über & im Hintergrund laufen lasse, wird die App nicht geschlossen, aber dann kann ich das Skript kein zweites Mal ausführen, um die App zu maximieren.
#!/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
Wenn ich es in einem Terminal ausführe, funktioniert es einwandfrei. Wenn ich es über die udev-Regel aufrufe, wird die App beendet. Die Verwendung von nohup führt zum gleichen Ergebnis. Hier ist die udev-Regel
ACTION=="add" \
, KERNEL=="hci0:3585" \
, SUBSYSTEM=="bluetooth" \
, ENV{DISPLAY}=":0" \
, ENV{HOME}="/home/user"
, RUN+="/home/user/runapp"
Antwort1
Ich habe hier endlich einen Workaround gefunden. Man braucht ein zweites Skript, das enthält
#!/bin/bash
echo /pathto/runApp | at now
Dieses Skript muss von der udev-Regel aufgerufen werden. Damit es funktioniert, at
muss es installiert sein und Sie müssen es atd
durch einen Aufruf aktivieren sudo systemctl enable atd --now
. Es ist ein bisschen umständlich, aber es funktioniert zumindest.
Ich habe den systemd-Ansatz gelöscht, damit der Beitrag eine einfachere Anleitung darstellt.