ラップトップの蓋を閉じてスリープせずに画面をロックするときのカスタム スクリプト

こんにちは、みんな。 自宅のラップトップで Lubuntu 18.04 を使用しています。 ある晴れた日、私はラップトップの蓋を閉じるときに Power Manager が提供するアクションに満足できないと判断しました。 ラップトップの蓋を閉じるときに画面をロックし、しばらくしてからラップトップを休止状態にしたいと思いました。 このためのスクリプトを書きましたので、急いで皆さんと共有します。

XNUMX つの問題に遭遇しました。

まず、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 をカーネル初期化パラメータに追加する必要があります。 これを行うには、ファイル /etc/default/grub の「GRUB_CMDLINE_LINUX_DEFAULT」行にresume=UUID=%your UUID%を追加します。

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

そして、次のコマンドを実行します。

sudo update-grub

これで休止状態が機能するはずです。次のコマンドを実行して確認します。

sudo systemctl hibernate

XNUMX 番目の問題は、ラップトップをスリープ状態にせずに、ユーザーの画面を 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

コメントを追加します