staging.inyokaproject.org

GUI-Anwendung alle 10 Tage automatisch starten

Status: Ungelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 10978

Nur um da ein Verwirrung zu vermeiden: notify-send ist kein GUI-Programm, sondern ein Client, der über DBus mit dem Benachrichtigungsdienst kommuniziert, der seine API auf dem Session Bus anbietet - daher muss es das XDG_RUNTIME_DIR kennen.

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 2726

dingsbums schrieb:

Falls das Skript nach Schlafenlegen/Aufwachen nicht sauber weiterlaufen sollte und quasi abgeschossen und neu gestartet werden muss, hilft dieser Post weiter.

Ich hab' mir das jetzt mal angeguckt. Der 2. Lösungsvorschlag über eine systemd-Unit sieht vielversprechend aus. Statt wie dort den NetworkManager müsste ich statt dessen anacron starten, der dann gemäß der anacrontab Signal Desktop bei Bedarf startet. Da das alles unter roor läuft, müsste ich dann immer noch die Brücke zur User-Session bewerkstellen. Dafür könnte vielleicht der Vorschlag von user_unknown helfen. Aber ich sehe gerade, dass seahawk1986 dazu einen Einwand hat.

Meine eigene Idee ist nun, dass vielleicht folgender Befehl entweder einer solchen systemd-Unit oder in etc/cron.hourly/ funktionieren könnte:

sudo -u 1000 -H anacron -t ~/.anacron/anacrontab -S ~/.anacron/spool &> ~/.anacron/anacron.log

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 2726

Eine weitere Möglichkeit wäre vielleicht auch eine User Unit. Allerdings fehlen bei mir die dafür nötigen Speicherorte. Insofern wäre zu klären, ob da noch irgendwas unternommen werden muss, dass dort eingetragenen Units auch starten.

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

Allerdings fehlen bei mir die dafür nötigen Speicherorte.

Alle? Sollte nicht so sein, zumindest nicht der unter /etc. Ansonsten: wenn ein Verzeichnis nicht da ist → anlegen, Unit rein legen und aktivieren. Nicht vergessen: User Units laufen nur, wenn der Nutzer eingeloggt ist, zumindest in der Standardeinstellung. Solltest du dich also mal ausloggen, ohne den Rechner auszuschalten, dann wird die User Unit trotzdem gestoppt.

Gruß, noisefloor

dingsbums

Anmeldungsdatum:
13. November 2010

Beiträge: 3337

UlfZibis schrieb:

Hm, der Autostart startet doch nur einmal.

Ja und? Deswegen läuft das Prüfskript ja auch in einer Dauerschleife. Ich setze sowas hier ein um z.B. tagszeitabhängig die Bildschirmhelligkeit und -Farbe einzustellen.

dingsbums

Anmeldungsdatum:
13. November 2010

Beiträge: 3337

Hier mal als Grobgerüst zum Verfeinern bei Bedarf:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#! /bin/bash

pruefdatei="$HOME/.local/letzteranwendungsstart"
pruefintervall=600   # in sekunden
tage=10
anwendung="gnome-calculator" 


# evtl. existierenden skript-prozess für benutzer beenden (bei neuanmeldung)
scriptname=$(basename -- "$0" | cut -b 1-15)
if ps -eo pid,euser,comm | grep $USER | grep $scriptname | grep -v $$ >/dev/null;then
	kill $(ps -eo pid,euser,comm | grep $USER | grep $scriptname | grep -v $$ | awk '{print $1}')
fi


while [ true ]; do
   if [ -f "$pruefdatei" ];then

      echo "$pruefdatei existiert"

      zeit_jetzt="$(date +%s)"
      zeit_datei=$(stat --format='%Y' "$pruefdatei")

      echo "prüfe ob "$pruefdatei" älter als $tage tage ..."
      if [ ! "$zeit_datei" -gt "$((zeit_jetzt - 60*60*24*$tage))" ]; then
         echo "aelter"
         echo "aktualisiere $pruefdatei"
	 touch "$pruefdatei"
         echo "starte $anwendung ..."
         $anwendung &
      else
         echo "nicht aelter"         
      fi

   else
      echo "$pruefdatei existiert nicht"
      echo "erzeuge $pruefdatei"
      touch "$pruefdatei"
      echo "starte $anwendung ..."
      $anwendung &
   fi

   echo "warte $pruefintervall s"
   sleep $pruefintervall

