大家好。 我在家用筆記型電腦上使用 Lubuntu 18.04。 有一天,我發現我對關閉筆記型電腦蓋時電源管理器提供的操作不滿意。 我想在關閉筆記型電腦蓋子時鎖定螢幕,並在一段時間後讓筆記型電腦進入休眠狀態。 我為此寫了一個腳本,我趕緊與大家分享。
我遇到了兩個問題。
首先,休眠功能在 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% 新增至檔案/etc/default/grub 中的「GRUB_CMDLINE_LINUX_DEFAULT」行
...
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=aebf757e-14c0-410a-b042-3d9a6044a987"
...
並運行命令:
sudo update-grub
現在休眠應該可以工作,檢查您是否可以運行:
sudo systemctl hibernate
第二個問題是如何將使用者的螢幕鎖定為 root 而不讓筆記型電腦進入睡眠狀態。 我使用 dbus-send 解決了這個問題,命令本身位於下面的腳本中。 如果有人知道其他選項,請在評論中寫下
現在讓我們開始編寫腳本。
我們需要在電源管理器中做的第一件事是選擇關閉顯示作為關閉蓋子時的操作,這樣就不會與我們的腳本發生衝突。
然後建立一個包含以下內容的檔案 /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