Պատվերով սկրիպտ՝ նոութբուքի կափարիչը փակելիս և էկրանն առանց քնելու արգելափակելիս

Բարեւ բոլորին. Ես օգտագործում եմ Lubuntu 18.04-ը իմ տան նոութբուքի վրա: Մի գեղեցիկ օր ես որոշեցի, որ ինձ չեն բավարարում այն ​​գործողությունները, որոնք Power Manager-ն առաջարկեց նոութբուքի կափարիչը փակելիս։ Ես ուզում էի կողպել էկրանը նոութբուքի կափարիչը փակելիս և որոշ ժամանակ անց նոութբուքն ուղարկել ձմեռային ռեժիմի: Ես դրա համար սցենար եմ գրել և շտապում եմ կիսվել ձեզ հետ։

Ես բախվեցի երկու խնդրի.

Նախ, ձմեռումը չի աշխատում Lubunta-ում, այն միացնելու համար հարկավոր է անել հետևյալը.

Գտեք UUID swap-ը, դա անելու համար պետք է գործարկել՝

grep swap /etc/fstab

Իմ դեպքում արդյունքը հետևյալն է.

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

Այնուհետև դուք պետք է ավելացնեք UUID-ը միջուկի սկզբնավորման պարամետրերին: Դա անելու համար ավելացրեք resume=UUID=%ձեր UUID%-ը ֆայլի «GRUB_CMDLINE_LINUX_DEFAULT» տողում /etc/default/grub:

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

Եվ գործարկեք հրամանը.

sudo update-grub

Այժմ ձմեռումը պետք է աշխատի, ստուգելու համար կարող եք գործարկել.

sudo systemctl hibernate

Երկրորդ խնդիրն այն էր, թե ինչպես կարելի է կողպել օգտատիրոջ էկրանը որպես root՝ առանց նոութբուքը քնելու ուղարկելու: Ես լուծեցի այն օգտագործելով dbus-send, հրամանն ինքնին գտնվում է ստորև նշված սցենարում: Եթե ​​որևէ մեկը գիտի այլ տարբերակներ, խնդրում ենք գրել մեկնաբանություններում

Հիմա սկսենք գրել սցենարը։

Առաջին բանը, որ մենք պետք է անենք Power Manager-ում, կափարիչը փակելիս որպես գործողություն ընտրելն է Switch off display, որպեսզի մեր սցենարի հետ հակասություններ չլինեն:

Պատվերով սկրիպտ՝ նոութբուքի կափարիչը փակելիս և էկրանն առանց քնելու արգելափակելիս

Այնուհետև ստեղծեք ֆայլ /etc/acpi/events/laptop-lid հետևյալ բովանդակությամբ.

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

և ստեղծեք /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

Սցենարը կատարելի դարձնելով՝

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

Եվ վերագործարկեք acpid daemon-ը, որպեսզի փոփոխությունները կիրառվեն.

sudo systemctl restart acpid.service

Ամեն ինչ պատրաստ է։

Script-ում Gnome-ի համար անհրաժեշտ է փոխել.

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

Source: www.habr.com

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