done

Läuft hier auch nach einem Schlafenlegen per

sudo systemctl suspend

und Wiedererweckung brav weiter. Die Prüfdatei kannst du für einen Soforttest ja künstlich per touch altern

touch -t 202301011200 "$HOME/.local/letzteranwendungsstart"

Ich lege solche Skripte immer unter

/usr/local/bin

ab und starte sie mit passender *.desktop-Datei im Autostart des gewünschten Benutzerkontos oder für alle Benutzer unter /etc/xdg/autostart.

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 2726

noisefloor schrieb:

Alle? Sollte nicht so sein, zumindest nicht der unter /etc.

Ja stimmt, nur die im Homeverzeichnis fehlen.

Ansonsten: wenn ein Verzeichnis nicht da ist → anlegen, Unit rein legen und aktivieren.

mkdir -p .config/systemd/user
touch .config/systemd/user/signal-desktop.service 

Inhalt:

[Unit]
Description=Starts Signal Desktop GUI

[Service]
Type=simple
ExecStart=/usr/bin/gtk-launch signal-desktop

[Install]
WantedBy=default.target
$ systemctl --user enable signal-desktop.service 
Created symlink /home/ich/.config/systemd/user/default.target.wants/signal-desktop.service → /home/ich/.config/systemd/user/signal-desktop.service.
$ systemctl --user start signal-desktop.service

Jetzt hätte eigentlich Signal Desktop starten müssen, tut es aber nicht. Woran fehlt es noch?
Die Umgebungsvariablen sollten stimmen:

$ systemctl --user show --property Environment
Environment=HOME=/home/ich LANG=de_DE.UTF-8 LOGNAME=ich PATH=/usr/local/sbin:/usr/loc>

Wie man sieht, wird die Ausgabe im Terninal abgeschnitten. Wie kann ich da einen Zeilenumbruch veranlassen?

Wann das läuft müsste ich dann wohl noch die Timer-Unit basteln und starten.

Nicht vergessen: User Units laufen nur, wenn der Nutzer eingeloggt ist, zumindest in der Standardeinstellung. Solltest du dich also mal ausloggen, ohne den Rechner auszuschalten, dann wird die User Unit trotzdem gestoppt.

Genau so will ich es ja haben.

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 2726

Ich hab' jetzt auch mal die Cron-GUI installiert:

$ sudo apt install kdeadmin
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut… Fertig
Statusinformationen werden eingelesen… Fertig
Die folgenden zusätzlichen Pakete werden installiert:
  kde-config-cron ksystemlog
Vorgeschlagene Pakete:
  khelpcenter
Die folgenden NEUEN Pakete werden installiert:
  kde-config-cron kdeadmin ksystemlog
0 aktualisiert, 3 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Es müssen 2.843 kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 8.100 kB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren? [J/n] j

Leider lässt sich die nicht starten. Woran liegt das?

$ kde-config-cron
kde-config-cron: Befehl nicht gefunden.
ich@T500:~$ kdeadmin
kdeadmin: Befehl nicht gefunden.
ich@T500:~$ kde[Tab][Tab]
kded5                kde-geo-uri-handler

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 2726

dingsbums schrieb:

Hier mal als Grobgerüst zum Verfeinern bei Bedarf:

Ja vielen Dank für die Mühe.

Allerdings gefällt mir das nicht so, da noch einen weiteren Prozess in Dauerschleife laufen zu lassen und dafür auch noch komplizierte Skripte zu programmieren. Es reicht doch schon, wenn cron und systemd in Dauerschleife laufen, und die sind doch genau für sowas gemacht.

Außerdem ist damit die Brücke zu einer User-GUI auch noch nicht geschlagen.

dingsbums

