깨어난 후 프로그래밍 방식으로 로그인

깨어난 후 프로그래밍 방식으로 로그인

rtcwake -m no내 시나리오는 잠든 동안 컴퓨터를 깨우고 systemd/systemd-suspend스크립트를 사용하여 smplayer팟캐스트 대기열로 나를 깨우도록 하는 것입니다 .

내 어려움은 smplayerUbuntu가 로그인 화면을 로드하고 로그인을 기다리고 있기 때문에 깨어날 때 실행할 수 없다는 것입니다. 프로그래밍 방식으로 로그인할 수 있는 방법이 있나요? 그렇지 않다면 어떻게든 smplayer루트 사용자 와 같은 GUI 프로그램을 실행할 수 있습니까?~하는 동안로그인 화면이 표시되나요? (지금까지는 그런 식으로 작동하지 않습니다.)

(저는 컴퓨터를 단순 절전 모드로 일시 중단하여 절대로 로그아웃하고 싶지 않습니다. 왜냐하면 컴퓨터를 일시 중단/잠자기 상태로 설정할 때 마지막으로 그렇게 할 것인지 미리 알 필요가 없기 때문입니다. 분명히 말하면 모든 경우에 자동으로 로그인하고 싶지는 않지만 이 목적으로 컴퓨터가 깨어날 때만 가능합니다.)

저는 LTS 16을 사용하고 있습니다.

답변1

를 사용하여 로그인할 수 있지만 xdotool명심해야 할 몇 가지 사항이 있습니다.

  1. xdotool에 대해 로그인 화면의 창을 선택하려면 변수를 사용자에 해당하는 파일(일반적으로 ) XAUTHORITY로 설정해야 합니다 . 또한 변수도 설정합니다. 아래 코드 샘플을 참조하세요..Xauthority/home/myuser/.XauthorityDISPLAY
  2. xdotool로그인할 사용자로 실행합니다 . (귀하의 스크립트는 루트로 실행됩니다. 실제로 에 의해 절전 모드를 유발하는 등의 일부 상황에서는 로그인한 사용자로 실행되지만 /lib/systemd/systemd-sleep suspend일반적인 상황에서는 systemctl suspend루트로 실행됩니다.)
  3. 알람이 기상의 원인일 때만 실행되도록 하려면 API를 사용하여 linux/rtc.h기계의 현재 시간( RTC_RD_TIME)과 알람 시간( RTC_ALM_READ) ON 을 비교하세요 /dev/rtc0. 스크립트가 실행될 때 두 개가 서로 가까이 있으면 systemd/system-sleep이것이 알람으로 인한 깨우기라고 추측할 수 있습니다.

샘플 코드:

#!/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

관련 정보