staging.inyokaproject.org

Script nach Aufwachen ausführen

Status: Ungelöst | Ubuntu-Version: Ubuntu 18.04 (Bionic Beaver)
Antworten |

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

StefanP schrieb:

Gibt es etwas vergleichbares, wo ich das Aufwachen aus Standby ablesen kann?

Klar. Bei systemd findest du ggf. in /usr/lib/systemd/system-sleep/ eine Vorlage. Siehe Power_management

Bearbeitet von ChickenLipsRfun2eat:

Zitat eingefügt.

Moderiert von ChickenLipsRfun2eat:

Der Beitrag ist von mit-python-akkustand-abfragen abgetrennt worden.

StefanP

Anmeldungsdatum:
26. Januar 2008

Beiträge: Zähle...

ChickenLipsRfun2eat schrieb:

Klar. Bei systemd findest du ggf. in /usr/lib/systemd/system-sleep/ eine Vorlage. Siehe Power_management

leider endet es bei mir bei "/usr/lib/systemd/" - dort gibt es nur "system" aber kein Ordner "system-sleep" ....

Wo finde ich Ersatz dafür?

Schönen Abend - Stefan

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Bei neueren Ubuntu-Versionen liegt der Ordner in /lib/ statt /usr/lib/.

StefanP

Anmeldungsdatum:
26. Januar 2008

Beiträge: Zähle...

seahawk1986 schrieb:

Bei neueren Ubuntu-Versionen liegt der Ordner in /lib/ statt /usr/lib/.

Danke - da hab ich es nun gefunden ☺

Habe ich es richtig verstanden, dass ich DORT ein Script hinterlegen kann, das dann beim Aufwachen ausgeführt wird?

ChickenLipsRfun2eat Team-Icon

(Themenstarter)

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

seahawk1986 schrieb:

Bei neueren Ubuntu-Versionen liegt der Ordner in /lib/ statt /usr/lib/.

Ich dachte es sei genau umgekehrt. Aber hab ich wohl mit /usr/lib/systemd/conf.d verwechselt. Danke für die Korrektur.

StefanP schrieb:

Habe ich es richtig verstanden, dass ich DORT ein Script hinterlegen kann, das dann beim Aufwachen ausgeführt wird?

Du kannst dir eine normale systemd-unit unter /etc erstellen und After=suspend.target, WantedBy=suspend.target verwenden. Aber ja, man kann auch da Scripte hinterlegen. TLP macht das bspw. so. Das erste Kommandozeilen-Argument ist dabei dann resume oder suspend.

StefanP

Anmeldungsdatum:
26. Januar 2008

Beiträge: Zähle...

[..] Du kannst dir eine normale systemd-unit unter /etc erstellen und After=suspend.target, WantedBy=suspend.target verwenden. Aber ja, man kann auch da Scripte hinterlegen. TLP macht das bspw. so. Das erste Kommandozeilen-Argument ist dabei dann resume oder suspend.

SORRY - DAS war jetzt für mich zu komprimiert - da brauch ich erst mal einige Tage bis ich DAS verstehe.....

WAS will ich machen:

Da meine Tastatur etwas von der normalen abweicht würde ich gerne beim Start/Aufwachen "xmodmap ~/.Xmodmap" ausführen. Momentan mache ich es manuell im Terminal, würde es mit einem Script gerne automatisieren. Der Versuch mit einem Script im Austostartbereich hat leider nicht hingehauen.

SO - jetzt geht es erst einmal ins Bett .... morgen bin ich auch noch dahoam ☺

Gute Nacht, Stefan

ChickenLipsRfun2eat Team-Icon

(Themenstarter)

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Okay. Ausführlichere Informationen findest du bspw. unter systemd/User Units.

Als Script unter /usr/ wäre das nur ratsam, wenn du was systemweites ausführen möchtest. xmodmap ist ja pro Benutzer, da böte sich besagte Unit an.

StefanP

Anmeldungsdatum:
26. Januar 2008

Beiträge: 194

vielen Dank fürs Abtrennen ...

NUR - warum hast du den letzten Beitrag nicht mit verschoben? .... gehört eigentlich auch hier her - so finde ich

Gruß Stefan

