Зөөврийн компьютерын тагийг хааж, дэлгэцийг унтаагүй түгжих үед захиалгат скрипт

Сайн уу. Би гэрийн зөөврийн компьютер дээрээ 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

Хоёрдахь асуудал бол зөөврийн компьютерээ унтуулахгүйгээр хэрэглэгчийн дэлгэцийг хэрхэн root хэлбэрээр түгжих вэ гэдэг асуудал байсан. Би үүнийг 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-session
  • org.freedesktop.ScreenSaver => org.gnome.ScreenSaver

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх