入力イベントに応じてキーボードレイアウトを切り替える

入力イベントに応じてキーボードレイアウトを切り替える

私のコンピュータにはフランス語とアメリカのキーボードがあります。私は素晴らしいwmを使用しており、キーボードレイアウトを簡単に切り替えることができるようにすべてを設定しました。しかし、まだ自分でやらなければなりません。

理論的には、コンピュータは入力イベントがどのキーボードから来たのかを理解し、キーボード関連のレイアウトを使用できる必要があります。確認しましたが、良い答えが見つかりませんでした。これは可能ですか?

キーボードイベントを分析して切り替える短いコードを書くことができるようですが、次のようになります。

  • イベントハンドラと並行して実行されるため、並行性の問題が発生する可能性があります(例:これ);
  • これは汚いアプローチのように見え、私はきれいな解決策を好みます。

ご協力ありがとうございます

答え1

キーボードを個別に設定するだけです。たとえば、私はノートブックキーボードにアメリカ英語のレイアウトを使用し、ドイツ語のレイアウトにはSun Type 6 USBキーボードがあり、キーボードには次のものがあります/etc/X11/xorg.conf.d/10-evdev.conf

# Default configuration for all keyboards not handled explicitly
Section "InputClass"
     Identifier "evdev keyboard catchall"
     MatchIsKeyboard "on"
     MatchDevicePath "/dev/input/event*"
     Driver "evdev"

     Option "XkbRules"   "evdev"
     Option "XkbModel"   "pc105"
     Option "XkbLayout"  "us(altgr-intl),de,ru"
     Option "XkbOptions" "lv3:menu_switch,caps:hyper,compose:ralt,grp:rctrl_rshift_toggle,terminate:ctrl_alt_bksp"
EndSection

# Match the external keyboard by USB ID
Section "InputClass"
    Identifier "Sun Type 6"
    MatchIsKeyboard "on"
    MatchUSBID "0430:0005"

    Driver "evdev"
    Option "XkbRules"   "evdev"
    Option "XkbModel"   "sun(type6)"
    Option "XkbLayout"  "de"
    Option "XkbOptions" "caps:hyper,compose:menu,terminalte:ctrl_alt_bksp"
EndSection

関連情報