ChickenLipsRfun2eat Team-Icon

(Themenstarter)

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Der würde in beides passen und ich wollte dein "Machwerk" nicht vom Python-Thema abtrennen. Daher habe ich das als Zitat oben eingefügt, was für systemd-sleep relevant wurde und deiner generellen Problemstellung mit der Tastatur ein Thema im entsprechenden Unterforum gewidmet.

StefanP

Anmeldungsdatum:
26. Januar 2008

Beiträge: 194

ChickenLipsRfun2eat schrieb:

Der würde in beides passen und ich wollte dein "Machwerk" nicht vom Python-Thema abtrennen. Daher habe ich das als Zitat oben eingefügt, was für systemd-sleep relevant wurde und deiner generellen Problemstellung mit der Tastatur ein Thema im entsprechenden Unterforum gewidmet.

Vielen Dank 👍 - und sorry wg dem Aufwand den ich da verursacht hatte ☺ Gruß Stefan

StefanP

Anmeldungsdatum:
26. Januar 2008

Beiträge: 194

Da der Thread dann bei Dauerhafte Umbelegung von Tasten weiterlief, eigentlich aber das HIER angesprochene Thema weiterentwickelte, schreibe ich nun hier wieder weiter...
also ... zurück zum eigentlichen Thema: "Script nach Aufwachen ausführen":
nachdem ich @ChickenLipsRfun2eat seine Vorschläge HIER gefolgt bin ... hat es (meistens geklappt)..

in "/home/stefan/.config/systemd/user/myWakeUpUnitForXmodmap_AfterSyspend.service" steht:

[Unit]
Description=Aufwachphase nach SUSPEND
After=suspend.target

[Service]
ExecStart=/home/stefan/.local/bin/Xmodmap.sh "SUSPEND"

[Install]
WantedBy=suspend.target

und in "/home/stefan/.local/bin/Xmodmap.sh" (natürlich ausführbar gemacht):

#!/bin/sh
# sleep 10 && xmodmap ~/.Xmodmap &
xmodmap /home/stefan/.Xmodmap && /usr/bin/logger $(date)$" ***********XmodmapDone "$1
if [ $1 = $"SLEEP" ]
  then
     echo $(date)$" ***********XmodmapDone: SLEEP" >> /home/stefan/0-AkkuLadeSteuerung-StartLOG.txt 2>&1 
  elif [ $1 = $"WAKEUP" ]
     then
       echo $(date)$" ***********XmodmapDone: WAKEUP" >> /home/stefan/0-AkkuLadeSteuerung-StartLOG.txt 2>&1
fi


Leider schaffe ich es nicht, in systemctl die dazu passenden Log-Einträge zu finden, die dem "After=suspend.target" enstammen ....
Außerdem erfolgt auch kein Eintrag in "/home/stefan/0-AkkuLadeSteuerung-StartLOG.txt" (Das war mein ErsatzVersuch nachdem ich mit "systemctl" nicht weitergekommen war) Bei dem manuellen Aufruf von "bash ./Xmodmap.sh SLEEP" (oder "WAKEUP") klappt es - beide Logs sind vorhanden.

  • Woran kann ich nun erkennen, ob die unit "myWakeUpUnitForXmodmap_AfterSyspend.service" ausgeführt worden ist oder nicht?

Erweiterng / Ergänzung:

  • in einem anderen Beitrag hatte ich gefunden (weiß leider den Link nicht mehr):
    "After=suspend.tartget hibernate.target hybrid-sleep.target suspend-then-hibernate.target"
    bedeutet das, dass alle Targets erfüllt sein müssen (:UND:) oder dass eines der Targets erfüllt sein soll (:ODER:) ...

Ich frage, weil für mich nicht nachvollziehbar ist, dass die Funktion manchmal klappt und manches Mal nicht. Im Moment habe ich für jedes dieser "target" eine eigene Unit angelegt ....

  • an der selben Stelle gab es auch das Beispiel : "Before=sleep.target" ... es scheint also ein "sleep.target" zu geben...
    könnte man dieses nicht auch mit "After=sleep.target" alle obigen Versionen in einem Rutsch abfangen?

Ich wünsche euch ein schönes Wochenende - ohne QuarantäneStress..
Herzliche Grüße, Stefan

