staging.inyokaproject.org

GUI-Anwendung alle 10 Tage automatisch starten

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

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 2726

wxpte schrieb:

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?

Richtig. Und wenn ich es richtig deute, müsste der Unterschied zwischen einer systemd System-Unit und einer User-Unit ja der sein, dass letzterer eben in der User-Umgebung läuft, aber irgendwas klappt da nicht.
Evtl. führt ja oneshot¸ dazu, dass der Prozess kurz gestartet und gleich wieder abgeschossen wird. Aber wie soll man es machen, denn mit simple klappt's ja auch nicht.

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

Auch wenn ich die Parameter in einzelnen nicht verstehe, könnte ich das ja auch mal versuchen, also so unter ExecStart in die Unit eintragen.

Und wenn ich es richtig verstehe, müsste dann doch folgendes dasselbe machen:

sudo -u [user] -H /usr/bin/gtk-launch signal-desktop

Klappte aber auch nicht. Warum ich gtk-launch verwenden will, habe ich ja weiter oben erläutert.

wxpte

Avatar von wxpte

Anmeldungsdatum:
20. Januar 2007

Beiträge: 1004

UlfZibis schrieb:

Und wenn ich es richtig verstehe, müsste dann doch folgendes dasselbe machen:

sudo -u [user] -H /usr/bin/gtk-launch signal-desktop

Klappte aber auch nicht. Warum ich gtk-launch verwenden will, habe ich ja weiter oben erläutert.

Stimmt, das müsste auf dasselbe hinauslaufen. Meine Anregung resultiert aus der Erfahrung, dass bei mir bis Ubuntu Mate 22.04 das folgende Skript per root-Cronjob tadellos lief:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
updexec () {
ppfad=/home/wxpte/updateprotokolle
tname=$(date "+%B-%Y")
tlog=$(date "+%Y-%m-%d %H:%M")
pname="protupd_"$tname".log"
echo "Protokoll vom "$tlog >> $ppfad/$pname
sudo apt-get update && sudo apt-get -y dist-upgrade >> $ppfad/temp
egrep "Protokoll |[0-9]+ aktualisiert|^$" $ppfad/temp >> $ppfad/$pname
echo >> $ppfad/$pname
rm $ppfad/temp
chown wxpte:wxpte $ppfad/$pname
}
...
DISPLAY=:0 su wxpte -c 'zenity --notification --text "Vorwarnung: In fünf Minuten beginnt der Update. Bitte entsprechend vorbereiten."'
sleep 300
DISPLAY=:0 su wxpte -c 'zenity --notification --text "Hinweis: Der Update wurde gestartet."'
updexec
DISPLAY=:0 su wxpte -c 'zenity --notification --window-icon /home/wxpte/Bilder/Achtung.png --text "Anwendungen schließen! Der PC wird in einer Minute heruntergefahren."'
sudo shutdown -P 1

(Die case-Verzweigungen im Originalskript habe ich herausgekürzt, daher auch die Auslagerung des Update-Parts in eine Function.)

Da du Ubuntu 20.04 am Start hast, hatte ich erwartet, dass es analog auch bei dir laufen würde. Aber anscheinend haben Signal bzw. gtk-launch komplexere Anforderungen, als zenity.

dingsbums

Anmeldungsdatum:
13. November 2010

Beiträge: 3337

UlfZibis schrieb:

Der lief doch dann unter root, oder?

Eben nicht. Mal richtig lesen:

dingsbums schrieb:

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

dingsbums schrieb:

UlfZibis schrieb:

Der lief doch dann unter root, oder?

Eben nicht. Mal richtig lesen:

Stimmt, jetzt hab' ich es verstanden.

Ich warte dann noch mal, ob sich noisefloor noch mal meldet, ob er noch Tipps zu dem systemd-Thema hat.

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 2726

Tja, jetzt wurde mir von verschiedenen Seiten empfohlen, das mit systemd zu steuern, und jetzt weiß wohl keiner, wie es wohl funktioniert. Dann muss ich mich evtl. wohl doch mit einem zusätzlich laufenden Skript befassen und begnügen.

Gibt es nicht evtl. auch User Cron Jobs?

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

jetzt wurde mir von verschiedenen Seiten empfohlen, das mit systemd zu steuern, und jetzt weiß wohl keiner, wie es wohl funktioniert.

