rtcwake -m no
내 시나리오는 잠든 동안 컴퓨터를 깨우고 systemd/systemd-suspend
스크립트를 사용하여 smplayer
팟캐스트 대기열로 나를 깨우도록 하는 것입니다 .
내 어려움은 smplayer
Ubuntu가 로그인 화면을 로드하고 로그인을 기다리고 있기 때문에 깨어날 때 실행할 수 없다는 것입니다. 프로그래밍 방식으로 로그인할 수 있는 방법이 있나요? 그렇지 않다면 어떻게든 smplayer
루트 사용자 와 같은 GUI 프로그램을 실행할 수 있습니까?~하는 동안로그인 화면이 표시되나요? (지금까지는 그런 식으로 작동하지 않습니다.)
(저는 컴퓨터를 단순 절전 모드로 일시 중단하여 절대로 로그아웃하고 싶지 않습니다. 왜냐하면 컴퓨터를 일시 중단/잠자기 상태로 설정할 때 마지막으로 그렇게 할 것인지 미리 알 필요가 없기 때문입니다. 분명히 말하면 모든 경우에 자동으로 로그인하고 싶지는 않지만 이 목적으로 컴퓨터가 깨어날 때만 가능합니다.)
저는 LTS 16을 사용하고 있습니다.
답변1
를 사용하여 로그인할 수 있지만 xdotool
명심해야 할 몇 가지 사항이 있습니다.
- xdotool에 대해 로그인 화면의 창을 선택하려면 변수를 사용자에 해당하는 파일(일반적으로 )
XAUTHORITY
로 설정해야 합니다 . 또한 변수도 설정합니다. 아래 코드 샘플을 참조하세요..Xauthority
/home/myuser/.Xauthority
DISPLAY
xdotool
로그인할 사용자로 실행합니다 . (귀하의 스크립트는 루트로 실행됩니다. 실제로 에 의해 절전 모드를 유발하는 등의 일부 상황에서는 로그인한 사용자로 실행되지만/lib/systemd/systemd-sleep suspend
일반적인 상황에서는systemctl suspend
루트로 실행됩니다.)- 알람이 기상의 원인일 때만 실행되도록 하려면 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