Hej alla. Jag använder Lubuntu 18.04 på min bärbara dator hemma. En vacker dag bestämde jag mig för att jag inte var nöjd med de åtgärder som Power Manager erbjöd när jag stängde locket till den bärbara datorn. Jag ville låsa skärmen när jag stängde locket till den bärbara datorn och efter ett tag skicka den bärbara datorn i viloläge. Jag skrev ett manus för detta och jag skyndar mig att dela det med dig.
Jag stötte på två problem.
För det första fungerar inte viloläge direkt i Lubunta; för att aktivera det måste du göra följande.
Hitta UUID-bytet, för att göra detta måste du köra:
grep swap /etc/fstab
I mitt fall är utgången följande:
# swap was on /dev/mmcblk0p2 during installation
UUID=aebf757e-14c0-410a-b042-3d9a6044a987 none swap sw 0 0
Sedan måste du lägga till UUID till kärninitieringsparametrarna. För att göra detta, lägg till resume=UUID=%ditt UUID% på raden "GRUB_CMDLINE_LINUX_DEFAULT" i filen /etc/default/grub
...
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=aebf757e-14c0-410a-b042-3d9a6044a987"
...
Och kör kommandot:
sudo update-grub
Nu borde viloläge fungera, för att kontrollera att du kan köra:
sudo systemctl hibernate
Det andra problemet var hur man låser användarens skärm som root utan att skicka den bärbara datorn i viloläge. Jag löste det med dbus-send, själva kommandot finns i skriptet nedan. Om någon vet andra alternativ, skriv gärna i kommentarerna
Låt oss nu börja skriva manuset.
Det första vi behöver göra i Power Manager är att välja Stäng av display som åtgärd när du stänger locket, så att det inte blir några konflikter med vårt skript.
Skapa sedan en fil /etc/acpi/events/laptop-lid med följande innehåll:
event=button/lid.*
action=/etc/acpi/laptop-lid.sh
och skapa ett skript /etc/acpi/laptop-lid.sh med följande innehåll:
#!/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
Göra skriptet körbart:
sudo chmod a+x /etc/acpi/laptop-lid.sh
Och starta om acpid-demonen så att ändringarna tillämpas:
sudo systemctl restart acpid.service
Allt är klart.
För Gnome i skriptet måste du ändra:
- lxsessin => gnome-session
- org.freedesktop.ScreenSaver => org.gnome.ScreenSaver
Källa: will.com