Sehr witzig. Mit anderen Worten: du beschwerst dich, dass dir noch keiner eine fertige Lösung präsentiert hat...

WAS funktioniert denn nach aktuellem Stand nicht? Du hast ja schon diverse Sachen gemacht / ausprobiert. Bitte nochmal im Detail posten:

  • wie die Unit aktuell aussieht

  • was passiert?

  • was funktioniert nicht, wie du es am Ende gerne hättest? Bitte beschreiben, wie es aussehen soll und wie es aktuell aussieht.

Gruß, noisefloor

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 7816

UlfZibis schrieb:

wxpte schrieb:

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?

Richtig.

Ganz unabhängig davon, wie man so etwas technisch machen könnte, ist dieser Wunsch der reine Irrsinn! Oder anders gesagt: Das ist mit Sicherheit der falsche Weg. Vernünftiger erscheint mir der Ansatz, anacron als normaler Benutzer zu starten.

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 2726

noisefloor schrieb:

Sehr witzig. Mit anderen Worten: du beschwerst dich, dass dir noch keiner eine fertige Lösung präsentiert hat...

Wer das als Beschwerde sehen möchte, darf das gerne tun. Ich habe nur mein Bedauern ausgedrückt.
Umsomehr Danke an Dich, dass Du reagiert hast.

  • wie die Unit aktuell aussieht

[Unit]
Description=Start Signal Desktop GUI
Requires=default.target

[Service]
Type=notify
Environment=DISPLAY=:0
ExecStart=/usr/bin/gtk-launch signal-desktop

[Install]
  • was passiert?

  1. In der Unity-Starter-Leiste taucht für ca. 15 Sek. das Icon von Signal Desktop auf und verschwindet dann wieder.

  2. Ich bekommen immer wieder die gleiche Fehlermeldung.

    $ systemctl --user start signal-desktop.service
    Job for signal-desktop.service failed because the service did not take the steps required by its unit configuration.
    See "systemctl --user status signal-desktop.service" and "journalctl --user -xeu signal-desktop.service" for details.
    $ systemctl --user stop signal-desktop.service
    $ systemctl --user status signal-desktop.service
    × signal-desktop.service - Start Signal Desktop GUI
         Loaded: loaded (/home/ich/.config/systemd/user/signal-desktop.service; static)
         Active: failed (Result: protocol) since Mon 2023-05-01 00:08:22 CEST; 22s ago
        Process: 93087 ExecStart=/usr/bin/gtk-launch signal-desktop (code=exited, status=0/SUCCESS)
       Main PID: 93087 (code=exited, status=0/SUCCESS)
            CPU: 115ms
    
    Mai 01 00:08:22 T500 systemd[1005]: Starting Start Signal Desktop GUI...
    Mai 01 00:08:22 T500 systemd[1005]: signal-desktop.service: Failed with result 'protocol'.
    Mai 01 00:08:22 T500 systemd[1005]: Failed to start Start Signal Desktop GUI.
  • was funktioniert nicht, wie du es am Ende gerne hättest?

Dass die Anwendung in voller Schönheit auf dem Bildschirm erscheint, und ich sie dann benutzen kann.

Inzwischen habe ich das Thema auch hier angefragt: https://askubuntu.com/questions/1466051/start-a-gui-app-automatically-each-10-days

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 2726

kB schrieb:

Vernünftiger erscheint mir der Ansatz, anacron als normaler Benutzer zu starten.

Es bleibt dann nur die Frage, wer anacron regelmäßig startet. Da fällt mir nur Cron Job oder ein systemd Timer oder ein selbstgebasteltes Skript ein. Und da man in einer Timer Unit Persistent=true setzen kann, ist dann der Umweg über anacron obsolet.

... ist dieser Wunsch der reine Irrsinn!

Kannst Du mal erläutern, was Du damit meinst?

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

wenn du /usr/bin/gtk-launch signal-desktop im Terminal ausführst, blockiert der Terminal dann, bis du Signal beendest oder schiebt sich das Programm in den Hintergrund und der Terminal ist wieder frei = du siehst wieder den Terminal-Prompt?

Ersetz' mal in der Unit Type=notify durch Type=forking und starte die Unit neu (also neu laden und dann starten).

Gruß, noisefloor

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 2726

noisefloor schrieb:

