Tere kõigile. Kasutan koduses sülearvutis Lubuntu 18.04. Ühel ilusal päeval otsustasin, et ma ei ole rahul toimingutega, mida Power Manager sülearvuti kaane sulgemisel pakkus. Tahtsin sülearvuti kaane sulgemisel ekraani lukustada ja mõne aja pärast sülearvuti talveunerežiimi saata. Kirjutasin selle jaoks stsenaariumi ja kiirustan seda teiega jagama.
Mul tekkis kaks probleemi.
Esiteks ei tööta talveunerežiim Lubuntas kohe, selle lubamiseks peate tegema järgmist.
Leidke UUID-vahetus, selleks peate käivitama:
grep swap /etc/fstab
Minu puhul on väljund järgmine:
# swap was on /dev/mmcblk0p2 during installation
UUID=aebf757e-14c0-410a-b042-3d9a6044a987 none swap sw 0 0
Seejärel peate kerneli lähtestamise parameetritele lisama UUID-i. Selleks lisage faili /etc/default/grub reale "GRUB_CMDLINE_LINUX_DEFAULT" resume=UUID=%teie UUID%
...
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=aebf757e-14c0-410a-b042-3d9a6044a987"
...
Ja käivitage käsk:
sudo update-grub
Nüüd peaks talveunerežiim toimima, kontrollimiseks võite käivitada:
sudo systemctl hibernate
Teiseks probleemiks oli see, kuidas lukustada kasutaja ekraan rootina ilma sülearvutit magama saatmata. Lahendasin selle dbus-send abil, käsk ise on allolevas skriptis. Kui keegi teab muid võimalusi, siis palun kirjutage kommentaaridesse
Nüüd alustame stsenaariumi kirjutamist.
Esimene asi, mida peame Power Manageris tegema, on kaane sulgemise toiminguks valida ekraani väljalülitamine, et meie skriptiga ei tekiks konflikte.
Seejärel looge järgmise sisuga fail /etc/acpi/events/laptop-lid:
event=button/lid.*
action=/etc/acpi/laptop-lid.sh
ja looge järgmise sisuga skript /etc/acpi/laptop-lid.sh:
#!/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
Skripti käivitatavaks muutmine:
sudo chmod a+x /etc/acpi/laptop-lid.sh
Ja taaskäivitage acpid deemon, et muudatused rakenduksid:
sudo systemctl restart acpid.service
Kõik on valmis.
Skriptis oleva Gnome'i jaoks peate muutma:
- lxsessin => gnome-session
- org.freedesktop.ScreenSaver => org.gnome.ScreenSaver
Allikas: www.habr.com