Wie führe ich ein Benutzerskript nach dem Aufwachen des Systems aus?


10

Wenn meine Debian Jessie Desktop-Box aus dem Ruhezustand aufwacht (über das neue glänzende System), werden meine Mauseinstellungen auf ihre Standardeinstellungen zurückgesetzt, nachdem ich meine Anpassung zurückgesetzt habe

xinput set-prop 12 'Device Accel Constant Deceleration' 2.5

Das läuft, wenn ich mich anmelde.

Wie kann ich beim Aufwecken ein beliebiges Benutzerskript ausführen? (Angenommen, der Benutzer ist der Eigentümer der X-Sitzung.)

Soweit ich mich erinnern kann, ist das Folgende die einzige Anpassung, die ich am systemdSetup vorgenommen habe (ja, ich weiß, dass es völlig falsch ist, weil es für beliebige Benutzer nicht funktioniert, aber ich habe noch nicht herausgefunden, wie das geht ... das ist etwas verwandt)

Wie kann ich als Benutzer, der gerade den X-Bildschirm verwendet, vor dem Aufwecken ein beliebiges Benutzerskript ausführen?

cat /etc/systemd/system/i3lock.service

#systemctl enable i3lock.service

[Unit]
Description=i3lock
Before=sleep.target

[Service]
User=fommil
Type=forking
Environment=DISPLAY=:0
ExecStart=/usr/bin/i3lock -c 000000

[Install]
WantedBy=sleep.target

askubuntu.com/a/661747 Es hilft mir in meinem Fall, der sich von Ihrem unterscheidet. Vielleicht kann es Ihnen nützlich sein.
Sun Bear

Antworten:


5

Diese Antwort basiert auf askubuntu.com/a/661747/394818 (wie auch im Sinne Kommentar von @ sun-Bär) askubuntu.com/q/616272/394818 und superuser.com/a/1269158/585953 .

Verwenden eines Systemdienstes:

Erstellen Sie die Datei /etc/systemd/system/my_user_script.service:

[Unit]
Description=Run my_user_script
After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target


[Service]
ExecStart=/path/to/my_user_script
#User=my_user_name
#Environment=DISPLAY=:0

[Install]
WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target

Entfernen Sie suspend / hibernate / hybrid, falls der Dienst erst ausgeführt werden soll, nachdem Sie aus einer bestimmten Art von Schlaf aufgewacht sind. Für den Fall , muss der Dienst von einem bestimmten Benutzer ausgeführt werden, Kommentar- der User=und Environment=Linien und ersetzen Sie den entsprechenden Benutzernamen an .

Installieren Sie die Servicedatei mit:

sudo systemctl enable my_user_script

Die Verwendung eines Benutzerdienstes funktioniert nicht:

Um zu vermeiden, dass ein fest codierter Benutzername mit festgelegt wird User=, kann genau dieselbe Servicedatei unter erstellt .local/share/systemd/user/my_user_script.serviceund mit aktiviert werden

systemctl --user enable my_user_script

Dies wird jedoch nicht funktionieren. @grawity erklärt sich genauer unix.stackexchange.com/a/174837/163108 warum das so ist:

sleep.targetist spezifisch für Systemdienste. Der Grund ist, dass sleep.targetes sich nicht um ein magisches Ziel handelt, das beim Einschlafen automatisch aktiviert wird. Es ist nur ein reguläres Ziel, das das System in den Ruhezustand versetzt - daher haben die Benutzerinstanzen natürlich kein Äquivalent. (Und leider können sich die 'Benutzer'-Instanzen derzeit nicht auf systemweite Dienste verlassen.)


Das hat bei mir nicht funktioniert. Ich versuche, einen Dienst auszuführen, der ausgeführt wird setterm --blank 1, um den Bildschirm nach 1 Minute auszuschalten, nachdem der Ruhezustand / Hybrid-Ruhezustand auf einem Server ohne Desktop-Umgebung wieder aufgenommen wurde. Die hier beschriebenen Schritte führen dies jedoch nicht aus. Ja, der Dienst funktioniert beim Booten oder wenn er manuell ausgelöst wird, einwandfrei. Nichts im Systemprotokoll weist darauf hin, dass der Dienst bei Wiederaufnahme des Ruhezustands überhaupt aufgerufen wird.
Andy Forceno

3

Ich habe eine Datei in / lib / systemd / system-sleep erstellt .

#!/bin/sh
case $1 in
  post)
    /bin/runme
  ;;
esac

Die Post wird beim Aufwachen aufgerufen.

BEARBEITEN:

https://www.freedesktop.org/software/systemd/man/systemd-suspend.service.html


1
Das hat bei mir nicht funktioniert. Können Sie auf eine Dokumentation verweisen, in der erklärt wird, wie es funktionieren soll?
Ryan Lue

Das funktioniert auch bei mir nicht. Der Kontext, in dem dieses Skript ausgeführt wird, ist äußerst begrenzt und wird nicht als Benutzer ausgeführt, der aktiv war, als das System in den Ruhezustand versetzt wurde. Daher erhält es keinen Zugriff auf die Anzeige (die hier die meisten Desktop-Dienstprogramme ausschließt), Informationen / Variablen für den angemeldeten Benutzer oder andere Informationen zur Sitzung des Benutzers, der derzeit angemeldet ist. Ich benötige ein Skript, unter dem ausgeführt werden kann der Benutzer, der im Kontext der Desktopsitzung angemeldet ist. Ich habe noch nichts gefunden, um dies zu tun, aber ich werde es hier aktualisieren, wenn ich es tue.
Theferrit32

@ theferrit32 Sie sollten in der Lage sein, mit dem Befehl 'su' in Ihrem Skript zu Ihrem bevorzugten Benutzer zu wechseln.
Borizzzzz

1

Öffnen Sie diese Datei:

sudo vim / lib / systemd / system-sleep / hdparm

Inhalt:

#! / bin / sh

Fall $ 1 in der Post)
    /usr/lib/pm-utils/power.d/95hdparm-apm Lebenslauf
    ## Fügen Sie Ihren Befehl ein, um Ihr Skript auszuführen
    ;; esac

Ihr Befehl wird mit Administratorrechten ausgeführt .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.