wenn du /usr/bin/gtk-launch signal-desktop im Terminal ausführst, blockiert der Terminal dann, bis du Signal beendest oder schiebt sich das Programm in den Hintergrund und der Terminal ist wieder frei = du siehst wieder den Terminal-Prompt?

Im Terminal kommen zunächst mal 'ne ganze Latte Meldungen und dann "scheint" es gesperrt. Wenn ich dann aber "Enter" betätige, erscheint wieder der Prompt, das Terminal ist wieder frei und Signal Desktop bleibt aktiv. Nach einer Zeit kommen aber immer noch neue Meldungen von Signal Desktop.

Ersetz' mal in der Unit Type=notify durch Type=forking und starte die Unit neu (also neu laden und dann starten).

Das klappt tatsächlich. Jippee !! Irgendwie hatte ich daran auch schon mal gedacht, doch da ich die Erläuterungen dazu nun überhaupt nicht verstanden hatte, und es mit erschien, dass es dafür einiges mehr braucht, als nur das Setzen des Typs, hatte ich erst mal davon abgesehen, mich da tief einzugraben, um das alles zu verstehen.

Dann kann ich ja jetzt zum 2. Teil schreiten, dem Definieren einer Timer-Unit.

BTW. Hat jemand dazu noch eine Antwort? :
UlfZibis schrieb:

$ 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 rechts abgeschnitten. Wie kann ich da einen Zeilenumbruch veranlassen?

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

Das klappt tatsächlich. Jippee !!

Sehr gut.

Type=... kann halt mit allen möglichen Situationen umgehen - wie vieles in systemd. Type=notify hat wohl irgendwie irgendwas damit zu tun, ob und wie und wo und wenn das gestartete Programm / der gestartete Dienst benachrichtigen kann. Und wenn man Type=notify verwendet muss man sich wohl auch um NotifyAccess= ... Gedanken machen. Entweder man setzt einen Wert explizit oder kann mit dem Defaultwert NotifyAccess=main leben. Außerdem erwartet systemd bei Type=notify, dass der gestartet Prozess READY=1 zurückliefert, damit systemd weiß, dass der Prozess erfolgreich gestartet und geforkt ist. Ist alles in der Man-Page erklärt - durchblicke ich aber auch nicht ganz, habe ich auch noch nie genutzt.

Was Type=forking macht ist auch in der Man-Page erklärt. Tipp für die Zukunft: wenn man Dienste startet immer mit simple anfangen, und wenn das nicht funktioniert über exec zu forking. Und für kurz laufende Skripte, nach deren Abarbeitung die Unit fertig ist oneshot nehmen.

BTW. Hat jemand dazu noch eine Antwort? :

Was war denn hier genau die Frage? Und wie sieht deine Time-Unit aus?

Gruß, noisefloor

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 2726

noisefloor schrieb:

... Tipp für die Zukunft: wenn man Dienste startet immer mit simple anfangen, und wenn das nicht funktioniert über exec zu forking. Und für kurz laufende Skripte, nach deren Abarbeitung die Unit fertig ist oneshot nehmen.

Ja alles ziemlich kompliziert, bzw. in der man kompliziert erklärt. Jedenfalls hatte ich das alles und manches mehr in der Reihenfolge schon probiert, doch dass forking einfach nur gesetzt werden braucht und dann alles von selbst funktioniert, da bin ich nicht drauf gekommen. Zuletzt hatte ich mich auf notify eingeschworen, da ich dann zumindest rudimentäre Fehlermeldungen bekomme.

Was war denn hier genau die Frage?

Hm, steht doch da!

$ 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 rechts abgeschnitten. Wie kann ich da einen Zeilenumbruch veranlassen?

Und wie sieht deine Time-Unit aus?

Hab ich noch nicht, kommt noch.

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

ach so, dass war schon die Frage... Das wird nicht abgeschnitten, du kannst mit dem Cursor durchscrollen. Wenn du es für C&P hier ins Forum brauchst, dann leitet die Ausgabe doch einfach in eine Datei um und kopier' den Inhalt dann da raus.

Gruß, noisefloor

UlfZibis

(Themenstarter)

Anmeldungsdatum:
13. Juli 2011

Beiträge: 2726

noisefloor schrieb:

Das wird nicht abgeschnitten, du kannst mit dem Cursor durchscrollen.

👍