
これはsetxkbmap
私.xinitrc
のラップトップの内部キーボードだけでなく、Xサーバーの起動時に接続された外部キーボードでも機能します。後で外部キーボードを接続すると、デフォルトのUSキーマップが使用されます。
私が接続したキーボードが私が望むレイアウトを持っていることをどうやって確認しますか?
答え1
Gillesが昨日のDominik Rの答えについて述べたように、udevアプローチはルートでのみ機能し、一般的な非特権ソリューションではうまく機能しません。私は、Debianのinputplugパッケージで提供されているAndrew Shaduraのinputplug(1)の使用を検討することをお勧めします。プロジェクトサイト。
inputplug(1)は、デコードされたイベントパラメータを引数として使用してスクリプトを呼び出す非常に単純なXINPUTイベントループリスナーです。 .xinitrcを使用しているので、適切なウィンドウマネージャ/環境を使用しており、このバックグラウンドリスナーはあなたにとって非常に簡単です。
もう一つの可能性は、あまり伝統的な方法でudevを使用することです。つまり、「udevadm Monitor」の出力を解析し、一致するデバイスが接続され識別されたら、setxkbmapを呼び出すスクリプトを作成します。
頑張ってください!
答え2
inputplug
5年前に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
複数回実行するようにします。