はじめに
HYPERSTRIX OmniOneは、5.7インチ画面と英語(US)配列キーボードを内蔵した小型Windows PCです。
そもそも、なぜOmniOneを選んだのか
最近は、もっぱらAIエージェント中心で開発しています。
これまでは外で開発するたびに、持ち出したPCへGitHubからプロジェクトを同期し、SKILLSなどのエージェント環境も合わせていました。
ただ、よく考えると外出先の端末へ開発環境を丸ごと複製する必要はなく、小さな端末から普段の開発PCへつなげばよいことに今さら気が付きました。
そこで「AIエージェントへ指示を出すための端末」として、次の条件で探しました。
- 手に持ったまま使える
- 10万円以下
- RAM 32GB
- 必要なら単体でもWindows PCとして動く
CPUはIntel N150なので、ローカルで重い開発をするには少し物足りません。一方、エージェント操作やリモート接続が中心なら十分そうだったため、最終的にOmniOneを選びました。
この用途では内蔵キーボードを使う一方、机では外付けJISキーボードやMouse Without Bordersも使います。そこで、US/JIS配列の共存問題にぶつかりました。
この端末で、次の3種類の入力を印字どおりに共存させようとしてかなり苦戦しました。
| 入力元 | 使いたい配列 |
|---|---|
| OmniOne内蔵キーボード | US配列 |
| 外付け日本語キーボード | JIS配列 |
| PowerToys Mouse Without Borders経由の日本語キーボード | JIS配列 |
結論から言うと、Windows全体はJIS配列のままにし、内蔵キーボードだけをデバイス単位でUS配列へ上書きします。
最も重要なのは、i8042prt側のグローバルなOverrideKeyboardTypeを削除することでした。これが残っていると、デバイスごとの設定が反映されませんでした。
レジストリを変更します。作業前に対象キーをエクスポートし、元へ戻せるようにしてください。
環境
- Windows 11
- HYPERSTRIX OmniOne
- 内蔵キーボード:英語(US)配列
- 外付けキーボード:日本語(JIS)配列
- PowerToys Mouse Without Bordersを使用
OmniOneのデバイスマネージャーには、HID キーボード デバイスが2つと標準 PS/2 キーボードが表示されました。
先に結論
設定の役割は次のようになります。
| 設定場所 | 役割 |
|---|---|
| Windowsのハードウェアキーボードレイアウト | 全体の既定値をJISにする |
内蔵キーボードのDevice Parameters
|
内蔵だけUSへ上書きする |
i8042prt\Parameters |
グローバルOverrideを残さない |
特に、似た名前のレジストリ値が2種類あることに注意してください。
| 種類 | 値の名前 |
|---|---|
| グローバル設定 |
OverrideKeyboardType / OverrideKeyboardSubtype
|
| デバイス個別設定 |
KeyboardTypeOverride / KeyboardSubtypeOverride
|
Overrideが前か後ろかの違いです。
設定手順
1. Windows全体をJIS配列にする
次の画面を開きます。
設定
→ 時刻と言語
→ 言語と地域
→ 日本語の「…」
→ 言語のオプション
→ ハードウェア キーボード レイアウト
日本語キーボード(106/109キー)へ変更し、一度再起動します。
この段階では内蔵キーボードもJIS扱いになりますが、あとで内蔵だけUSへ上書きします。
2. 内蔵キーボードのデバイスインスタンスパスを確認する
誤って外付けJISキーボードへUS設定を適用しないよう、最初に外付けキーボードを外します。
- デバイスマネージャーを開く
- 「キーボード」を展開する
- 内蔵側として残っている「HID キーボード デバイス」を開く
- 「詳細」タブを開く
- プロパティから「デバイス インスタンス パス」を選択する
- 表示された値を控える
OmniOneではHIDキーボードが2つ表示され、通常キー用と特殊キー用の判別が難しかったため、外付けを外した状態で残る内蔵側のHIDデバイスに同じ設定を行いました。
外付けキーボードを接続したまま、表示されるHIDキーボードすべてへ設定しないでください。
3. 内蔵キーボードだけUS配列にする
レジストリエディターで次の場所を開きます。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\
<内蔵キーボードのデバイスインスタンスパス>\
Device Parameters
Device Parametersへ、次のDWORD(32ビット)値を追加します。
| 名前 | 値 |
|---|---|
KeyboardTypeOverride |
4 |
KeyboardSubtypeOverride |
0 |
ここではOverrideKeyboardTypeではなく、KeyboardTypeOverrideです。
4. i8042prtのグローバルOverrideを削除する
次の場所を開きます。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters
今回の環境では、ここにある次の値がデバイス個別設定を妨げていました。
OverrideKeyboardType
OverrideKeyboardSubtype
まず対象キーをエクスポートしてバックアップします。そのうえでOverrideKeyboardTypeを削除します。
OverrideKeyboardSubtypeもグローバルな上書き値です。個別設定が反映されない場合は、こちらも削除します。
一方、Windows全体をJISとして使うため、次の値は変更しませんでした。
LayerDriver JPN = kbd106.dll
OverrideKeyboardIdentifier = PCAT_106KEY
5. 再起動して確認する
再起動後、次の結果になれば成功です。
| 入力元 | 確認方法 | 期待結果 |
|---|---|---|
| 内蔵USキーボード | Shift + 2 |
@ |
| 外付けJISキーボード | Shift + 2 |
" |
| Mouse Without Borders | JISキーボードからShift + 2
|
" |
うまくいかなかった設定
i8042prt全体をUS配列にする
i8042prt\Parametersを次のようにUS設定へ変更すると、内蔵キーボードだけでなく外付けキーボードとMouse Without BordersまでUS扱いになりました。
LayerDriver JPN = kbd101.dll
OverrideKeyboardIdentifier = PCAT_101KEY
OverrideKeyboardType = 7
OverrideKeyboardSubtype = 0
今回の目的では使えません。
PS/2キーボードだけ設定すればよいと考える
OmniOneには標準 PS/2 キーボードも表示されましたが、PS/2側へ設定しただけでは内蔵キーボードの配列は変わりませんでした。
実際に効いたのは、内蔵側HIDデバイスのDevice ParametersへKeyboardTypeOverride=4、KeyboardSubtypeOverride=0を設定し、グローバルなOverrideKeyboardTypeを削除する組み合わせでした。
グローバルOverrideを残したまま個別設定する
これが最後まで詰まった原因でした。
内蔵HID側へ正しくKeyboardTypeOverrideを設定しても、i8042prt\ParametersにOverrideKeyboardTypeが残っていると内蔵キーボードはJISのままでした。
OverrideKeyboardTypeを削除して再起動したところ、内蔵US・外付けJIS・Mouse Without BordersのJIS入力が共存しました。
設定が戻った場合
Windows Updateやハードウェアキーボードレイアウトの変更後に配列が崩れた場合は、最初に次を確認します。
- i8042prtのParametersへ
OverrideKeyboardTypeが復活していないか - 内蔵HIDデバイスの
KeyboardTypeOverrideが残っているか - USBポート変更などで外付けキーボードのデバイスインスタンスパスが変わっていないか
まとめ
今回のポイントは次の3つです。
- Windows全体はJIS配列にする
- 内蔵HIDキーボードだけ
KeyboardTypeOverride=4、KeyboardSubtypeOverride=0でUS化する -
i8042prtのグローバルなOverrideKeyboardTypeを削除する
Windows標準設定やPowerToysだけで、物理キーボードごとに配列を明示できれば済む話です。現状は似た名前のレジストリ値と優先順位を理解する必要があり、かなり分かりにくい設定でした。