关闭笔记本电脑盖子并锁定屏幕而不睡眠时的自定义脚本

大家好。 我在家用笔记本电脑上使用 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

来源: habr.com

添加评论