Anmeldungsdatum:
13. November 2010

Beiträge: 3337

Außerdem ist damit die Brücke zu einer User-GUI auch noch nicht geschlagen.

Bitte? Ich habe damit das grafische Programm Galculator (Taschenrechner) gestartet.

und dafür auch noch komplizierte Skripte zu programmieren.

Kompliziert ist bei mir anders. Mehr als gebrauchsfertig vorbereiten geht leider nicht.

Wie lange willst du da noch mit rumbasteln anstatt eine funktionierende Lösung zu verwenden? Ist aber deine Entscheidung. Schönes Wochenende!

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 2726

dingsbums schrieb:

Außerdem ist damit die Brücke zu einer User-GUI auch noch nicht geschlagen.

Bitte? Ich habe damit das grafische Programm Galculator (Taschenrechner) gestartet.

Der lief doch dann unter root, oder? Klar startet der dann, aber mit Signal Desktop gäbe das dann eine Bauchlandung, denn der würde dann unter /root versuchen seine Konfiguration zu finden, statt unter /home/user.

und dafür auch noch komplizierte Skripte zu programmieren.

Kompliziert ist bei mir anders. Mehr als gebrauchsfertig vorbereiten geht leider nicht.

Alles OK. Ich finde den Weg per systemd bzw. cron eben auch eleganter, aber wenn ich das nicht hinkriegen sollte, komme ich auf Dein Skript zurück.

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 2726

Hab' jetzt die Unit auf oneshot umgestellt, denn die Anwendung soll ja nur jeweils einmal laufen:

[Unit]
Description=Starts Signal Desktop GUI

[Service]
Type=oneshot
ExecStart=/usr/bin/gtk-launch signal-desktop

[Install]
WantedBy=default.target

Wenn ich die starte, sehe ich in der Starter-Leiste das Icon von Signal Desktop auftauchen, aber leider verschwindet das dann nach 10 Sek. wieder. Im syslog finde ich:

Apr 29 12:40:32 T500 systemd[1005]: Starting Starts Signal Desktop GUI...
Apr 29 12:40:32 T500 zeitgeist-datah[2007]: zeitgeist-datahub.vala:210: Error during inserting events: GDBus.Error:org.gnome.zeitgeist.EngineError.InvalidArgument: Incomplete event: interpretation, manifestation and actor are required
Apr 29 12:40:32 T500 systemd[1005]: Finished Starts Signal Desktop GUI.

Warum startet die Anwendung nicht ganz durch?

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 2726

Jetzt habe ich unter [Unit] noch folgendes hinzugefügt:

User=1000
Group=1000

Dann passiert folgendes:

$ systemctl --user daemon-reload
$ systemctl --user start signal-desktop.service
Job for signal-desktop.service failed because the control process exited with error code.
See "systemctl --user status signal-desktop.service" and "journalctl --user -xeu signal-desktop.service" for details.
$ systemctl --user status signal-desktop.service
× signal-desktop.service - Starts Signal Desktop GUI
     Loaded: loaded (/home/ich/.config/systemd/user/signal-desktop.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Sat 2023-04-29 13:16:54 CEST; 21s ago
    Process: 80226 ExecStart=/usr/bin/gtk-launch signal-desktop (code=exited, status=216/GROUP)
   Main PID: 80226 (code=exited, status=216/GROUP)
        CPU: 2ms

Apr 29 13:16:54 T500 systemd[1005]: Starting Starts Signal Desktop GUI...
Apr 29 13:16:54 T500 systemd[80226]: signal-desktop.service: Failed to determine supplementary groups: Operation not permitted
Apr 29 13:16:54 T500 systemd[80226]: signal-desktop.service: Failed at step GROUP spawning /usr/bin/gtk-launch: Operation not permitted
Apr 29 13:16:54 T500 systemd[1005]: signal-desktop.service: Main process exited, code=exited, status=216/GROUP
Apr 29 13:16:54 T500 systemd[1005]: signal-desktop.service: Failed with result 'exit-code'.
Apr 29 13:16:54 T500 systemd[1005]: Failed to start Starts Signal Desktop GUI.
$ journalctl --user -xeu signal-desktop.service
░░ The process' exit code is 'exited' and its exit status is 216.
Apr 29 13:16:13 T500 systemd[1005]: signal-desktop.service: Failed with result 'exit-code'.
░░ Subject: Unit failed
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░ 
░░ The unit UNIT has entered the 'failed' state with result 'exit-code'.
Apr 29 13:16:13 T500 systemd[1005]: Failed to start Starts Signal Desktop GUI.
░░ Subject: A start job for unit UNIT has failed
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░ 
░░ A start job for unit UNIT has finished with a failure.
░░ 
░░ The job identifier is 1107 and the job result is failed.
Apr 29 13:16:54 T500 systemd[1005]: Starting Starts Signal Desktop GUI...
░░ Subject: A start job for unit UNIT has begun execution
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░ 
░░ A start job for unit UNIT has begun execution.
░░ 
░░ The job identifier is 1124.
Apr 29 13:16:54 T500 systemd[80226]: signal-desktop.service: Failed to determine supplementary groups: Operation not permitted
Apr 29 13:16:54 T500 systemd[80226]: signal-desktop.service: Failed at step GROUP spawning /usr/bin/gtk-launch: Operation not permitted
░░ Subject: Process /usr/bin/gtk-launch could not be executed
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░ 
░░ The process /usr/bin/gtk-launch could not be executed and failed.
░░ 
░░ The error number returned by this process is ERRNO.
Apr 29 13:16:54 T500 systemd[1005]: signal-desktop.service: Main process exited, code=exited, status=216/GROUP
░░ Subject: Unit process exited
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░ 
░░ An ExecStart= process belonging to unit UNIT has exited.
░░ 
░░ The process' exit code is 'exited' and its exit status is 216.
Apr 29 13:16:54 T500 systemd[1005]: signal-desktop.service: Failed with result 'exit-code'.
░░ Subject: Unit failed
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░ 
░░ The unit UNIT has entered the 'failed' state with result 'exit-code'.
Apr 29 13:16:54 T500 systemd[1005]: Failed to start Starts Signal Desktop GUI.
░░ Subject: A start job for unit UNIT has failed
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░ 
░░ A start job for unit UNIT has finished with a failure.
░░ 
░░ The job identifier is 1124 and the job result is failed.

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 2726

UlfZibis schrieb:

Wenn ich die starte, sehe ich in der Starter-Leiste das Icon von Signal Desktop auftauchen, aber leider verschwindet das dann nach 10 Sek. wieder.

Außerdem finde ich:

$ systemctl --user status signal-desktop.service
○ signal-desktop.service - Starts Signal Desktop GUI
     Loaded: loaded (/home/ich/.config/systemd/user/signal-desktop.service; enabled; vendor preset: enabled)
     Active: inactive (dead) since Sat 2023-04-29 13:30:08 CEST; 22s ago
    Process: 80518 ExecStart=/usr/bin/gtk-launch signal-desktop (code=exited, status=0/SUCCESS)
   Main PID: 80518 (code=exited, status=0/SUCCESS)
        CPU: 103ms

Apr 29 13:30:08 T500 systemd[1005]: Starting Starts Signal Desktop GUI...
Apr 29 13:30:08 T500 systemd[1005]: Finished Starts Signal Desktop GUI.

wxpte

Avatar von wxpte

Anmeldungsdatum:
20. Januar 2007

Beiträge: 1004

UlfZibis schrieb:

Der lief doch dann unter root, oder? Klar startet der dann, aber mit Signal Desktop gäbe das dann eine Bauchlandung, denn der würde dann unter /root versuchen seine Konfiguration zu finden, statt unter /home/user.

Ich habe diesen Faden jetzt nur oberflächlich überflogen. Wenn ich es richtig verstanden habe, dann willst du Signal durch den root in der User-Umgebung starten, richtig?

Wie wäre es dann mit:

1
su [user] -c 'DISPLAY=:0 signal [Optionen und Parameter]'