Mi escenario es que deseo usarlo rtcwake -m no
para activar mi computadora mientras estoy dormido y usar systemd/systemd-suspend
scripts para activarme smplayer
y despertarme con una cola de podcasts.
Mi dificultad es que smplayer
no se puede ejecutar al despertar porque Ubuntu carga la pantalla de inicio de sesión y está esperando un inicio de sesión. ¿Hay alguna manera de iniciar sesión mediante programación? Si no, ¿puedo ejecutar de alguna manera un programa GUI como smplayer
usuario root?mientras¿Se muestra la pantalla de inicio de sesión? (Hasta ahora, no está funcionando de esa manera).
(No deseo suspender la computadora a una simple suspensión, por lo que nunca cerraré la sesión, porque no quiero tener que saber de antemano cuando suspendo/duermo mi computadora que lo estoy haciendo por última vez el día. Para ser claros, no quiero iniciar sesión automáticamente en todos los casos, solo cuando la computadora se activa para este propósito).
Estoy en LTS 16.
Respuesta1
Puede utilizar xdotool
para iniciar sesión, pero hay algunas cosas que debe tener en cuenta:
- Para tener seleccionada la ventana de la pantalla de inicio de sesión para xdotool, debe configurar la
XAUTHORITY
variable en el.Xauthority
archivo que corresponde a su usuario (generalmente/home/myuser/.Xauthority
. También configure laDISPLAY
variable. Consulte el ejemplo de código a continuación. - Ejecute
xdotool
como el usuario que va a iniciar sesión. (Su secuencia de comandos se ejecutará como root. En realidad, se ejecutará como su usuario que inició sesión en algunas circunstancias, como provocar la suspensión/lib/systemd/systemd-sleep suspend
, pero en circunstancias normales, es decirsystemctl suspend
, se ejecutará como root). - Para hacer que esto solo se active cuando su alarma sea la causa de su despertar, utilice la
linux/rtc.h
API para comparar la hora actual de la máquina (RTC_RD_TIME
) con la hora de la alarma (RTC_ALM_READ
) ENCENDIDA/dev/rtc0
. Si están muy juntos cuando sesystemd/system-sleep
ejecuta el script, entonces puede suponer que se trata de una activación activada por una alarma.
Código de muestra:
#!/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