Pasirinktinis scenarijus uždarant nešiojamojo kompiuterio dangtį ir užrakinant ekraną be miego

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.

Pasirinktinis scenarijus uždarant nešiojamojo kompiuterio dangtį ir užrakinant ekraną be miego

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

Добавить комментарий