web-dev-qa-db-ja.com

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

USBキーボードを接続すると、すべてのキーボードのレイアウトがシステムのデフォルトにリセットされます(米国のレイアウトでは、修飾子やその他のキーが希望どおりにありません)。 Ubuntu 16.04や18.04を含む多くのDebianおよびUbuntuシステムでこれを観察しました。この動作 非常に長い間使用されてきました

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

USBキーボードを挿入するとき、システムレイアウトではなく、自分のレイアウトにしたいと考えています。実際、システムが既存のキーボードがあればそれでも、新しく挿入されたキーボードでも、現在のレイアウトを使い続けることを望みます。それが不可能な場合は、[〜#〜] i [〜#〜]が選択したレイアウトを再適用することで解決します。

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

キーボードホットプラグがキーボードレイアウトとリピート率をリセットしないようにするにはどうすればよいですか?または、少なくとも選択したレイアウトにリセットできるようにするにはどうすればよいですか? ?

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

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

キーボードホットプラグがキーボードレイアウトとリピート率をリセットしないようにするにはどうすればよいですか?

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

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

解決策は、キーボードが追加されたときに自分を監視し、好みの設定でxkbcomp/setxkbmapxset r rateを呼び出すことです。

そのためには、notにudevルールまたはroot権限が必要です。 anyX11クライアントプログラムは、X11入力拡張を介して入力デバイスへの変更を監視し、それらに作用することができます。

そのためにシェルから使用でき、Debianおよび類似のディストリビューションでapt-getを使用して簡単にインストールできるプログラムは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

xkbcomp-iオプションに注意してください-キーボードごとに異なる設定を使用できます。このプロトコルでは、デバイスごとにリピート率を設定することもできますが、xsetでそれを行う方法はわかりません。

もちろん、ウィンドウマネージャー/デスクトップ環境自体がそれらのイベントをリッスンし、設定を上書きする場合があります。

3
mosvy