Waylandセッションでラップトップカバーが閉じたときに入力デバイスを自動的に無効にするにはどうすればよいですか?

Waylandセッションでラップトップカバーが閉じたときに入力デバイスを自動的に無効にするにはどうすればよいですか?

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:

関連情報