キーボードとマウスをプログラムで一時的に "フリーズ"させて、システムを混乱させることができないようにするにはどうすればよいですか?
これが役立ついくつかの可能性があります。たとえば、私はラップトップを持っていて、誰かがパスワードを知っていたり、それを推測したりしても(妻や子供など)、泥棒の食欲を抑圧する(不快に思われる)場合でも、離れる間はだれもそれを使用しないようにします。 -機能)。または私はリモートで何かをしているので、コンピュータのユーザーが邪魔しないようにしたいです。
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つだけを無効にするなどです。
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
Xinputを使用した答えは正しいものですが、探しているすべてが単純なスクリーンセーバータイプのロックである場合、ここで簡単な質問があります。私はこれを90年代に書き戻しました。パスワードを入力するまで、Xサーバーのキーボードとマウスのイベントを食べるだけです。正しく入力したときに終了する以外、フィードバックはまったくありません。
http://ishiboo.com/~danny/Projects/xl/
私はそれをスクリーンロックとして使っています。
あなたの答えはおそらく2番目のユースケース(リモートで何かを行う)に最適ですが、おそらく最初の(キーボードから離れている)ユースケースには適していません。戻ったときに、どのようにしてxinputを再度実行してアクセスを復元しますか?
システムを離れている間にロックするための標準的な解決策は XScreenSaver で、これはほとんどのディストリビューションにデフォルトでインストールされています。キーボードをロックするように構成されている場合、ロックを解除する前にパスワードの入力を求められます。
少なくともUbuntuなどのDebianベースのシステムでは、パッケージリポジトリから利用可能な xtrlock (1)
というユーティリティがあります。
このユーティリティは、ウィンドウを表示したままパスワードを入力するまでキーボードとマウスをロックします。情報ディスプレイなどを実行しているコンピュータに役立ちます。
デスクトップ環境またはログインマネージャー(GNOME、KDE、XFCE、LXDE)を使用している場合、それらのほとんどすべてにロック画面機能があり、プログラムに戻るにはパスワードを入力する必要があります。
しかし、それは本当に簡単なので、あなたの問題はより複雑/異なると感じます。
ハードウェアによっては、モジュールを取り外してハードウェアを制御できます。タッチパッドを有効または無効にするスクリプトtouchpadtoggle
があります。
lsmod | grep -q psmouse && rmmod psmouse || modprobe psmouse
しかし、キーボードにはモジュールが関連付けられていないようで、psmouse-moduleはたまにしか機能しません。
私はこれを(.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 }