linux-assistant icon indicating copy to clipboard operation
linux-assistant copied to clipboard

Wayland: Can't focus and raise window

Open Jean28518 opened this issue 3 years ago • 4 comments

Because of wayland.

Added an issue here: https://github.com/leanflutter/hotkey_manager/issues/21

Possible workaround: Add custom Hotkey to gnome settings to wether start application or to open it up with wmctrl -a linux_assistant

Jean28518 avatar Oct 28 '22 09:10 Jean28518

This Workaround doesn't help, because, wmctrl -l doesn't work on wayland... https://unix.stackexchange.com/questions/399753/how-to-get-a-list-of-active-windows-when-using-wayland

Maybe we can see the running processes and depending on them we can choose if we call wmctrl -aor to start a new instance of linux-assistant...

Jean28518 avatar Nov 24 '22 21:11 Jean28518

wmctrl -a doesn't work. Currently can't find a nice fix for it. I guess we need to call gdbus for that which is very complicated.

For now I implement a workaround, that the app closes automatically after opening an entry and calling minimize.

Jean28518 avatar Nov 24 '22 22:11 Jean28518

Das geht mit wenn nur eine linux-assistant ist er nur imintergrund aktiv und an kann mit STRG Q es aufrunten oder mt dem sykript start_linux_assitant.sh danach laufen mehere. stopen kann man über die oberflache normal oder t dem skript stop_linux_assitant.sh ps aux | grep linux-assistant georg 170771 0.0 0.0 6588 1664 pts/1 S+ 16:30 0:00 grep --color=auto linux-assistant georg@georg-pc:~$ ^C georg@georg-pc:~$ ps aux | grep linux-assistant georg 171029 0.0 0.0 7364 2560 ? S 16:33 0:00 /bin/bash /usr/bin/linux-assistant georg 171034 39.4 1.5 2160764 120916 ? Sl 16:33 0:02 /usr/lib/linux-assistant/linux-assistant georg 171219 0.0 0.0 6588 1664 pts/1 S+ 16:33 0:00 grep --color=auto linux-assistant georg@georg-pc:~$

https://github.com/Jean28518/linux-assistant/blob/v0.5.3/linux-assistant.sh das müsste angepasst werden , so das bei Wayland nicht mehr die Anwendung nicht mehr geschlossen werden muss sondern so wie mit x11 lief. Der Puffer https://github.com/Jean28518/linux-assistant/issues/36 braucht man nicht, da es nur bei dem ersten starten der Anwendung passiert und danach durchlaufen kann bis der benutzer es schliest. if wmctrl -l | grep -q 'Linux Assistant'; then wmctrl -a 'Linux Assistant' else "$APP_DIR/linux-assistant" fi

georg@georg-pc:~$ cat start_linux_assitant.sh #!/bin/bash

Pfad zur Linux Assistant-Anwendung

APP_PATH="/usr/lib/linux-assistant/linux-assistant"

Überprüfen, ob die Anwendung bereits läuft

if pgrep -x "linux-assistant" > /dev/null; then echo "Linux Assistant läuft bereits." else # Anwendung starten $APP_PATH & echo "Linux Assistant gestartet." fi georg@georg-pc:~$ cat stop_linux_assitant.sh #!/bin/bash

Prozess-IDs der Linux Assistant-Prozesse ermitteln

PIDS=$(ps aux | grep linux-assistant | awk '{print $2}')

Überprüfen, ob Prozesse gefunden wurden

if [ -z "$PIDS" ]; then echo "Keine Linux Assistant-Prozesse gefunden." exit 0 fi

Jeden Prozess einzeln beenden

for PID in $PIDS; do echo "Beende Prozess mit PID $PID..." kill -15 $PID # Sanftes Beenden mit SIGTERM (15) sleep 1 # Kurze Pause, um dem Prozess Zeit zum Beenden zu geben done

Überprüfen, ob noch Prozesse laufen

REMAINING_PIDS=$(ps aux | grep linux-assistant | awk '{print $2}')

Eventuell verbliebene Prozesse erzwungen beenden

