rtcwake -m no
Mein Szenario sieht so aus, dass ich meinen Computer aus dem Ruhezustand wecken und systemd/systemd-suspend
Skripte verwenden möchte, die smplayer
mich mit einer Warteschlange an Podcasts wecken.
Mein Problem ist, dass smplayer
es beim Aufwachen nicht ausgeführt werden kann, da Ubuntu den Anmeldebildschirm lädt und auf eine Anmeldung wartet. Gibt es eine Möglichkeit, mich programmgesteuert anzumelden? Wenn nicht, kann ich irgendwie ein GUI-Programm wie beispielsweise smplayer
als Root-Benutzer ausführenwährendder Anmeldebildschirm wird angezeigt? (Bis jetzt klappt das noch nicht.)
(Ich möchte den Computer nicht in den Ruhezustand versetzen und mich dadurch nie abmelden, da ich nicht im Voraus wissen möchte, dass ich meinen Computer zum letzten Mal an diesem Tag in den Ruhezustand versetze. Um es klarzustellen: Ich möchte mich nicht in allen Fällen automatisch anmelden, sondern nur, wenn der Computer zu diesem Zweck aufgeweckt wird.)
Ich bin auf LTS 16.
Antwort1
Sie können sich xdotool
mit anmelden, aber dabei sollten Sie ein paar Dinge beachten:
- Damit das Fenster des Anmeldebildschirms für xdotool ausgewählt wird, müssen Sie die
XAUTHORITY
Variable auf die.Xauthority
Datei setzen, die Ihrem Benutzer entspricht (normalerweise )/home/myuser/.Xauthority
. Setzen Sie auch dieDISPLAY
Variable. Siehe Codebeispiel unten. - Führen Sie es
xdotool
als der Benutzer aus, der sich anmelden möchte. (Ihr Skript wird als Root ausgeführt. Tatsächlich wird es unter bestimmten Umständen als Ihr angemeldeter Benutzer ausgeführt, z. B. wenn der Ruhezustand durch ausgelöst wird/lib/systemd/systemd-sleep suspend
, aber unter normalen Umständen, d. h.systemctl suspend
, wird es als Root ausgeführt.) - Damit dies nur ausgelöst wird, wenn Ihr Alarm die Ursache für Ihr Aufwachen ist, verwenden Sie die
linux/rtc.h
API, um die aktuelle Zeit der Maschine (RTC_RD_TIME
) mit der Alarmzeit (RTC_ALM_READ
) zu vergleichen/dev/rtc0
. Wenn sie beim Ausführen Ihres Skripts nahe beieinander liegensystemd/system-sleep
, können Sie davon ausgehen, dass dies ein durch einen Alarm ausgelöstes Aufwachen ist.
Beispielcode:
#!/bin/sh
# /lib/systemd/system-sleep/myscript
# PW64 is a variable holding a base64-encoded password
if [ post = $1 ] && [ suspend = $2 ] && [ $(whoami) = root ]; then
if get_alm_time 10; then # this is an external program you should write to compare RTC_RD_TIME TO RTC_ALM_TIME
export XAUTHORITY=/home/mysuer/.Xauthority
export DISPLAY=:0
su -c "xdotool type $(printf $PW64 | base64 -d)" myuser &&\
su -c 'xdotool key Return' myuser &&\
su -c 'bash my-other-script.sh' myuser
fi
fi