Nach dem Aufwachen programmgesteuert anmelden

Nach dem Aufwachen programmgesteuert anmelden

rtcwake -m noMein Szenario sieht so aus, dass ich meinen Computer aus dem Ruhezustand wecken und systemd/systemd-suspendSkripte verwenden möchte, die smplayermich mit einer Warteschlange an Podcasts wecken.

Mein Problem ist, dass smplayeres 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 smplayerals 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 xdotoolmit anmelden, aber dabei sollten Sie ein paar Dinge beachten:

  1. Damit das Fenster des Anmeldebildschirms für xdotool ausgewählt wird, müssen Sie die XAUTHORITYVariable auf die .XauthorityDatei setzen, die Ihrem Benutzer entspricht (normalerweise ) /home/myuser/.Xauthority. Setzen Sie auch die DISPLAYVariable. Siehe Codebeispiel unten.
  2. Führen Sie es xdotoolals 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.)
  3. Damit dies nur ausgelöst wird, wenn Ihr Alarm die Ursache für Ihr Aufwachen ist, verwenden Sie die linux/rtc.hAPI, 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 liegen systemd/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

verwandte Informationen