web-dev-qa-db-ja.com

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

キーボードとマウスをプログラムで一時的に "フリーズ"させて、システムを混乱させることができないようにするにはどうすればよいですか?

これが役立ついくつかの可能性があります。たとえば、私はラップトップを持っていて、誰かがパスワードを知っていたり、それを推測したりしても(妻や子供など)、泥棒の食欲を抑圧する(不快に思われる)場合でも、離れる間はだれもそれを使用しないようにします。 -機能)。または私はリモートで何かをしているので、コンピュータのユーザーが邪魔しないようにしたいです。

28
Philomath

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つだけを無効にするなどです。

25
Philomath

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
14
user26112

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

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

私はそれをスクリーンロックとして使っています。

6
Danny Dulai

あなたの答えはおそらく2番目のユースケース(リモートで何かを行う)に最適ですが、おそらく最初の(キーボードから離れている)ユースケースには適していません。戻ったときに、どのようにしてxinputを再度実行してアクセスを復元しますか?

システムを離れている間にロックするための標準的な解決策は XScreenSaver で、これはほとんどのディストリビューションにデフォルトでインストールされています。キーボードをロックするように構成されている場合、ロックを解除する前にパスワードの入力を求められます。

2
cjm

少なくともUbuntuなどのDebianベースのシステムでは、パッケージリポジトリから利用可能な xtrlock (1) というユーティリティがあります。

このユーティリティは、ウィンドウを表示したままパスワードを入力するまでキーボードとマウスをロックします。情報ディスプレイなどを実行しているコンピュータに役立ちます。

2

デスクトップ環境またはログインマネージャー(GNOME、KDE、XFCE、LXDE)を使用している場合、それらのほとんどすべてにロック画面機能があり、プログラムに戻るにはパスワードを入力する必要があります。

しかし、それは本当に簡単なので、あなたの問題はより複雑/異なると感じます。

1
loosecannon

ハードウェアによっては、モジュールを取り外してハードウェアを制御できます。タッチパッドを有効または無効にするスクリプトtouchpadtoggleがあります。

lsmod | grep -q psmouse && rmmod psmouse || modprobe psmouse

しかし、キーボードにはモジュールが関連付けられていないようで、psmouse-moduleはたまにしか機能しません。

1
user unknown

私はこれを(.zshrcで記述しましたが、.bashrcでも機能するはずです)、上記の回答を利用してこれを記述しました。キーボードで対応させるには、grep Mouseのパラメーターを変更します。

setmouse () {
 xinput \
  $1 \
  `xinput | grep Mouse | tr -d " " | tr "\t" " " | cut -d" " -f2 | cut -d"=" -f2`
}
offmouse () { setmouse disable }
onmouse  () { setmouse enable  }
1
Emanuel Berg