USBキーボードが接続されているときにキーボードレイアウトがリセットされないようにする

USBキーボードが接続されているときにキーボードレイアウトがリセットされないようにする

USBキーボードを接続するたびに、すべてのキーボードのレイアウトが一部のシステムデフォルト(必要な修飾子と追加キーのないアメリカのレイアウト)にリセットされます。私はUbuntu 16.04と18.04を含む多くのDebianとUbuntuシステムでこれを観察しました。そのような行動長い間周りにいた

私はデスクトップ環境なしでX11を使用しています(一部のGnome悪魔はX11を使い始める傾向がありますが)。… | xkbcomp - "$DISPLAY"ログイン時にXKB(具体的に)を使用してキーボードレイアウトを設定します。

USBキーボードを接続するときは、システムレイアウトではなく私のレイアウトを持つことを望みます。実際、システムが既存のキーボード(存在する場合)と新しく挿入されたキーボードの両方に対して現在のレイアウトを引き続き使用したいと思います。これが不可能な場合は、レイアウトを再適用することにします。選択しました。

同様に、両方のキーボードの繰り返し速度は、を使用して設定した速度ではなく、ログイン時にデフォルトに設定されますxset r

キーボードホットプラグがキーボードレイアウトと繰り返し速度をリセットするのを防ぐ方法は?それとも失敗した場合は、少なくとも選択したレイアウトにリセットするにはどうすればよいですか?

やや不器用な方法はudev ルールの使用。これは、Xサーバーが1つしかないと仮定しているので、不器用ですが、最も問題は、ユーザーがroot権限を持っていると仮定することです。root権限がありませんしたがって、udevルールの設定や編集に関する内容はXorg.confここには適用されません。

答え1

xkbcomp - "$DISPLAY"ログイン時にXKBを使用してキーボードレイアウト(具体的には... |)を設定します。

キーボードホットプラグがキーボードレイアウトと繰り返し速度をリセットするのを防ぐ方法は?

リセットするわけではありません。すでにキーボードが接続されていて、2番目のキーボードを追加している場合、古いキーボードは同じ設定を引き続き使用します。

問題は、xkb構成クライアント側(使用xkbcomp)またはサーバー側(使用setxkbmap)をロードすると、「コアキーボード」抽象化ではなく、既存の物理デバイスにのみレイアウトが適用されることです。デバイスのプラグを抜くと、その設定が失われます。

解決策は、キーボードを追加し、コールxkbcomp/setxkbmap希望の設定を使用するときに自分自身を監視することです。xset r rate

そのためにはいいえudevルールやroot権限は必要ありません。どのX11クライアントプログラムは、入力デバイスの変更を監視し、X11入力拡張を介してそのデバイスで動作できます。

このプログラムはシェルで利用可能で、apt-getDebianや同様のディストリビューションに簡単にインストールできますinputplug

例:

$ cat ./on-new-kbd
#! /bin/sh
keymap=/path/to/your/keymap

echo >&2 "$@"
event=$1 id=$2 type=$3

case "$event $type" in
'XIDeviceEnabled XISlaveKeyboard')
        xset r rate 200 50
        xkbcomp -i "$id" "$keymap" "$DISPLAY"
esac

$ chmod 755 ./on-new-kbd

$ inputplug -d -c ./on-new-kbd

<plug keyboard>

XIDeviceEnabled 13 XISlavePointer GASIA USB KB V11
XISlaveAdded 13 XIFloatingSlave GASIA USB KB V11
XISlaveAdded 14 XIFloatingSlave GASIA USB KB V11
XIDeviceEnabled 14 XISlaveKeyboard GASIA USB KB V11

-iオプションに注意してくださいxkbcomp。キーボードごとに異なる設定を使用できます。このプロトコルを使用すると、デバイスごとに繰り返し速度を設定することもできますが、どのように使用するのかわかりませんxset

もちろん、ウィンドウマネージャ/デスクトップ環境自体がこれらのイベントを受け取り、設定を上書きできます。

答え2

2つのシステム間でキーボードを共有するためにUSBスイッチを使用しても、同じ問題が発生しました。 Pop!_OS 20.04 LTSシステム(Debian / Ubuntu派生)に戻ったときに設定が消えました。私は1つのように振る舞うためにgnome-tweak設定を使用してきました。Caps LockCtrl

これはいつも私にとって効果的だった設定です。gnome-tweak問題を解決するために実行を続ける必要がないように、必要に応じて設定するこのコマンドライン方法を見つけました。

dconf write  /org/gnome/desktop/input-sources/xkb-options "['caps:ctrl_modifier']"

マニュアルページxkeyboard-configxkb-options簡単な説明で許容される値のリストがあります。

この問題が発生するのを防ぐ方法がわかりませんが、今はコマンドラインで問題を解決できるので、もう迷惑になりません。

関連情報