if [ -n "$REMAINING_PIDS" ]; then echo "Erzwungenes Beenden der verbleibenden Prozesse..." kill -9 $REMAINING_PIDS # Erzwungenes Beenden mit SIGKILL (9) fi

echo "Alle Linux Assistant-Prozesse beendet." georg@georg-pc:~$ ./start_linux_assitant.sh Linux Assistant läuft bereits. georg@georg-pc:~$ ./stop_linux_assitant.sh Beende Prozess mit PID 167790... Beende Prozess mit PID 169143... ./stop_linux_assitant.sh: Zeile 15: kill: (169143) - Kein passender Prozess gefunden Erzwungenes Beenden der verbleibenden Prozesse... ./stop_linux_assitant.sh: Zeile 25: kill: (169157) - Kein passender Prozess gefunden Alle Linux Assistant-Prozesse beendet. georg@georg-pc:~$ ./start_linux_assitant.sh Linux Assistant gestartet. georg@georg-pc:~$ flutter: Run python script: python3 [/usr/lib/linux-assistant/additional/python/run_script.py, get_environment.py] flutter: Running linux command: /usr/bin/python3 with arguments: [/usr/lib/linux-assistant/additional/python/run_script.py, get_environment.py] flutter: Running linux command: /usr/bin/id with arguments: [-u] flutter: Running linux command: /usr/bin/id with arguments: [-nu, 1000] flutter: Running linux command: /usr/bin/groups with arguments: [] flutter: Running linux command: /usr/bin/glxinfo with arguments: [-B] flutter: Running linux command: /usr/bin/lshw with arguments: [] flutter: WARNUNG: Sie sollten dieses Programm mit Systemverwalterrechten (root) ausführen. WARNUNG: Ausgabe kann unvollständig oder fehlerhaft werden, Sie sollten dieses Programm mit Systemverwalterrechten (root) ausführen.

flutter: Running linux command: /usr/bin/lspci with arguments: [-nnk] flutter: Running linux command: /usr/bin/gsettings with arguments: [get, org.gnome.desktop.interface, gtk-theme] flutter: Running linux command: /usr/bin/gsettings with arguments: [get, org.gnome.desktop.interface, color-scheme]

** (linux-assistant:169171): WARNING **: 16:16:40.616: Binding '<Meta>q' failed!

