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.
| 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
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
Ehemaliger
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
Supporter, Wikiteam
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.
[Unit]
Description=Start Signal Desktop GUI
Requires=default.target
[Service]
Type=notify
Environment=DISPLAY=:0
ExecStart=/usr/bin/gtk-launch signal-desktop
[Install] In der Unity-Starter-Leiste taucht für ca. 15 Sek. das Icon von Signal Desktop auf und verschwindet dann wieder. 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.
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
Ehemaliger
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
Ehemaliger
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
Ehemaliger
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.
👍
|