どのキーボードが特定のキーを押したのか、どうすればわかりますか?

どのキーボードが特定のキーを押したのか、どうすればわかりますか?

私は多くの場合、複数のキーボードが取り付けられたペアリングステーションで作業します。setxkbmapwithを使用して-device <ID>特定のキーボードのレイアウトを設定できます。身分証明書:xinput)、しかし一般的に私が使用しているキーボードでは明確ではありません。 2つのキーボードの間を行き来しないでください。したがって、このためのクイックツールを作成したかったのですsetxkbmap。一般的なユースケースは次のとおりです。

$ setxkbmap -device "$(get-keyboard-id)" -layout gb
Press Enter to detect keyboard ID

Linuxのどのインタフェースがこの情報を提供しますか?理想的にはXなしで動作する必要がありますが、これは必須ではありません(Xなしでそれをサポートするツールはあまりありません)。


現在までの調査結果:

  • Linux〜しなければならない同時に、複数のキーボードのさまざまなレイアウトをサポートするためにどのキーボードを入力しているかを確認します。
  • xinput→list.c→→list_xi2利用XIQueryDevice可能なデバイスIDを提供しますsetxkbmap
  • showkeyそしてxevキーボードIDは印刷されません。
  • xinput list-props $IDキーボードイベントが送信される場所を表示します。。しかし他の回答のコードデバイスがキーボードを認識するために何も印刷しないようです。
  • 最も可能な解決策の1つは、各キーボードIDに対して実行し、xinput --test <ID> &どのキーボードIDが最初に何かを返すことを確認することです。問題は、どの「キーボード」が何であるかを把握することです。実際に鍵:

    $ xinput | grep keyboard
    ⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
        ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
        ↳ Power Button                              id=6    [slave  keyboard (3)]
        ↳ Video Bus                                 id=7    [slave  keyboard (3)]
        ↳ Power Button                              id=8    [slave  keyboard (3)]
        ↳ Sleep Button                              id=9    [slave  keyboard (3)]
        ↳ WebCam SC-13HDL10931N                     id=10   [slave  keyboard (3)]
        ↳ AT Translated Set 2 keyboard              id=11   [slave  keyboard (3)]
    

ベストアンサー1

デバイスの無効化

どのキーボードがどのキーボードであるかを識別するアイデアは次のとおりです。次のコマンドを使用できます。x入力デバイスを有効または無効にします。

はい

$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=12   [slave  pointer  (2)]
⎜   ↳ TPPS/2 IBM TrackPoint                     id=13   [slave  pointer  (2)]
⎜   ↳ Logitech USB Receiver                     id=9    [slave  pointer  (2)]
⎜   ↳ Logitech USB Receiver                     id=10   [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)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Sleep Button                              id=8    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=11   [slave  keyboard (3)]
    ↳ ThinkPad Extra Buttons                    id=14   [slave  keyboard (3)]

上記の出力は私のThinkpadノートブックのさまざまなデバイスを示しています。キーボードは1つだけ接続されています。このキーボードは次のとおりです。

    ↳ AT Translated Set 2 keyboard              id=11   [slave  keyboard (3)]

次に、このデバイスで利用可能なプロパティを見てください。

$ xinput list-props "AT Translated Set 2 keyboard"
Device 'AT Translated Set 2 keyboard':
    Device Enabled (124):   1
    Coordinate Transformation Matrix (126): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.

上記で有効になっていることがわかりますので、無効にしてみましょう。

$ xinput set-prop "AT Translated Set 2 keyboard" "Device Enabled" 0

有効にするには:

$ xinput set-prop "AT Translated Set 2 keyboard" "Device Enabled" 1

このアイデア?

このコマンドを使用すると、キーボードのいずれかを有効または無効にして、どのキーボードを使用しているかを確認できます。

引用する

おすすめ記事