** (linux-assistant:169171): WARNING **: 16:16:45.630: Binding '<Meta>q' failed! flutter: Loading basic folders flutter: Running linux command: /usr/bin/python3 with arguments: [/usr/lib/linux-assistant/additional/python/get_folder_structure.py, --recursion_depth=5] flutter: Loading applications flutter: Running linux command: /usr/bin/python3 with arguments: [/usr/lib/linux-assistant/additional/python//get_applications.py, --lang=de, --desktop=DESKTOPS.GNOME] flutter: Loading recently used files and folders flutter: Run python script: python3 [/usr/lib/linux-assistant/additional/python/run_script.py, get_recent_files.py] flutter: Running linux command: /usr/bin/python3 with arguments: [/usr/lib/linux-assistant/additional/python/run_script.py, get_recent_files.py] flutter: Loading favorite files and folder bookmarks flutter: Run python script: python3 [/usr/lib/linux-assistant/additional/python/run_script.py, get_favorite_files.py] flutter: Running linux command: /usr/bin/python3 with arguments: [/usr/lib/linux-assistant/additional/python/run_script.py, get_favorite_files.py] flutter: Loading browser bookmarks flutter: Run python script: python3 [/usr/lib/linux-assistant/additional/python/run_script.py, get_bookmarks.py] flutter: Running linux command: /usr/bin/python3 with arguments: [/usr/lib/linux-assistant/additional/python/run_script.py, get_bookmarks.py] flutter: Loading flatpaks flutter: Running linux command: /usr/bin/flatpak with arguments: [list, --app, --columns=application] flutter: Loading uninstall entries flutter: Running linux command: /usr/bin/dpkg with arguments: [--get-selections] flutter: Running linux command: /usr/bin/flatpak with arguments: [list, --app, --columns=application,name,description] flutter: Running linux command: /usr/bin/snap with arguments: [list] flutter: Running linux command: /usr/bin/cat with arguments: [/home/georg//.config/gtk-3.0/bookmarks] flutter: Loading recently used files and folders flutter: Finished: search_filter_recently_used_files_and_folders flutter: Removing disabled entries flutter: Initiating configHandler flutter: Running linux command: /usr/bin/df with arguments: [-h] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m]

eine beschreibung von .perplexity. was da passiert Um alle drei Prozesse der Linux Assistant-Anwendung über ein Skript zu beenden, können Sie folgendes Bash-Skript verwenden:

#!/bin/bash

# Prozess-IDs der Linux Assistant-Prozesse ermitteln
PIDS=$(ps aux | grep linux-assistant | awk '{print $2}')

# Überprüfen, ob Prozesse gefunden wurden
if [ -z "$PIDS" ]; then
    echo "Keine Linux Assistant-Prozesse gefunden."
    exit 0
fi

# Jeden Prozess einzeln beenden
for PID in $PIDS; do
    echo "Beende Prozess mit PID $PID..."
    kill -15 $PID # Sanftes Beenden mit SIGTERM (15)
    sleep 1 # Kurze Pause, um dem Prozess Zeit zum Beenden zu geben
done

# Überprüfen, ob noch Prozesse laufen
REMAINING_PIDS=$(ps aux | grep linux-assistant | awk '{print $2}')

# Eventuell verbliebene Prozesse erzwungen beenden
if [ -n "$REMAINING_PIDS" ]; then
    echo "Erzwungenes Beenden der verbleibenden Prozesse..."
    kill -9 $REMAINING_PIDS # Erzwungenes Beenden mit SIGKILL (9)
fi

echo "Alle Linux Assistant-Prozesse beendet."

Hier ist eine Erklärung, was das Skript macht:

  1. Zuerst werden mit ps aux | grep linux-assistant | awk '{print $2}' die Prozess-IDs (PIDs) aller laufenden Linux Assistant-Prozesse ermittelt und in der Variable PIDS gespeichert.

  2. Wenn keine Prozesse gefunden wurden, wird eine Meldung ausgegeben und das Skript beendet.

  3. Ansonsten wird mit einer for-Schleife über alle gefundenen PIDs iteriert.

    • Für jeden Prozess wird eine Meldung ausgegeben und der Prozess mit kill -15 $PID sanft beendet (SIGTERM).
    • Nach einer kurzen Pause von 1 Sekunde, um dem Prozess Zeit zum Beenden zu geben, wird mit der nächsten PID fortgefahren.
  4. Nach der Schleife werden erneut die verbleibenden Linux Assistant-Prozess-IDs ermittelt.

  5. Wenn noch Prozesse laufen, werden diese mit kill -9 $REMAINING_PIDS erzwungen beendet (SIGKILL).

  6. Abschließend wird eine Meldung ausgegeben, dass alle Prozesse beendet wurden.

Um das Skript auszuführen, speichern Sie es z.B. als kill_linux_assistant.sh und machen es ausführbar mit chmod +x kill_linux_assistant.sh. Dann können Sie es mit ./kill_linux_assistant.sh starten.

Beachten Sie, dass dieses Skript alle Linux Assistant-Prozesse beendet, unabhängig davon, von welchem Benutzer sie gestartet wurden. Wenn Sie nur die eigenen Prozesse beenden möchten, müssen Sie die ps-Ausgabe entsprechend filtern.

Citations: [1] https://github.com/Jean28518/linux-assistant/ [2] https://github.com/Jean28518/linux-assistant/blob/v0.5.3/linux-assistant.sh [3] https://github.com/Jean28518/linux-assistant/issues/24 [4] https://be-jo.net/2013/11/4-wege-einen-prozess-zu-beenden-kill-pkill-killall-xkill/ [5] https://pimylifeup.com/linux-kill-process/

Teil 2 der Beschreibung Hier ist ein Bash-Skript, das die Linux Assistant-Anwendung startet, wenn sie noch nicht läuft. Wenn sie bereits läuft, wird keine weitere Instanz gestartet:

#!/bin/bash

# Pfad zur Linux Assistant-Anwendung
APP_PATH="/usr/lib/linux-assistant/linux-assistant"

# Überprüfen, ob die Anwendung bereits läuft
if pgrep -x "linux-assistant" > /dev/null; then
    echo "Linux Assistant läuft bereits."
else
    # Anwendung starten
    $APP_PATH &
    echo "Linux Assistant gestartet."
fi

Erklärung:

  1. Zuerst wird der Pfad zur ausführbaren Datei der Linux Assistant-Anwendung in der Variable APP_PATH gespeichert.

  2. Mit dem Befehl pgrep -x "linux-assistant" wird überprüft, ob ein Prozess mit dem exakten Namen "linux-assistant" läuft. Die Option -x stellt sicher, dass nur Prozesse mit dem exakten Namen gezählt werden.

    • Wenn der Befehl erfolgreich ist (Exitcode 0), bedeutet dies, dass die Anwendung bereits läuft.
    • Die Ausgabe von pgrep wird mit > /dev/null in die leere Datei /dev/null umgeleitet, um sie zu unterdrücken.
  3. Wenn die Anwendung bereits läuft, wird eine Meldung ausgegeben.

  4. Andernfalls wird die Anwendung mit $APP_PATH & im Hintergrund gestartet, und eine Meldung über den Start ausgegeben.

Um das Skript auszuführen, speichern Sie es z.B. als start_linux_assistant.sh und machen es ausführbar mit chmod +x start_linux_assistant.sh. Dann können Sie es mit ./start_linux_assistant.sh starten.

Beachten Sie, dass dieses Skript davon ausgeht, dass die Linux Assistant-Anwendung unter dem angegebenen Pfad /usr/lib/linux-assistant/linux-assistant installiert ist. Passen Sie den Pfad entsprechend Ihrer Installation an.

Dieses Skript stellt sicher, dass nur eine Instanz der Linux Assistant-Anwendung gleichzeitig läuft, indem es zuerst überprüft, ob die Anwendung bereits ausgeführt wird, bevor eine neue Instanz gestartet wird.

Citations: [1] https://github.com/Jean28518/linux-assistant/ [2] https://github.com/Jean28518/linux-assistant/blob/v0.5.3/linux-assistant.sh [3] https://github.com/Jean28518/linux-assistant/issues/24 [4] https://be-jo.net/2013/11/4-wege-einen-prozess-zu-beenden-kill-pkill-killall-xkill/ [5] https://opensource.com/article/18/5/how-kill-process-stop-program-linux

georg41980 avatar May 22 '24 14:05 georg41980

Das geht mit wenn nur eine linux-assistant ist er nur imintergrund aktiv und an kann mit STRG Q es aufrunten oder mt dem sykript start_linux_assitant.sh danach laufen mehere. stopen kann man über die oberflache normal oder t dem skript stop_linux_assitant.sh ps aux | grep linux-assistant georg 170771 0.0 0.0 6588 1664 pts/1 S+ 16:30 0:00 grep --color=auto linux-assistant georg@georg-pc:~$ ^C georg@georg-pc:~$ ps aux | grep linux-assistant georg 171029 0.0 0.0 7364 2560 ? S 16:33 0:00 /bin/bash /usr/bin/linux-assistant georg 171034 39.4 1.5 2160764 120916 ? Sl 16:33 0:02 /usr/lib/linux-assistant/linux-assistant georg 171219 0.0 0.0 6588 1664 pts/1 S+ 16:33 0:00 grep --color=auto linux-assistant georg@georg-pc:~$

https://github.com/Jean28518/linux-assistant/blob/v0.5.3/linux-assistant.sh das müsste angepasst werden , so das bei Wayland nicht mehr die Anwendung nicht mehr geschlossen werden muss sondern so wie mit x11 lief. Der Puffer https://github.com/Jean28518/linux-assistant/issues/36 braucht man nicht, da es nur bei dem ersten starten der Anwendung passiert und danach durchlaufen kann bis der benutzer es schliest. if wmctrl -l | grep -q 'Linux Assistant'; then wmctrl -a 'Linux Assistant' else "$APP_DIR/linux-assistant" fi

georg@georg-pc:~$ cat start_linux_assitant.sh #!/bin/bash

Pfad zur Linux Assistant-Anwendung

APP_PATH="/usr/lib/linux-assistant/linux-assistant"

Überprüfen, ob die Anwendung bereits läuft

if pgrep -x "linux-assistant" > /dev/null; then echo "Linux Assistant läuft bereits." else # Anwendung starten $APP_PATH & echo "Linux Assistant gestartet." fi georg@georg-pc:~$ cat stop_linux_assitant.sh #!/bin/bash

Prozess-IDs der Linux Assistant-Prozesse ermitteln

PIDS=$(ps aux | grep linux-assistant | awk '{print $2}')

Überprüfen, ob Prozesse gefunden wurden

if [ -z "$PIDS" ]; then echo "Keine Linux Assistant-Prozesse gefunden." exit 0 fi

Jeden Prozess einzeln beenden

for PID in $PIDS; do echo "Beende Prozess mit PID $PID..." kill -15 $PID # Sanftes Beenden mit SIGTERM (15) sleep 1 # Kurze Pause, um dem Prozess Zeit zum Beenden zu geben done

Überprüfen, ob noch Prozesse laufen

REMAINING_PIDS=$(ps aux | grep linux-assistant | awk '{print $2}')

Eventuell verbliebene Prozesse erzwungen beenden

if [ -n "$REMAINING_PIDS" ]; then echo "Erzwungenes Beenden der verbleibenden Prozesse..." kill -9 $REMAINING_PIDS # Erzwungenes Beenden mit SIGKILL (9) fi

echo "Alle Linux Assistant-Prozesse beendet." georg@georg-pc:~$ ./start_linux_assitant.sh Linux Assistant läuft bereits. georg@georg-pc:~$ ./stop_linux_assitant.sh Beende Prozess mit PID 167790... Beende Prozess mit PID 169143... ./stop_linux_assitant.sh: Zeile 15: kill: (169143) - Kein passender Prozess gefunden Erzwungenes Beenden der verbleibenden Prozesse... ./stop_linux_assitant.sh: Zeile 25: kill: (169157) - Kein passender Prozess gefunden Alle Linux Assistant-Prozesse beendet. georg@georg-pc:~$ ./start_linux_assitant.sh Linux Assistant gestartet. georg@georg-pc:~$ flutter: Run python script: python3 [/usr/lib/linux-assistant/additional/python/run_script.py, get_environment.py] flutter: Running linux command: /usr/bin/python3 with arguments: [/usr/lib/linux-assistant/additional/python/run_script.py, get_environment.py] flutter: Running linux command: /usr/bin/id with arguments: [-u] flutter: Running linux command: /usr/bin/id with arguments: [-nu, 1000] flutter: Running linux command: /usr/bin/groups with arguments: [] flutter: Running linux command: /usr/bin/glxinfo with arguments: [-B] flutter: Running linux command: /usr/bin/lshw with arguments: [] flutter: WARNUNG: Sie sollten dieses Programm mit Systemverwalterrechten (root) ausführen. WARNUNG: Ausgabe kann unvollständig oder fehlerhaft werden, Sie sollten dieses Programm mit Systemverwalterrechten (root) ausführen.

flutter: Running linux command: /usr/bin/lspci with arguments: [-nnk] flutter: Running linux command: /usr/bin/gsettings with arguments: [get, org.gnome.desktop.interface, gtk-theme] flutter: Running linux command: /usr/bin/gsettings with arguments: [get, org.gnome.desktop.interface, color-scheme]

** (linux-assistant:169171): WARNING **: 16:16:40.616: Binding '<Meta>q' failed!

** (linux-assistant:169171): WARNING **: 16:16:45.630: Binding '<Meta>q' failed! flutter: Loading basic folders flutter: Running linux command: /usr/bin/python3 with arguments: [/usr/lib/linux-assistant/additional/python/get_folder_structure.py, --recursion_depth=5] flutter: Loading applications flutter: Running linux command: /usr/bin/python3 with arguments: [/usr/lib/linux-assistant/additional/python//get_applications.py, --lang=de, --desktop=DESKTOPS.GNOME] flutter: Loading recently used files and folders flutter: Run python script: python3 [/usr/lib/linux-assistant/additional/python/run_script.py, get_recent_files.py] flutter: Running linux command: /usr/bin/python3 with arguments: [/usr/lib/linux-assistant/additional/python/run_script.py, get_recent_files.py] flutter: Loading favorite files and folder bookmarks flutter: Run python script: python3 [/usr/lib/linux-assistant/additional/python/run_script.py, get_favorite_files.py] flutter: Running linux command: /usr/bin/python3 with arguments: [/usr/lib/linux-assistant/additional/python/run_script.py, get_favorite_files.py] flutter: Loading browser bookmarks flutter: Run python script: python3 [/usr/lib/linux-assistant/additional/python/run_script.py, get_bookmarks.py] flutter: Running linux command: /usr/bin/python3 with arguments: [/usr/lib/linux-assistant/additional/python/run_script.py, get_bookmarks.py] flutter: Loading flatpaks flutter: Running linux command: /usr/bin/flatpak with arguments: [list, --app, --columns=application] flutter: Loading uninstall entries flutter: Running linux command: /usr/bin/dpkg with arguments: [--get-selections] flutter: Running linux command: /usr/bin/flatpak with arguments: [list, --app, --columns=application,name,description] flutter: Running linux command: /usr/bin/snap with arguments: [list] flutter: Running linux command: /usr/bin/cat with arguments: [/home/georg//.config/gtk-3.0/bookmarks] flutter: Loading recently used files and folders flutter: Finished: search_filter_recently_used_files_and_folders flutter: Removing disabled entries flutter: Initiating configHandler flutter: Running linux command: /usr/bin/df with arguments: [-h] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m] flutter: Running linux command: /usr/bin/free with arguments: [-m]

eine beschreibung von .perplexity. was da passiert Um alle drei Prozesse der Linux Assistant-Anwendung über ein Skript zu beenden, können Sie folgendes Bash-Skript verwenden:

#!/bin/bash

# Prozess-IDs der Linux Assistant-Prozesse ermitteln
PIDS=$(ps aux | grep linux-assistant | awk '{print $2}')

# Überprüfen, ob Prozesse gefunden wurden
if [ -z "$PIDS" ]; then
    echo "Keine Linux Assistant-Prozesse gefunden."
    exit 0
fi

# Jeden Prozess einzeln beenden
for PID in $PIDS; do
    echo "Beende Prozess mit PID $PID..."
    kill -15 $PID # Sanftes Beenden mit SIGTERM (15)
    sleep 1 # Kurze Pause, um dem Prozess Zeit zum Beenden zu geben
done

# Überprüfen, ob noch Prozesse laufen
REMAINING_PIDS=$(ps aux | grep linux-assistant | awk '{print $2}')

# Eventuell verbliebene Prozesse erzwungen beenden
if [ -n "$REMAINING_PIDS" ]; then
    echo "Erzwungenes Beenden der verbleibenden Prozesse..."
    kill -9 $REMAINING_PIDS # Erzwungenes Beenden mit SIGKILL (9)
fi

echo "Alle Linux Assistant-Prozesse beendet."

Hier ist eine Erklärung, was das Skript macht:

  1. Zuerst werden mit ps aux | grep linux-assistant | awk '{print $2}' die Prozess-IDs (PIDs) aller laufenden Linux Assistant-Prozesse ermittelt und in der Variable PIDS gespeichert.

  2. Wenn keine Prozesse gefunden wurden, wird eine Meldung ausgegeben und das Skript beendet.

  3. Ansonsten wird mit einer for-Schleife über alle gefundenen PIDs iteriert.

    • Für jeden Prozess wird eine Meldung ausgegeben und der Prozess mit kill -15 $PID sanft beendet (SIGTERM).
    • Nach einer kurzen Pause von 1 Sekunde, um dem Prozess Zeit zum Beenden zu geben, wird mit der nächsten PID fortgefahren.
  4. Nach der Schleife werden erneut die verbleibenden Linux Assistant-Prozess-IDs ermittelt.

  5. Wenn noch Prozesse laufen, werden diese mit kill -9 $REMAINING_PIDS erzwungen beendet (SIGKILL).

  6. Abschließend wird eine Meldung ausgegeben, dass alle Prozesse beendet wurden.

Um das Skript auszuführen, speichern Sie es z.B. als kill_linux_assistant.sh und machen es ausführbar mit chmod +x kill_linux_assistant.sh. Dann können Sie es mit ./kill_linux_assistant.sh starten.

Beachten Sie, dass dieses Skript alle Linux Assistant-Prozesse beendet, unabhängig davon, von welchem Benutzer sie gestartet wurden. Wenn Sie nur die eigenen Prozesse beenden möchten, müssen Sie die ps-Ausgabe entsprechend filtern.

Citations: [1] https://github.com/Jean28518/linux-assistant/ [2] https://github.com/Jean28518/linux-assistant/blob/v0.5.3/linux-assistant.sh [3] https://github.com/Jean28518/linux-assistant/issues/24 [4] https://be-jo.net/2013/11/4-wege-einen-prozess-zu-beenden-kill-pkill-killall-xkill/ [5] https://pimylifeup.com/linux-kill-process/

Teil 2 der Beschreibung Hier ist ein Bash-Skript, das die Linux Assistant-Anwendung startet, wenn sie noch nicht läuft. Wenn sie bereits läuft, wird keine weitere Instanz gestartet:

#!/bin/bash

# Pfad zur Linux Assistant-Anwendung
APP_PATH="/usr/lib/linux-assistant/linux-assistant"

# Überprüfen, ob die Anwendung bereits läuft
if pgrep -x "linux-assistant" > /dev/null; then
    echo "Linux Assistant läuft bereits."
else
    # Anwendung starten
    $APP_PATH &
    echo "Linux Assistant gestartet."
fi

Erklärung:

  1. Zuerst wird der Pfad zur ausführbaren Datei der Linux Assistant-Anwendung in der Variable APP_PATH gespeichert.

  2. Mit dem Befehl pgrep -x "linux-assistant" wird überprüft, ob ein Prozess mit dem exakten Namen "linux-assistant" läuft. Die Option -x stellt sicher, dass nur Prozesse mit dem exakten Namen gezählt werden.

    • Wenn der Befehl erfolgreich ist (Exitcode 0), bedeutet dies, dass die Anwendung bereits läuft.
    • Die Ausgabe von pgrep wird mit > /dev/null in die leere Datei /dev/null umgeleitet, um sie zu unterdrücken.
  3. Wenn die Anwendung bereits läuft, wird eine Meldung ausgegeben.

  4. Andernfalls wird die Anwendung mit $APP_PATH & im Hintergrund gestartet, und eine Meldung über den Start ausgegeben.

Um das Skript auszuführen, speichern Sie es z.B. als start_linux_assistant.sh und machen es ausführbar mit chmod +x start_linux_assistant.sh. Dann können Sie es mit ./start_linux_assistant.sh starten.

Beachten Sie, dass dieses Skript davon ausgeht, dass die Linux Assistant-Anwendung unter dem angegebenen Pfad /usr/lib/linux-assistant/linux-assistant installiert ist. Passen Sie den Pfad entsprechend Ihrer Installation an.

Dieses Skript stellt sicher, dass nur eine Instanz der Linux Assistant-Anwendung gleichzeitig läuft, indem es zuerst überprüft, ob die Anwendung bereits ausgeführt wird, bevor eine neue Instanz gestartet wird.

Citations: [1] https://github.com/Jean28518/linux-assistant/ [2] https://github.com/Jean28518/linux-assistant/blob/v0.5.3/linux-assistant.sh [3] https://github.com/Jean28518/linux-assistant/issues/24 [4] https://be-jo.net/2013/11/4-wege-einen-prozess-zu-beenden-kill-pkill-killall-xkill/ [5] https://opensource.com/article/18/5/how-kill-process-stop-program-linux

georg41980 avatar May 22 '24 14:05 georg41980