後で接続するキーボードのキーマップをどのように設定しますか?

後で接続するキーボードのキーマップをどのように設定しますか?

これはsetxkbmap.xinitrcのラップトップの内部キーボードだけでなく、Xサーバーの起動時に接続された外部キーボードでも機能します。後で外部キーボードを接続すると、デフォルトのUSキーマップが使用されます。

私が接続したキーボードが私が望むレイアウトを持っていることをどうやって確認しますか?

答え1

Gillesが昨日のDominik Rの答えについて述べたように、udevアプローチはルートでのみ機能し、一般的な非特権ソリューションではうまく機能しません。私は、Debianのinputplugパッケージで提供されているAndrew Shaduraのinputplug(1)の使用を検討することをお勧めします。プロジェクトサイト

inputplug(1)は、デコードされたイベントパラメータを引数として使用してスクリプトを呼び出す非常に単純なXINPUTイベントループリスナーです。 .xinitrcを使用しているので、適切なウィンドウマネージャ/環境を使用しており、このバックグラウンドリスナーはあなたにとって非常に簡単です。

もう一つの可能​​性は、あまり伝統的な方法でudevを使用することです。つまり、「udevadm Monitor」の出力を解析し、一致するデバイスが接続され識別されたら、setxkbmapを呼び出すスクリプトを作成します。

頑張ってください!

答え2

inputplug5年前にetherfishが投稿したのは良い答えですが、答えには完全な例がありません。したがって、これは最初に使用し、.xinitrc新しいキーボードを接続するたびに実行されるコマンドです。setxkbmap

{ echo "XIDeviceEnabled XISlaveKeyboard"; inputplug -d -c /bin/echo; } |
while read event
do
        case $event in
        XIDeviceEnabled*XISlaveKeyboard*)
                setxkbmap -option grp:switch,grp:shift_toggle,grp_led:scroll us,il ,lyx
                setxkbmap -option caps:none
                ;;
        esac
done &

inputplug -d -c /bin/echo同様のメッセージをエコー

XIDeviceEnabled 11 XISlaveKeyboard Logitech K270

キーボードが接続されるたびに、whileループはそのようなメッセージを見つけて関連setxkbmapコマンドを実行します(私の例ではヘブライ語のキーマップを設定し、私が嫌いなCaps Lock機能を削除しました)。先頭の追加部分echo "XIDeviceEnabled XISlaveKeyboard"のために、ループは最初も正確に一度「新しいキーボード」を探します。inputplug起動時に既存のキーボードを印刷する「-0」オプションもありますが、通常は複数のキーボードを印刷して、起動時に不必要にsetxkbmap複数回実行するようにします。

関連情報