Hola a tots. Estic fent servir Lubuntu 18.04 al meu portàtil de casa. Un bon dia vaig decidir que no estava satisfet amb les accions que el Power Manager va oferir en tancar la tapa del portàtil. Volia bloquejar la pantalla en tancar la tapa de l'ordinador portàtil i després d'una estona enviar l'ordinador portàtil a la hibernació. Vaig escriure un guió per a això i m'afanyo a compartir-lo amb vosaltres.
Em vaig trobar amb dos problemes.
En primer lloc, la hibernació no funciona fora de la caixa a Lubunta; per activar-la, heu de fer el següent.
Trobeu l'intercanvi d'UUID, per fer-ho, heu d'executar:
grep swap /etc/fstab
En el meu cas, la sortida és la següent:
# swap was on /dev/mmcblk0p2 during installation
UUID=aebf757e-14c0-410a-b042-3d9a6044a987 none swap sw 0 0
Aleshores, heu d'afegir l'UUID als paràmetres d'inicialització del nucli. Per fer-ho, afegiu currículum=UUID=%el vostre UUID% a la línia "GRUB_CMDLINE_LINUX_DEFAULT" al fitxer /etc/default/grub
...
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=aebf757e-14c0-410a-b042-3d9a6044a987"
...
I executeu l'ordre:
sudo update-grub
Ara la hibernació hauria de funcionar, per comprovar que podeu executar:
sudo systemctl hibernate
El segon problema va ser com bloquejar la pantalla de l'usuari com a root sense enviar l'ordinador portàtil a dormir. Ho vaig resoldre amb dbus-send, l'ordre en si es troba a l'script següent. Si algú coneix altres opcions, si us plau, escrigui als comentaris
Ara comencem a escriure el guió.
El primer que hem de fer a Power Manager és seleccionar Apagar la pantalla com a acció en tancar la tapa, de manera que no hi hagi conflictes amb el nostre script.
A continuació, creeu un fitxer /etc/acpi/events/laptop-lid amb el contingut següent:
event=button/lid.*
action=/etc/acpi/laptop-lid.sh
i creeu un script /etc/acpi/laptop-lid.sh amb el contingut següent:
#!/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
Fent executable l'script:
sudo chmod a+x /etc/acpi/laptop-lid.sh
I reinicieu el dimoni acpid perquè s'apliquin els canvis:
sudo systemctl restart acpid.service
Tot està llest.
Per a Gnome a l'script, heu de canviar:
- lxsessin => gnome-session
- org.freedesktop.ScreenSaver => org.gnome.ScreenSaver
Font: www.habr.com