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


28

キーボードとマウスをプログラムで一時的に「フリーズ」して、だれもシステムを操作できないようにするにはどうすればよいですか。

これが役立ついくつかの可能性があります。たとえば、私はラップトップを持っているので、誰かがパスワードを知っていたり、(妻や子供のように)推測したり、泥棒の食欲を落ち込ませたり(それは気分が悪いように見えるので) -機能)。または私はリモートで何かをしているので、コンピュータのユーザーが邪魔しないようにしたいです。


回答:


24

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 9 "Device Enabled" 8 0のみ、1)マウスポインターも非表示にしたい、2)Xからtty(Linuxコンソール/ VT)に移動した場合、およびXに戻ると、これはリセットされます(xinput list-props 9これを確認します)。
エマニュエルベルク

「マスターポインター」デバイスを無効にできますか?
ed22

14

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

Philomathの投稿への私のコメントをチェックしてください。私も同じ問題を抱えていxinput --disable 9ます。
エマニュエルベルク

6

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

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

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


これは私が望む種類のソリューションであるため、私はこれに投票しましたが、シャドウパスワードを使用するLinuxでは機能しません。/ etc / shadowおよび関連する機能にアクセスするには、プロセスがrootである必要がありますが、xlを非rootユーザーとして実行したいです。私のユースケース:コンピューターで番組を見るとき、私の娘はキーボードを叩くのが好きです!xscreensaverはこれに役立ちません
サムワトキンス

あなたの答えは、「サックレス」またはUnixプログラミング「1つのことをして、それをうまくやる」の素晴らしい例です...それは私にとってはうまくいきません(シャドウパスワードで!) -パスワードをコーディングしてください、それで大丈夫です。今、電源ボタンを無効にする方法を教えてください、それは私の赤ちゃんのお気に入りのボタンです!
サムワトキンス

なぜルートが欲しくないのですか?xlバイナリをsuidしませんか?
ダニーデュライ

ところで、コマンドラインで、または環境変数を介してパスワードを指定できるようになりました。
ダニーデュライ14

X入力イベントを標準のXツールセットとシェルスクリプトで食べることは可能ですか?
アレクサンダーシュチェブリキン14

2

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

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


更新しました。
フィロマス

2

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

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


これは最もシンプルで軽量なオプションのように思えますが、90年代半ばからも使用されています。問題の1つは、ロックされたカーソルイメージを非表示にできないことです。残念ながら、これはサイネージに使用できなくなります。
aexl

1

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

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

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


1

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

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


更新しました。
フィロマス

1

上記の回答の助けを借りて、これを行うために(で.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  }

SOでの同様の質問に対する私の答えを確認してください-それは同じですが、ttyから呼び出すことができ、また(回避策を使用して)ポインターを隠します。
エマニュエルベルク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.