OpenInputBridge · のどか

複数キーボード接続時にキーボードレイアウトを合わせる

ネットではいくつか情報が存在し、例えば以下のサイトでその内容を確認ができます。

Windows 11でJIS/US配列を共存させる
https://zenn.dev/gn5r/articles/coexistence-jis-and-us

設定の流れとしては、Windows 11の設定で「時刻と言語」→「言語と地域」→優先する言語のところで、一番上のものの「…」をクリックして、「言語のオプション」を選び、キーボードのところで、「レイアウトを変更する」をクリックする。

そして、日本語環境なら「日本語キーボード(106/109キー)」となっているのを、「接続済みキーボードレイアウトを使用する」に選択してから、そのあとで、各キーボードごとにレジストリを設定せよ。というのが概ね同じ流れである。

ただ、その各キーボードごとのレジストリ位置がとても難しいので、設定アプリを現在開発中です。すでに動いており、以下のような画面です。

画面は、向かって左上では、接続中のキーボードの一覧が表示され、右上では、左側で選択したキーボードの設定値が表示されます。画面の下部では、グローバル設定が表示されているというものです。

ここで、グローバル設定はすべて空になっていますが、これは、この画面の「グローバル設定を削除」をクリックして、再起動後の状態です。

これは、先のWindowsの設定での「接続済みキーボードレイアウトを使用する」を実行した場合に、LayerDriver KORの設定だけを残して、グローバルの設定がクリアされることを確認しており、設定からではなく、レジストリ値の削除で同じ状態になることを確認しています。

画面左上では、「HHKB-Studio」と出ています。これは コントロール パネル\ハードウェアとサウンド\デバイスとプリンターで、キーボードやプリンタなどのアイコンが表示されるときに、同時に表示されるものと同じです。

このツールでは、キーボードごとに設定を、日本語キーボードや英語キーボードや任意の値に変更可能になっています。しかし問題があり、PCによっては全く同じやりかたで、機能するケースと機能しないケースがあり、このツールを公開すべきか悩むところではあります。

以下は成功したPCのデバイスマネージャーの画面です。キーボードにHIDキーボードしかないというものです。(装置は、ARM64対応で入手したLenovo IdeaPad Slim 5x Gen 9 83HL001DJP。ちなみにこのARM64 PCはサクサク動いて調子良いです。)

以下は失敗したPCのデバイスマネージャーの表示です。(Lenovo Thinkpad X13とか、T480sとか大体同じ)
失敗したPCでは、内蔵キーボードが標準 PS/2キーボードになっています。ネット上では、PS/2キーボードでも大丈夫というものもあったように思いますが、手元では、内蔵日本語、外部英語配列を試しましたが、機能しませんでした。

キーリマップツールの立場で、どのようになっているかというと、例えば@キーの位置のキーを試すと、以下の状況です。

キーボード配列Pキーの
右横
のキー
スキャンコードVKコード出力される文字
日本語キーボード@0x1aVK_OEM3: 0xc0@
英語キーボード[0x1aVK_OEM4: 0xdb[

この調査結果の結論は、キーリマップアプリでは、複数キーボード接続時に、キーボード配列が1種類に固定ではなく、個別に設定可能な場合があり、キー入力されたキーボードのレイアウトを意識して、キーリマップ設定を行う必要があるということになります。

のどかでは、109.nodokaを使って日本語配列キーボードに対応しているケースで、英語配列キーボードを使うには、104on109.nodokaを併用。104.nodokaを使って英語配列キーボードに対応してるケースで、日本語配列キーボードを使うには、109on104.nodokaを使うということを実施することになります。しかしキーボードが変わったことは、kbdaddid.sysを使った複数キーボード対応で実現可能だが、その配列がなにかを判断する手段はなく、今後の課題となります。

なお、話を戻すと、デバイスごとのオーバーライド設定が、失敗するケースが救えるか、もう少し研究したいと思います。

追伸: ノートPCの場合で、内蔵キーボードがPS/2の場合は、内蔵キーボードの設定がUSになってもよいのであれば、グローバル設定を削除して、USB接続の外部キーボードごとに、レイアウトを割付可能です。
 また、ノートPCの内蔵キーボードがHID接続の場合、同様にグローバル設定を削除すると、各キーボードごとにレイアウトが設定可能です。

コメントを残す