X11実行acpidをインストールし、/etc/acpi/handler.shスクリプトを変更してxinputを使用してこれを実行できます。
button/lid)
case "$3" in
close)
#set variables so xinput can access the desktop session
XAUTHORITY=/home/netsplit/.Xauthority DISPLAY=:0 xinput disable 10
XAUTHORITY=/home/netsplit/.Xauthority DISPLAY=:0 xinput disable 11
logger 'LID closed'
;;
open)
XAUTHORITY=/home/netsplit/.Xauthority DISPLAY=:0 xinput enable 10
XAUTHORITY=/home/netsplit/.Xauthority DISPLAY=:0 xinput enable 11
logger 'LID opened'
しかし、xinputはWaylandでは動作しません。また、xauthorityはWaylandとは何の関係もありません。 libinputを見てみましたが、シェルで特定の機能を無効に/有効にする方法を提供していないようです。
手動でスリープモードを有効にすることを好むので、スリープはオプションではありません。時々、ラップトップカバーを閉じたまま作業することもあります。
場合によっては、カバーを閉じるとトラックパッドとキーボードがオフになり、複数のテキストとウィンドウに戻ることがあります。 Xでカバーを閉じたときに無効にすると問題が解決しました。 Waylandを動作させようとしています。
答え1
さて、私はPlasmaとWaylandでしか動作しないソリューションを見つけました。
Linux 5.11を追加禁止入力デバイスの属性はまさに私が望むものです。
私がしなければならないことは次のとおりです。
cat /proc/bus/input/devices | more
次に、入力デバイスSysfs = ...の値を見つけます。
たとえば、キーボードは次のようになります。
I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input3
U: Uniq=
H: Handlers=sysrq kbd leds event3 rfkill
B: PROP=0
B: EV=120013
B: KEY=20000 20 0 0 1100f02100000 3803078f900d401 feffffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=7
Sysfs=/devices/platform/i8042/serio0/input/input3 は、/sys/devices/platform/i8042/serio0/input/input3/inhibited に 1 を書き込むと、カーネルがキーボード入力を無効にすると通知します。再起動しないと解決しにくいので注意してください。
同様に、タッチパッドの値は Sysfs=/devices/platform/i8042/serio1/input/input8 です。同じ。 echo 1 > /sys/devices/platform/i8042/serio1/input/input8/inhibited はタッチパッドを無効にします。
実行方法の一部は次のとおりです。
acpidのインストール(正確なコマンドはパッケージマネージャによって異なります)
/etc/acpi/handler.sh を一番下になるように変更します。入力デバイスの sysfs 値が異なる場合は、パスを変更する必要があります。
button/lid)
case "$3" in
close)
echo 1 > /sys/devices/platform/i8042/serio1/input/input8/inhibited
echo 1 > /sys/devices/platform/i8042/serio0/input/input3/inhibited
logger 'LID closed'
;;
open)
echo 0 > /sys/devices/platform/i8042/serio1/input/input8/inhibited
echo 0 > /sys/devices/platform/i8042/serio0/input/input3/inhibited
logger 'LID opened'
;;
*)
logger "ACPI action undefined: $3"
;;
ちなみに、私の完全な/etc/acpi/handler.shファイルは次のようになります。
#!/bin/bash
# Default acpi script that takes an entry for all actions
case "$1" in
button/up)
;;
button/down)
;;
button/right)
;;
button/left)
;;
button/power)
case "$2" in
PBTN|PWRF)
logger 'PowerButton pressed'
;;
*)
logger "ACPI action undefined: $2"
;;
esac
;;
button/sleep)
case "$2" in
SLPB|SBTN)
logger 'SleepButton pressed'
;;
*)
logger "ACPI action undefined: $2"
;;
esac
;;
ac_adapter)
case "$2" in
AC|ACAD|ADP0)
case "$4" in
00000000)
logger 'AC unpluged'
;;
00000001)
logger 'AC pluged'
;;
esac
;;
*)
logger "ACPI action undefined: $2"
;;
esac
;;
battery)
case "$2" in
BAT0)
case "$4" in
00000000)
logger 'Battery online'
;;
00000001)
logger 'Battery offline'
;;
esac
;;
CPU0)
;;
*) logger "ACPI action undefined: $2" ;;
esac
;;
button/lid)
case "$3" in
close)
echo 1 > /sys/devices/platform/i8042/serio1/input/input8/inhibited
echo 1 > /sys/devices/platform/i8042/serio0/input/input3/inhibited
logger 'LID closed'
;;
open)
echo 0 > /sys/devices/platform/i8042/serio1/input/input8/inhibited
echo 0 > /sys/devices/platform/i8042/serio0/input/input3/inhibited
logger 'LID opened'
;;
*)
logger "ACPI action undefined: $3"
;;
esac
;;
*)
logger "ACPI group/action undefined: $1 / $2"
;;
esac
# vim:set ts=4 sw=4 ft=sh et: