Kamusta kayong lahat. Gumagamit ako ng Lubuntu 18.04 sa aking home laptop. Isang magandang araw napagpasyahan kong hindi ako nasiyahan sa mga aksyon na inaalok ng Power Manager noong isinara ang takip ng laptop. Nais kong i-lock ang screen kapag isinara ang takip ng laptop at pagkaraan ng ilang sandali ipadala ang laptop sa hibernation. Sumulat ako ng script para dito at nagmamadali akong ibahagi ito sa iyo.
Nagkaroon ako ng dalawang problema.
Una, hindi gumagana ang hibernation sa labas ng kahon sa Lubunta; upang paganahin ito, kailangan mong gawin ang sumusunod.
Hanapin ang UUID swap, para magawa ito kailangan mong tumakbo:
grep swap /etc/fstab
Sa aking kaso ang output ay ang sumusunod:
# swap was on /dev/mmcblk0p2 during installation
UUID=aebf757e-14c0-410a-b042-3d9a6044a987 none swap sw 0 0
Pagkatapos ay kailangan mong idagdag ang UUID sa mga parameter ng pagsisimula ng kernel. Upang gawin ito, idagdag ang resume=UUID=%iyong UUID% sa linyang βGRUB_CMDLINE_LINUX_DEFAULTβ sa file /etc/default/grub
...
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=aebf757e-14c0-410a-b042-3d9a6044a987"
...
At patakbuhin ang utos:
sudo update-grub
Ngayon ay dapat gumana ang hibernation, upang suriin na maaari kang tumakbo:
sudo systemctl hibernate
Ang pangalawang problema ay kung paano i-lock ang screen ng user bilang root nang hindi pinapatulog ang laptop. Nalutas ko ito gamit ang dbus-send, ang utos mismo ay nasa script sa ibaba. Kung may nakakaalam ng iba pang mga pagpipilian, mangyaring sumulat sa mga komento
Ngayon simulan natin ang pagsulat ng script.
Ang unang bagay na kailangan nating gawin sa Power Manager ay piliin ang I-off ang display bilang aksyon kapag isinasara ang takip, upang walang mga salungatan sa aming script.
Pagkatapos ay lumikha ng isang file /etc/acpi/events/laptop-lid na may sumusunod na nilalaman:
event=button/lid.*
action=/etc/acpi/laptop-lid.sh
at lumikha ng isang script /etc/acpi/laptop-lid.sh na may sumusunod na nilalaman:
#!/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
Ginagawang maipapatupad ang script:
sudo chmod a+x /etc/acpi/laptop-lid.sh
At i-restart ang acpid daemon upang mailapat ang mga pagbabago:
sudo systemctl restart acpid.service
Lahat ay handa na.
Para sa Gnome sa script kailangan mong baguhin:
- lxsessin => gnome-session
- org.freedesktop.ScreenSaver => org.gnome.ScreenSaver
Pinagmulan: www.habr.com