web-dev-qa-db-ja.com

入力イベントに基づいてキーボードレイアウトを切り替えます

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

理論的には、コンピューターが入力イベントがどのキーボードから来るかを理解し、キーボードに関連付けられたレイアウトを使用できるはずです。調べてみましたが、良い答えは見つかりませんでした。そうすることは可能ですか?

キーボードイベントを分析する短いコードを書いて切り替えを行うことができると思っていましたが、:

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

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

3
billx

これは、キーボードを個別に構成することで実行できます。たとえば、ラップトップのキーボードで米国英語のレイアウトを使用し、ドイツ語のレイアウトの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
4
Andreas Wiese