Здраво на сите, јас користам Л.ubuntu 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 на параметрите за иницијализација на кернелот. За да го направите ова, додадете resume=UUID=%твој 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 => гном-сесија
- org.freedesktop.ScreenSaver => org.gnome.ScreenSaver
Извор: www.habr.com
