Laptopun qapağını bağlayarkən və ekranı yuxusuz kilidləyərkən xüsusi skript

Hamıya salam. Mən ev laptopumda Lubuntu 18.04 istifadə edirəm. Gözəl günlərin birində qərara gəldim ki, noutbukun qapağını bağlayarkən Power Manager-in təklif etdiyi hərəkətlər məni qane etmir. Laptopun qapağını bağlayarkən ekranı kilidləmək və bir müddət sonra noutbuku qışlama rejiminə göndərmək istədim. Bunun üçün bir ssenari yazdım və onu sizinlə paylaşmağa tələsirəm.

İki problemlə qarşılaşdım.

Birincisi, qışlama rejimi Lubunta-da qutudan kənarda işləmir; onu aktivləşdirmək üçün aşağıdakıları etməlisiniz.

UUID mübadiləsini tapın, bunu etmək üçün işə salmalısınız:

grep swap /etc/fstab

Mənim vəziyyətimdə çıxış aşağıdakı kimidir:

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

Sonra kernel başlatma parametrlərinə UUID əlavə etməlisiniz. Bunu etmək üçün /etc/default/grub faylında “GRUB_CMDLINE_LINUX_DEFAULT” sətirinə resume=UUID=%UUID% əlavə edin.

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

Və əmri yerinə yetirin:

sudo update-grub

İndi qışlama rejimi işləməlidir, işləyə biləcəyinizi yoxlamaq üçün:

sudo systemctl hibernate

İkinci problem, laptopu yuxu rejiminə göndərmədən istifadəçinin ekranını kök kimi necə kilidləmək idi. Mən bunu dbus-send istifadə edərək həll etdim, əmrin özü aşağıdakı skriptdədir. Başqa variantları bilən varsa, şərhlərdə yazın

İndi ssenarini yazmağa başlayaq.

Power Manager-də etməli olduğumuz ilk şey, skriptimizlə heç bir ziddiyyət olmaması üçün qapağı bağlayarkən ekranı söndürün seçimini etməkdir.

Laptopun qapağını bağlayarkən və ekranı yuxusuz kilidləyərkən xüsusi skript

Sonra aşağıdakı məzmunlu /etc/acpi/events/laptop-lid faylı yaradın:

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

və aşağıdakı məzmunlu /etc/acpi/laptop-lid.sh skripti yaradın:

#!/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

Skriptin icra edilə bilən edilməsi:

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

Və dəyişikliklərin tətbiq edilməsi üçün acpid demonunu yenidən başladın:

sudo systemctl restart acpid.service

Hər şey hazırdır.

Skriptdə Gnome üçün aşağıdakıları dəyişdirməlisiniz:

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

Mənbə: www.habr.com

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