ΠŸΠ΅Ρ€ΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ скрипт ΠΏΡ€ΠΈ затварянС Π½Π° ΠΊΠ°ΠΏΠ°ΠΊΠ° Π½Π° Π»Π°ΠΏΡ‚ΠΎΠΏΠ° ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° Π΅ΠΊΡ€Π°Π½Π° Π±Π΅Π· заспиванС

Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅ всички. Използвам Lubuntu 18.04 Π½Π° домашния си Π»Π°ΠΏΡ‚ΠΎΠΏ. Π•Π΄ΠΈΠ½ прСкрасСн Π΄Π΅Π½ Ρ€Π΅ΡˆΠΈΡ…, Ρ‡Π΅ Π½Π΅ съм Π΄ΠΎΠ²ΠΎΠ»Π΅Π½ ΠΎΡ‚ дСйствията, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Power Manager ΠΏΡ€ΠΈ затварянС Π½Π° ΠΊΠ°ΠΏΠ°ΠΊΠ° Π½Π° Π»Π°ΠΏΡ‚ΠΎΠΏΠ°. Π˜ΡΠΊΠ°Ρ… Π΄Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°ΠΌ Π΅ΠΊΡ€Π°Π½Π° ΠΏΡ€ΠΈ затварянС Π½Π° ΠΊΠ°ΠΏΠ°ΠΊΠ° Π½Π° Π»Π°ΠΏΡ‚ΠΎΠΏΠ° ΠΈ слСд извСстно Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° изпратя Π»Π°ΠΏΡ‚ΠΎΠΏΠ° Π² хибСрнация. Написах сцСнарий Π·Π° Ρ‚ΠΎΠ²Π° ΠΈ Π±ΡŠΡ€Π·Π°ΠΌ Π΄Π° Π³ΠΎ сподСля с вас.

Π‘Π±Π»ΡŠΡΠΊΠ°Ρ… сС с Π΄Π²Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.

ΠŸΡŠΡ€Π²ΠΎ, хибСрнацията Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π²Π΅Π΄Π½Π°Π³Π° Π² Lubunta; Π·Π° Π΄Π° я Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅, трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ слСдното.

НамСрСтС размяната Π½Π° UUID, Π·Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, трябва Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅:

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=%your 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 Π΅ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌ Π˜Π·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° дисплСя ΠΊΠ°Ρ‚ΠΎ дСйствиС ΠΏΡ€ΠΈ затварянС Π½Π° ΠΊΠ°ΠΏΠ°ΠΊΠ°, Π·Π° Π΄Π° няма ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ с нашия скрипт.

ΠŸΠ΅Ρ€ΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ скрипт ΠΏΡ€ΠΈ затварянС Π½Π° ΠΊΠ°ΠΏΠ°ΠΊΠ° Π½Π° Π»Π°ΠΏΡ‚ΠΎΠΏΠ° ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° Π΅ΠΊΡ€Π°Π½Π° Π±Π΅Π· заспиванС

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» /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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€