Ноутбуктің қақпағын жауып, экранды ұйқысыз құлыптау кезінде реттелетін сценарий

Бәріңе сәлем. Мен үйдегі ноутбукте Lubuntu 18.04 пайдаланамын. Бір күні мен ноутбуктың қақпағын жабу кезінде Power Manager ұсынатын әрекеттерге көңілім толмайтынын шештім. Мен ноутбуктың қақпағын жапқан кезде экранды құлыптап, біраз уақыттан кейін ноутбукты күту күйіне жібергім келді. Мен осының сценарийін жаздым және оны сіздермен бөлісуге асығамын.

Мен екі мәселеге тап болдым.

Біріншіден, күту күйі Лубунтадағы қораптан тыс жұмыс істемейді; оны қосу үшін келесі әрекеттерді орындау керек.

UUID свопын табыңыз, мұны істеу үшін сізге келесі әрекеттерді орындау керек:

grep swap /etc/fstab

Менің жағдайда нәтиже келесідей:

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

Содан кейін UUID кодын ядроны баптандыру параметрлеріне қосу керек. Ол үшін /etc/default/grub файлындағы “GRUB_CMDLINE_LINUX_DEFAULT” жолына resume=UUID=%өз UUID% қосыңыз.

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

Және пәрменді іске қосыңыз:

sudo update-grub

Енді күту күйі жұмыс істеуі керек, тексеру үшін іске қосуға болады:

sudo systemctl hibernate

Екінші мәселе - ноутбукты ұйқы режиміне жібермей, пайдаланушының экранын түбірлік ретінде қалай құлыптау болды. Мен оны dbus-send арқылы шешдім, команданың өзі төмендегі сценарийде. Егер біреу басқа нұсқаларды білсе, түсініктемелерде жазыңыз

Енді сценарий жазуды бастайық.

Power Manager бағдарламасында бірінші істеуіміз керек нәрсе - сценарийге қайшылықтар болмауы үшін қақпақты жабу кезіндегі әрекет ретінде Дисплейді өшіру опциясын таңдау.

Ноутбуктің қақпағын жауып, экранды ұйқысыз құлыптау кезінде реттелетін сценарий

Содан кейін келесі мазмұны бар /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 демонын қайта іске қосыңыз:

sudo systemctl restart acpid.service

Бәрі дайын.

Сценарийдегі Gnome үшін сізге өзгерту қажет:

  • lxsessin => gnome-сессия
  • org.freedesktop.ScreenSaver => org.gnome.ScreenSaver

Ақпарат көзі: www.habr.com

пікір қалдыру