Sveiki visi. Naudoju Lubuntu 18.04 savo namų nešiojamajame kompiuteryje. Vieną gražią dieną nusprendžiau, kad manęs netenkina Power Manager siūlomi veiksmai uždarant nešiojamojo kompiuterio dangtį. Norėjau užrakinti ekraną uždarant nešiojamojo kompiuterio dangtį ir po kurio laiko perkelti nešiojamąjį kompiuterį į užmigdymo režimą. Parašiau tam scenarijų ir skubu juo pasidalinti su jumis.
Susidūriau su dviem problemomis.
Pirma, „Lubunta“ užmigdymo režimas neveikia iš karto; norėdami jį įjungti, turite atlikti šiuos veiksmus.
Raskite UUID apsikeitimo vietą, kad tai padarytumėte, turite paleisti:
grep swap /etc/fstab
Mano atveju išvestis yra tokia:
# swap was on /dev/mmcblk0p2 during installation
UUID=aebf757e-14c0-410a-b042-3d9a6044a987 none swap sw 0 0
Tada prie branduolio inicijavimo parametrų turite pridėti UUID. Norėdami tai padaryti, failo /etc/default/grub eilutėje „GRUB_CMDLINE_LINUX_DEFAULT“ pridėkite resume=UUID=%your UUID%.
...
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=aebf757e-14c0-410a-b042-3d9a6044a987"
...
Ir paleiskite komandą:
sudo update-grub
Dabar užmigdymo režimas turėtų veikti, kad patikrintumėte, galite paleisti:
sudo systemctl hibernate
Antroji problema buvo kaip užrakinti vartotojo ekraną kaip root, neišsiunčiant nešiojamojo kompiuterio miegoti. Aš tai išsprendžiau naudodamas dbus-send, pati komanda yra žemiau esančiame scenarijuje. Jei kas žino kitų variantų, rašykite komentaruose
Dabar pradėkime rašyti scenarijų.
Pirmas dalykas, kurį turime padaryti Power Manager, yra pasirinkti Išjungti ekraną kaip veiksmą uždarant dangtį, kad nekiltų prieštaravimų su scenarijumi.
Tada sukurkite failą /etc/acpi/events/laptop-lid su tokiu turiniu:
event=button/lid.*
action=/etc/acpi/laptop-lid.sh
ir sukurkite scenarijų /etc/acpi/laptop-lid.sh su tokiu turiniu:
#!/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
Scenarijaus paleidimas:
sudo chmod a+x /etc/acpi/laptop-lid.sh
Ir iš naujo paleiskite acpid demoną, kad būtų pritaikyti pakeitimai:
sudo systemctl restart acpid.service
Viskas yra pasirengusi.
„Gnome“ scenarijuje turite pakeisti:
- lxsessin => gnome-sesija
- org.freedesktop.ScreenSaver => org.gnome.ScreenSaver
Šaltinis: www.habr.com