Propra skripto kiam oni fermas la tekkomputilon kovrilon kaj ŝlosas la ekranon sen dormo

Saluton al ĉiuj. Mi uzas Lubuntu 18.04 sur mia hejma tekkomputilo. Unu belan tagon mi decidis, ke mi ne estas kontenta pri la agoj, kiujn proponis Power Manager, kiam mi fermis la kovrilon de la tekkomputilo. Mi volis ŝlosi la ekranon fermante la kovrilon de la tekkomputilo kaj post iom da tempo sendi la tekkomputilon en vintrodormon. Mi skribis skripton por tio kaj mi rapidas dividi ĝin kun vi.

Mi renkontis du problemojn.

Unue, vintrodormo ne funkcias el la skatolo en Lubunta; por ebligi ĝin, vi devas fari la jenon.

Trovu la UUID-interŝanĝon, por fari tion vi devas ruli:

grep swap /etc/fstab

En mia kazo la eligo estas la sekva:

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

Tiam vi devas aldoni la UUID al la parametroj pri inicialigo de la kerno. Por fari tion, aldonu resume=UUID=%via UUID% al la linio "GRUB_CMDLINE_LINUX_DEFAULT" en la dosiero /etc/default/grub

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

Kaj rulu la komandon:

sudo update-grub

Nun vintrodormo devus funkcii, por kontroli, ke vi povas ruli:

sudo systemctl hibernate

La dua problemo estis kiel ŝlosi la ekranon de la uzanto kiel radiko sen sendi la tekkomputilon por dormi. Mi solvis ĝin per dbus-send, la komando mem estas en la suba skripto. Se iu konas aliajn eblojn, bonvolu skribi en la komentoj

Nun ni komencu verki la skripton.

La unua afero, kiun ni devas fari en Potenca Administranto, estas elekti Malŝalti ekranon kiel la ago kiam vi fermas la kovrilon, por ke ne estu konfliktoj kun nia skripto.

Propra skripto kiam oni fermas la tekkomputilon kovrilon kaj ŝlosas la ekranon sen dormo

Poste kreu dosieron /etc/acpi/events/laptop-lid kun la sekva enhavo:

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

kaj kreu skripton /etc/acpi/laptop-lid.sh kun la sekva enhavo:

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

Farante la skripton plenumebla:

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

Kaj rekomencu la acpid-demonon por ke la ŝanĝoj estu aplikataj:

sudo systemctl restart acpid.service

Ĉio estas preta.

Por Gnome en la skripto vi devas ŝanĝi:

  • lxsessin => gnomo-sesio
  • org.freedesktop.ScreenSaver => org.gnome.ScreenSaver

fonto: www.habr.com

Aldoni komenton