ワイヤレスキーボードで常に指定されたレイアウトを使用するようにする

ワイヤレスキーボードで常に指定されたレイアウトを使用するようにする

これは質問に対する返答に対するコメントであるべきだUSB キーボードに別のキーボード レイアウトを永続的に割り当てるにはどうすればよいでしょうか?コメントはできないので、新しい質問を載せておきます。@Sadi が読んでくれるといいのですが:

その後、ワイヤレス キーボードとマウスが動作しなくなりました。デバイス名に「USB キーボード」という文字列が含まれていないことが原因の可能性があります。

lsusb
Bus 003 Device 088: ID 046a:010b Cherry GmbH

xinput -list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ MLK Wireless Desktop                  id=15   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
 ↳ MLK Wireless Desktop                     id=14   [slave  keyboard (3)]

したがって、私の GREP 行は次のようになります。

xinput -list | grep 'Wireless Desktop.*keyboard' "$@"

レイアウトを変更するには、IDをメモして入力するだけです

setxkbmap -device 14 {language code}

コンピューターがこのデバイスを認識し、接続すると正しい言語で表示されるように、これを永続的に修正する方法について何かアイデアはありますか?


考えられる手がかりは次のとおりです:

答え1

私が知る限り(あまり多くはありませんが)、udevルール最近動作しなくなりました。現時点で機能していると思われる唯一の解決策は、ユーザーがログインする前に 2 番目のキーボードが接続されていることを前提とする単純な起動スクリプトです。そうでない場合は、ユーザーが後でそのスクリプトを手動で実行する必要があります。

このスクリプトはUSBキーボードで動作することがテストされています(こちら:https://askubuntu.com/a/337431/47343)は当然修正されるべきであるワイヤレスキーボード、それは以下のようなものになるかもしれません。

注 1: 必要なキーボード レイアウト コードを入力することに加えて、著者は「アマチュア」(ほぼ初心者レベル) の「スクリプト ライター」であるため、試行錯誤 (たとえば、最初にターミナル ウィンドウに各行を入力する) が必要になる場合があります ;-)

#!/bin/bash
extkbd=`xinput -list | grep -c "Wireless.*keyboard"`
if [[ "$extkbd" -gt 0 ]]
then
    extkbd_id1=`xinput -list | grep "Virtual core keyboard" | awk -F'=' '{print $2}' | cut -c 1-2`
    extkbd_id2=`xinput -list | grep "Wireless.*keyboard" | awk -F'=' '{print $2}' | cut -c 1-2`
    extkbd_layout="<kbdlayoutcode>"
    setxkbmap -device "${extkbd_id1}" -layout "${extkbd_layout}"
    setxkbmap -device "${extkbd_id2}" -layout "${extkbd_layout}"
    notify-send -i input-keyboard "Wireless Keyboard" "is ready and set for use..."
fi
exit 0

注 2: システムは 1 つのハードウェアに 2 つのデバイス ID を割り当てるようですが、両方のデバイス ID に同じキーボード レイアウト コードを割り当てる方が安全であることがわかりました。

関連情報