私のラップトップに内蔵されているキーボードが壊れています(Shiftボタンが時々押される)。外付けキーボードのみ使用するのに内蔵キーボードが干渉しますね。 (デバイスを取り外すことはできません。)
無効を使用できますが、xinput
再び有効になります(参照キーボードを永久に無効にする)。
デバイスを認識しました。 (lsinput
たとえば、インストールする必要がありますapt install input-utils
。)
sudo lsinput
/dev/input/event0
bustype : BUS_I8042
vendor : 0x1
product : 0x1
version : 43841
name : "AT Translated Set 2 keyboard"
phys : "isa0060/serio0/input0"
bits ev : EV_SYN EV_KEY EV_MSC EV_LED EV_REP
どうやって無効にしますか?
答え1
ブラックリストに載せることは一つの選択肢になります。同様に、atkbd
モジュールが渡されていて他のモジュールにも特定のモジュールが必要ない場合は、そのモジュールをブラックリストに追加してください。
それ以外の場合はunbind
オプションになる可能性があります。
テストするノートブックがないため、余分なマウスをシステムに接続してから無効にしました。
これはマウスです:
I: Bus=0003 Vendor=04f3 Product=0235 Version=0111
N: Name="OM"
P: Phys=usb-0000:00:14.0-10.1/input0
S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb2/2-10/2-10.1/2-10.1:1.0/0003:04F3:0235.0004/input/input12
U: Uniq=
H: Handlers=event12 mouse1
B: PROP=0
B: EV=17
B: KEY=70000 0 0 0 0
B: REL=903
B: MSC=10
現在経験していること/sys/bus/hid/...
:
# head /sys/bus/hid/drivers/*/*/*/*/name
==> /sys/bus/hid/drivers/hid-generic/0003:046A:010D.0001/input/input3/name <==
HID 046a:010d
==> /sys/bus/hid/drivers/hid-generic/0003:046A:010D.0002/input/input4/name <==
HID 046a:010d
==> /sys/bus/hid/drivers/hid-generic/0003:046D:C077.0003/input/input5/name <==
Logitech USB Optical Mouse
==> /sys/bus/hid/drivers/hid-generic/0003:04F3:0235.0004/input/input12/name <==
OM
わかりました、ここにエクスポートしましょう。
# echo 0003:04F3:0235.0004 > /sys/bus/hid/drivers/hid-generic/unbind
それは消えます。マウスカーソルが移動しなくなりました。入力デバイスとして表示されなくなりました。本当に消えた。
したがって、ingを使用してこのようなことを行うことができ、unbind
使用するドライバによってブラックリストに載せることもできます。主な問題は、バインドを解除する正しい名前と場所を見つけて、カスタムudevルールを使用して自動化することです。それ以外の場合は、プラグを抜いて再接続すると再び表示されます。
答え2
USBレベルを見ても修正可能な項目が表示されない場合は、次の2つのことは、入力レイヤーレベルでUSBレベルを「キャッチ」したり、Xレベルでアクティブにしたりするのを防ぐことです。
一等のために、
evtest --grab /dev/input/event0 > /dev/null
または同様の方法でトリックを実行する必要があります。スクレイピングは、スクレイピングアプリケーションのみがイベントを受信することを保証します。言い換えれば、Xはいかなるイベントも受け取りません。
2番目の項目の場合は、次の行に沿ってInputClass
セクションを追加してください。xorg.conf
Section "InputClass"
Identifier "BrokenKeyboard"
MatchDevicePath "/dev/input/by-path/platform-i8042-serio-0-event-kb"
Option "Ignore" "true"
EndSection
パスが実際にキーボードに接続されているパスであるとします。ここでは背中を使用しないでください/dev/input/event0
。クロスブートの一貫性を保証しません。
答え3
遅くともAppleユーザーのために上記の答えを少し説明したかったです。内部キーボードが故障したMBPを持っていますが、入力を受け取りevtest
に送信しますが、/dev/null
これが最も一般的なアドバイスのようです。この回避策の問題は、カーネルを更新するとイベント番号が変わり、ブート時に実行されるスクリプトがある場合は、すべてのカーネル更新で番号を手動で更新する必要があることです。これはusingが必要な部分unbind
であり、上記の答えがどのように私が最終的に放棄するようにインスピレーションを与えたかについて、evtest
私はこの作業を完璧にするように見える簡単な行を思い出しました。
完全なコマンドは次のとおりです。
head /sys/bus/hid/drivers/*/*/*/*/name | grep "apple" | sed -E 's/[^0-9A-F:.]*//g' | awk '{ print substr( $0, 1, length($0)-2 ) }' > /sys/bus/hid/drivers/apple/unbind
最初の部分が何をしているのかを知っているので、sed
andの必要性を説明しますawk
。head
aで実行すると、grep
次のような内容が出力されます。
/sys/bus/hid/drivers/apple/0003:046D:C077.0003/input/input18/name
これで、sed
16進文字以外のすべてを削除するために使用します。
0003:046D:C077.000318
入力番号も末尾に含まれていますが、必要ではないので、それを使用してawk
文字列の最後の2文字を削除します。
0003:046D:C077.0003
もちろん、この文字列をに送信する出力方向があります/sys/bus/hid/drivers/apple/unbind
。これを起動時に実行できるスクリプトに入れると、作業は完了です。hid-generic
デバイスに合わせて変更する必要があります。 Appleにはこれをより簡単にする独自の入力ドライバディレクトリがあるので、grep
「apple」だけを使用すれば十分です。
編集者:これがクラウドソーシング情報の美しさです。このソリューションを提供してくれた以下のStephen Kittに感謝します。私よりもはるかにエレガントで、入力デバイス番号を正しく考慮してください。
for name in /sys/bus/hid/drivers/apple/*/*/*/name; do device=$(cut -d/ -f7 <<<"$name"); [ "$device" != "*" ] && printf "%s" "$device" > /sys/bus/hid/drivers/apple/unbind; done