chilidude

Avatar von chilidude

Anmeldungsdatum:
18. Februar 2010

Beiträge: 867

StefanP schrieb:

Da meine Tastatur etwas von der normalen abweicht würde ich gerne beim Start/Aufwachen "xmodmap ~/.Xmodmap" ausführen.

Das Problem mit der Tastatur hatte ich früher auch und habe dann auf dieselbe Weise gearbeitet. Für automatisiertes Ausführen habe ich dann das Ein-/Auschalten des Monitors bzw. seiner USB-Hubs via udev genommen.

Leider funktioniert das heute nicht mehr so einfach, weil sich die Konfiguration dauernd wieder zurückstellt. (Die DISPLAY-Variable und das Magic-Cookie ~/.Xauthority mussten glaube ich auch gesetzt sein. Also ganz so einfach war das auch damals schon nicht.)

Es gibt eine einfachere Methode die dauerhaft und systemweit funktioniert.

/usr/share/X11/xkb/keycodes/evdev

Die Datei voher sichern nicht vergessen!

Mit "xev" (aus Terminal starten) lassen sich Tastenbelegungen prüfen.

ChickenLipsRfun2eat Team-Icon

(Themenstarter)

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

StefanP schrieb:

…hat es (meistens geklappt)..

Ich rate an der Stelle mal ins Blaue: Versuch die Unit mal als Type=oneshot zu deklarieren (Standard ist Type=simple).

…Woran kann ich nun erkennen, ob die unit "myWakeUpUnitForXmodmap_AfterSyspend.service" ausgeführt worden ist oder nicht?

systemctl status myWakeUpUnitForXmodmap_AfterSyspend.service Da müsste dann die erste Zeile den Kommentar ausspucken:

Datum/Uhrzeit Rechnername systemd[ID]: Started…

"After=suspend.tartget hibernate.target hybrid-sleep.target suspend-then-hibernate.target"

Before und After können mehrere Bedingungen haben und auch öfter definiert werden. Es müssen dann alle vorherigen Units "finished" sein. Also ein UND im weiteren Sinne.

  • an der selben Stelle gab es auch das Beispiel : "Before=sleep.target" ... es scheint also ein "sleep.target" zu geben...
    könnte man dieses nicht auch mit "After=sleep.target" alle obigen Versionen in einem Rutsch abfangen?

Da du ja Wege wissen möchtest:

  • systemctl cat sleep.targetDocumentation=man:systemd.special(7)

  • man 7 systemd.special

sleep.target
A special target unit that is pulled in by suspend.target, hibernate.target and hybrid-sleep.target and may be used to hook units into the sleep state logic.

StefanP

Anmeldungsdatum:
26. Januar 2008

Beiträge: 194

chilidude schrieb: [...] Für automatisiertes Ausführen habe ich dann das Ein-/Auschalten des Monitors [...] genommen.

Wie/wo hast du DAS als Signal/Impuls gefunden/abgefangen/ausgelesen?

Es gibt eine einfachere Methode die dauerhaft und systemweit funktioniert.

/usr/share/X11/xkb/keycodes/evdev

Die Datei voher sichern nicht vergessen!

Mit "xev" (aus Terminal starten) lassen sich Tastenbelegungen prüfen.

Danke - das werde ich dann mal probieren ...

HIER ging es mir aber eher darum, wie ich Scripten direkt nach dem Aufwachen (bzw. vor dem Einschlafen" auslösen kann..

Herzliche Grüße und ein schönen Sonntag
Stefan

chilidude

Avatar von chilidude

Anmeldungsdatum:
18. Februar 2010

Beiträge: 867

Über udev: https://wiki.ubuntuusers.de/udev/

Dort steht auch drin wie man Ereignisse protokolliert:

udevadm monitor

Das gibst du im Terminal ein und dann kannst du schauen in welchen Situationen welche Ereignisse eintreten. Auf diese Ereignisse lässt sich dann triggern.

Eine udev-Regel für einen Standardmonitor an Displayport-0 könnte z.B. so aussehen:

KERNEL=="card0", SUBSYSTEM=="drm", RUN+="<your.shellscript.here"
Antworten |