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

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

USBキーボードを接続すると、すべてのキーボードのレイアウトがシステムのデフォルト(修飾キーやその他のキーが希望どおりに表示されないUSレイアウト)にリセットされます。Ubuntu 16.04および18.04を含む多くのDebianおよびUbuntuシステムでこの現象を確認しました。この動作非常に長い間存在してきた

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

USBキーボードを挿入するとき、システムレイアウトではなく、自分のレイアウトにしたい。実際、既存のキーボード(ある場合)と新しく挿入したキーボードの両方で、システムが現在のレイアウトを使い続けてほしい。それが不可能なら、レイアウトを再適用して妥協する。選択しました。

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

キーボードのホットプラグによってキーボードのレイアウトとリピート速度がリセットされるのを防ぐにはどうすればよいですか?または、それができない場合は、少なくとも選択したレイアウトにリセットするにはどうすればよいでしょうか?

かなり不器用な方法があるが、udevルールでこれは、X サーバーが 1 つしかないことを前提としているため扱いにくく、さらに問題なのは、ユーザーが root 権限を持っていることを前提としていることです。ルート権限がありませんしたがって、udev ルールの設定や編集を伴う方法はXorg.confここでは適用できません。

答え1

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

キーボードのホットプラグによってキーボードのレイアウトとリピート速度がリセットされるのを防ぐにはどうすればよいですか?

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

問題は、クライアント側で xkb 構成をロードする方法 ( を使用xkbcomp) またはサーバー側でロードする方法 ( を使用setxkbmap) のいずれの場合も、レイアウトは既存の実際のデバイスにのみ適用され、「Core Keyboard」抽象化には適用されないことです。デバイスが取り外されると、その設定は失われます。

解決策は、キーボードが追加されたときに自分自身を監視し、好みの設定で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

USB スイッチを使用して 2 つのシステム間でキーボードを共有したときに、同じ問題が発生しました。Debian/Ubuntu 派生システムである Pop!_OS 20.04 LTS システムに切り替えると、設定が消えてしまいます。のように動作するようにgnome-tweak設定して使用していました。Caps LockCtrl

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

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

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

この問題を回避する方法はわかりませんが、コマンドラインから修正できるようになったので、それほど煩わしくなくなりました。

関連情報