Unix(Xの下)でキーボードとマウスの入力を無効にする

Unix(Xの下)でキーボードとマウスの入力を無効にする

誰もがシステムを台無しにしないようにキーボードとマウスをプログラム的に一時的に「固定」するにはどうすればよいですか?

多くの可能性があり、これは便利です。たとえば、私にはノートパソコンがありますが、私がいない間に誰かがパスワードを知っていたり推測したりしても(妻や子供のように)、誰もラップトップを使用できないようにし、泥棒の食欲を抑えたいと思います。 (不適切に見えるので)。 - 仕事)。または、リモートで作業していますが、コンピュータのユーザーが邪魔にならないことを確認したいと思います。

答え1

GUIがXベース(ほぼすべてのUNIX GUIの場合)であると仮定するとxinput

まず、デバイスをリストします。

$ xinput --list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Windows mouse                             id=6    [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
↳ Windows keyboard                          id=7    [slave  keyboard (3)]

マウスの詳細を一覧表示します(例ではid = 6)。

$ xinput --list-props 6
Device 'Windows mouse':
    Device Enabled (112):   1
    Coordinate Transformation Matrix (114): 1.000000, 0.000000, 0.000000, 0.000000,   1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (222):     0
    Device Accel Constant Deceleration (223):       1.000000
    Device Accel Adaptive Deceleration (224):       1.000000
    Device Accel Velocity Scaling (225):    10.000000

今すぐ無効にします。

$ export DISPLAY=:0
$ xinput set-int-prop 6 "Device Enabled" 8 0

有効にするには:

$ xinput set-int-prop 6 "Device Enabled" 8 1

キーボードでも同様です。 int-prop番号を正しいIDに置き換えてください。
Cygwinでテストして作業しています。

もちろん、デバイスを再度有効にする方法を事前に計画する必要があります。 cronで予約したり、リモートで再度有効にしたり、そのうちの1つを最初に無効にするなどの操作を実行します。

答え2

xinput --set-int-prop廃止予定です。を使用する必要があります--set-prop。また、xinput --enable [device]およびをxinput --disable [device]使用してデバイスをそれぞれ有効または無効にすることもできます。

以下は、ノートブックのタッチパッドを有効、無効、および切り替えるために使用するシェルスクリプトです。

#!/bin/bash
# Enables, disables, or toggles device

device='AlpsPS/2 ALPS GlidePoint'
if [[ $1 == -e ]] ; then
    # Enable
    #xinput --set-prop "$device" "Device Enabled" 1
    xinput --enable "$device"
elif [[ $1 == -d ]] ; then
    # Disable
    #xinput --set-prop "$device" "Device Enabled" 0
    xinput --disable "$device"
elif [[ $1 == -t ]] ; then
    # Toggle
    if [[ $(xinput list-props "$device" |
       grep "Device Enabled") == *:*1 ]] ; then
           #xinput --set-prop "$device" "Device Enabled" 0
           xinput --disable "$device"
    else
        #xinput --set-prop "$device" "Device Enabled" 1
        xinput --enable "$device"
    fi
else
    echo "usage: $0 [-edt]"
fi

答え3

xinputを使用して回答した質問は正確ですが、単純なスクリーンセーバータイプのロックを探している場合は、ここに簡単な質問があります。私はこの記事を90年代に書きましたが、この記事はあなたがパスワードを入力するまでXサーバーのキーボードとマウスイベントを食べるだけでした。正しく入力すると、終了以外のフィードバックはありません。

http://ishiboo.com/~danny/Projects/xl/

画面ロックとして使用しているので、好きな方法で正確に試してみてください。

答え4

あなたの回答は、2番目のユースケース(リモートでの作業の実行)に最も適している可能性がありますが、最初のユースケース(キーボードから離れている)には適していない可能性があります。戻ったときにxinputを再実行してアクセスを復元する方法は?

システムから離れたときにシステムをロックする標準的なソリューションは次のとおりです。XSスクリーンセーバー、ほとんどのディストリビューションにデフォルトでインストールされます。キーボードをロックするように設定されている場合は、ロックを解除する前にパスワードの入力を求められます。

関連情報