私はメカニカルキーボードにビールをこぼしました。それは、押すたびに「a」キーを繰り返す傾向があるためです(はい、何度か掃除しましたが、使用しましたaalcoholなど)。 「バウンスキー」を使用してこの問題を軽減しようとしましたが、この機能は、aaが押された後、一時的にall keysを無効にします。言い換えると、「バウンスキー」は、繰り返し文字(単語「文字」の「t」のように<)または繰り返しを含む単語を入力する必要があるときに、すばやく入力する能力を妨げます。 aaaバックスペースをすばやく押します。
(OK私は残りのテキストに繰り返しを残しませんが、maadenning frequencyで発生することがわかります)
それが役立つ場合は、xevを使用して、OSが受信しているコマンドのシーケンスを正確に判断しました。これは、「a」が繰り返されるたびに、キーボードが目的のシーケンスを複数回送信しているためです(KeyPressの後にKeyRelease、次にKeyPressその後、再びKeyReleaseが続きます)。言い換えると、キーは「KeyPress」状態で固定されていません。それはそれ自身を繰り返していますのように私はそれを複数回押して、離しました。
他の人が同じ質問をするのを見てきましたが、解決策は実際に私が求めているものではありません。たとえば、 この質問 の最初の回答で提案された解決策はオートリピートを無効にしますが、「a」が「Pressed」状態でスタックしないため、私にとっては機能しません。同じ質問の2番目の回答も問題のあるキーが押された後にキーボード全体を無効にするため、機能しません。 「a」キーを一時的に無効にして、「a」キーのみを非常に短い時間(〜50ms)だけ無効にしたい
幸いなことに、タイプするときに文字「a」を繰り返す必要はほとんどありません。そのため、オートコレクトのようなものを使用するソリューションでもうまくいきます。できれば、xbindkeysを使用するソリューションを使用したいのですが、既にそのパッケージを使用して、マウスボタンを再マップしています。
編集:以下のコメントへの応答として、ここに「xinput list」と「xev」の出力があります:
$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ SINOWEALTH Game Mouse id=9 [slave pointer (2)]
⎜ ↳ EST Gaming keyboard id=12 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Power Button id=7 [slave keyboard (3)]
↳ SINOWEALTH Game Mouse Keyboard id=10 [slave keyboard (3)]
↳ EST Gaming keyboard id=11 [slave keyboard (3)]
↳ EST Gaming keyboard id=13 [slave keyboard (3)]
↳ Eee PC WMI hotkeys id=15 [slave keyboard (3)]
↳ EST Gaming keyboard id=16 [slave keyboard (3)]
$ xev
KeyPress event, serial 37, synthetic NO, window 0x7c00001,
root 0x4e5, subw 0x0, time 188722500, (165,-16), root:(4636,676),
state 0x10, keycode 38 (keysym 0x61, a), same_screen YES,
XLookupString gives 1 bytes: (61) "a"
XmbLookupString gives 1 bytes: (61) "a"
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic NO, window 0x7c00001,
root 0x4e5, subw 0x0, time 188722576, (165,-16), root:(4636,676),
state 0x10, keycode 38 (keysym 0x61, a), same_screen YES,
XLookupString gives 1 bytes: (61) "a"
XFilterEvent returns: False
@Raffaによる提案を実装する際、キーボードIDに「3」を使用し、キーコードを38のままにしました。しかし、キーはまだ重複しています。
これをbash
スクリプトファイルで試してください。
#!/bin/bash
xinput test 11 |
while read pkc
do
if [[ "$pkc" =~ "key press 38" ]]
then
xmodmap -e 'keycode 38 = ';
sleep 0.5;
xmodmap -e 'keycode 38 = a A';
fi
done
11
の番号xinput test 11
をキーボードのデバイス番号に変更します。この番号はxinput list
を実行して確認できます。 id
番号がキーボードに適しているかどうかを確認する必要がある場合があります。そのためには、キーボードのid
番号の前にslave keyboard
を付けて選択し、次にxinput test id_number
を実行してターミナルでid
を確認し、 a キーボードで。 key press 38
のような出力が表示された場合、これは現在のキーボードの正しいid
番号であり、出力がない場合は、出力が表示されるまで他のid
番号のテストを続けます。
38
および"key press 38"
およびxmodmap -e 'keycode 38 = ';
のnuber xmodmap -e 'keycode 38 = a A';
を、 a キー。この番号を見つけるには、xev
を実行し、 a キー。
0.5
のsleep 0.5;
の数値を、 a 無効にするキー。
スクリプトファイルを作成して使用する手順:
nano ~/no_aa.sh
上記のコード(変更後)をコピーしてエディターに貼り付けます。
スクリプトファイルを保存し、を押してエディターを終了します。 Ctrl + X 次に押します Y。
ターミナルで次のコマンドを実行して、スクリプトファイルを実行可能にします。
chmod +x ~/no_aa.sh
bash ~/no_aa.sh