Script personalizado al cerrar la tapa de la computadora portátil y bloquear la pantalla sin dormir

Hola a todos. Yo uso Lubuntu 18.04 en la computadora portátil de mi casa. Un buen día, decidí que no estaba contento con las acciones que ofrece Power Manager al cerrar la tapa de una computadora portátil. Cuando cerré la tapa de la computadora portátil, quise bloquear la pantalla y después de un tiempo enviar la computadora portátil a la hibernación. Para hacer esto, escribí un guión y me apresuro a compartirlo contigo.

Me encontré con dos problemas.

El primero es que la hibernación no funciona en el mundo fuera de la caja;

Encuentre el intercambio de UUID, para esto debe hacer:

grep swap /etc/fstab

En mi caso, el resultado es el siguiente:

# swap was on /dev/mmcblk0p2 during installation
UUID=aebf757e-14c0-410a-b042-3d9a6044a987 none            swap    sw              0       0

Luego debe agregar el UUID a los parámetros de inicialización del núcleo. Para hacer esto, agregue el archivo / etc / default / grub a la línea "GRUB_CMDLINE_LINUX_DEFAULT" resume = UUID =% su UUID%

...
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=aebf757e-14c0-410a-b042-3d9a6044a987"
...

Y ejecuta el comando:

sudo update-grub

Ahora la hibernación debería funcionar, para la verificación puede hacer:

sudo systemctl hibernate

El segundo problema era cómo bloquear la pantalla del usuario desde la raíz sin enviar la computadora portátil a dormir. Lo resolví usando dbus-send, el comando en sí está en el script a continuación. Si alguien conoce otras opciones, escriba los comentarios.

Ahora comencemos a escribir el guión.

Lo primero que debemos hacer en Power Manager es seleccionar Desactivar pantalla como acción al cerrar la cubierta para que no haya conflictos con nuestro script.

imagen

Luego cree el archivo / etc / acpi / events / laptop-lid con el siguiente contenido:

event=button/lid.*
action=/etc/acpi/laptop-lid.sh

y cree el script /etc/acpi/laptop-lid.sh con el siguiente contenido:

#!/bin/bash

#set variables
# BUS   environ   lxsession
BUS=$(grep -z DBUS_SESSION_BUS_ADDRESS \
	/proc/$(pidof -s lxsession)/environ | \
	sed 's/DBUS_SESSION_BUS_ADDRESS=//g')
#     ,    
USER=$(grep -z USER /proc/$(pidof -s lxsession)/environ | sed 's/USER=//g')
#     
LID="/proc/acpi/button/lid/LID0/state"

#Check lid state (return 0 if closed)
check_lid () {
	grep -q closed $LID
}

#Lock screen without sleep
check_lid
if [ $? = 0 ]
then
	#TODO run command as root
	sudo -u $USER -E dbus-send --bus=$BUS \
				    --type=method_call \
				    --dest="org.freedesktop.ScreenSaver" \
				    "/org/freedesktop/ScreenSaver" \
				    org.freedesktop.ScreenSaver.Lock
fi

#Wait 10 minutes and hibernate if lid is closed
sleep 600
check_lid
if [ $? = 0 ]
then
	systemctl hibernate
fi

Hacemos que el script sea ejecutable:

sudo chmod a+x /etc/acpi/laptop-lid.sh

Y reinicie el demonio acpid para que se apliquen los cambios:

sudo systemctl restart acpid.service

Todo está listo.

Para Gnome en el script, debe cambiar:

  • lxsessin => gnome-session
  • org.freedesktop.ScreenSaver => org.gnome.ScreenSaver

All Articles