Você pode usar xdotool
para fazer login, mas há algumas coisas a serem lembradas:
- Para que a janela da tela de login seja selecionada para xdotool, você precisa definir a variável
XAUTHORITY
como o arquivo.Xauthority
que corresponde ao seu usuário (geralmente/home/myuser/.Xauthority
. Também defina a variávelDISPLAY
. amostra de código abaixo. - Execute
xdotool
como o usuário que deve efetuar o login. (Seu script será executado como root. Na verdade, ele será executado como seu usuário logado em algumas circunstâncias, como, por exemplo, em/lib/systemd/systemd-sleep suspend
, mas em circunstâncias normais, ou seja,systemctl suspend
, ele será executado como root.) - Para que isso seja acionado somente quando o alarme for a causa de sua ativação, use a
linux/rtc.h
API para comparar a hora atual da máquina (RTC_RD_TIME
) com a hora do alarme (RTC_ALM_READ
) ON/dev/rtc0
. Se eles estiverem próximos um do outro quando o script emsystemd/system-sleep
for executado, você pode supor que se trata de um despertar acionado por alarme.
Exemplo de código:
#!/bin/sh
# /lib/systemd/system-sleep/myscript
# PW64 is a variable holding a base64-encoded password
if [ post = ] && [ suspend = ] && [ $(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