Inicie sesión mediante programación después de despertarse

Inicie sesión mediante programación después de despertarse

Mi escenario es que deseo usarlo rtcwake -m nopara activar mi computadora mientras estoy dormido y usar systemd/systemd-suspendscripts para activarme smplayery despertarme con una cola de podcasts.

Mi dificultad es que smplayerno 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 smplayerusuario 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 xdotoolpara iniciar sesión, pero hay algunas cosas que debe tener en cuenta:

  1. Para tener seleccionada la ventana de la pantalla de inicio de sesión para xdotool, debe configurar la XAUTHORITYvariable en el .Xauthorityarchivo que corresponde a su usuario (generalmente /home/myuser/.Xauthority. También configure la DISPLAYvariable. Consulte el ejemplo de código a continuación.
  2. Ejecute xdotoolcomo 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 decir systemctl suspend, se ejecutará como root).
  3. Para hacer que esto solo se active cuando su alarma sea la causa de su despertar, utilice la linux/rtc.hAPI 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 se systemd/system-sleepejecuta 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

información relacionada