Прилагођена скрипта приликом затварања поклопца лаптопа и закључавања екрана без спавања

Здраво свима. Користим Лубунту 18.04 на свом кућном лаптопу. Једног лепог дана одлучио сам да нисам задовољан радњама које је Повер Манагер нудио приликом затварања поклопца лаптопа. Хтео сам да закључам екран када затворим поклопац лаптопа и после неког времена пошаљем лаптоп у хибернацију. Написао сам сценарио за ово и журим да га поделим са вама.

Наишао сам на два проблема.

Прво, хибернација не функционише без употребе у Лубунти; да бисте је омогућили, потребно је да урадите следеће.

Пронађите замену УУИД-а, да бисте то урадили, потребно је да покренете:

grep swap /etc/fstab

У мом случају излаз је следећи:

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

Затим морате додати УУИД параметрима иницијализације кернела. Да бисте то урадили, додајте ресуме=УУИД=%ваш УУИД% у ред „ГРУБ_ЦМДЛИНЕ_ЛИНУКС_ДЕФАУЛТ“ у датотеци /етц/дефаулт/груб

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

И покрените команду:

sudo update-grub

Сада би хибернација требало да функционише, да бисте проверили да ли можете да покренете:

sudo systemctl hibernate

Други проблем је био како закључати екран корисника као роот без слања лаптопа у стање мировања. Решио сам то користећи дбус-сенд, сама команда је у скрипти испод. Ако неко зна друге опције, нека напише у коментарима

Сада почнимо да пишемо сценарио.

Прва ствар коју треба да урадимо у Повер Манагер-у је да изаберемо Искључи екран као радњу приликом затварања поклопца, тако да нема сукоба са нашом скриптом.

Прилагођена скрипта приликом затварања поклопца лаптопа и закључавања екрана без спавања

Затим креирајте датотеку /етц/ацпи/евентс/лаптоп-лид са следећим садржајем:

event=button/lid.*
action=/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

И поново покрените ацпид демон тако да промене буду примењене:

sudo systemctl restart acpid.service

Све је спремно.

За Гноме у скрипти морате да промените:

  • лксессин => гноме-сессион
  • орг.фреедесктоп.СцреенСавер => орг.гноме.СцреенСавер

Извор: ввв.хабр.цом

Додај коментар