metaさん、こんにちは
#PR1934では 英国の@mat335672さんへの
日本語キーレイアウトの事情について、
簡潔で的確な補足をいただきありがとうございました。
(私では彼を納得させることはできなかったと思います)
さて。
xrdp 本家に日本語キーボードに関連する新たなPRを考えていまして、
投げる前にまたこちらで相談をさせていただけないでしょうか。
1) US配列キーボードを接続したWindowsでxrdp が JIS配列になる問題の対策
本家PR#1934 の作成中のテストで
US配列キーボードを接続したWindows10タブレットのmstsc.exeで
xrdpに接続したところ、
xrdp接続ダイアログでのキーボードレイアウトがJIS配列になっていることに気づきました。
この事象は 英語キーボードの場合でも日本語IMEをインストールしていると、
client_info->keylayout 変数の値が 0xnnnnn0411 になってしまうため、
xrdp が JIS配列用 keymap file /etc/xrdp/km-00000411.ini をロードしているためと認識しています。
IME上でENに切り替えるというワークアラウンドは
Windows10では容易にはできないので xrdp 側で対処できるようにしたいと考えます。
PR#1934 でレビューをお願いさせていただいているコードと似たような方法で、
kbd_type が 0x04 で keyLayout 下位16bit が 0x0411 の場合、
keyLayout を US配列の 0x00000409 をハードコーディングで上書きすることを考えています。
xrdp の場合はkeyLayout は 0x00000409 に上書きしないといけないのですが、
neutrinordp Proxy経由でリモートWindowsに接続する場合は
keyLayout は 0x00000411 に上書きしたほうが
キーレイアウトUS配列+日本語IMEになり最も好ましい動きになるところが
ややこしいところです。
xrdp/lang.c の get_keymaps() 関数内に処理を追記しようと思います。
2) 日本語キーボードの場合のkeyLayout 処理
xrdp/lang.c の get_keymaps() 関数内のコードでは、
/etc/xrdp/km-<keyLayout値>.ini の存在チェックをして
ファイルがなければ keyLayout 上位16bitをマスクした値のファイル名で
keymapファイルを読み込んでいます。
こちらも #PR1934 と同様に
kbd_type が 0x07 の日本語キーボードで
keyLayout 下位16bit が 0x0411 の場合にだけ
keyLyaout を 0x00000411 にハードコーディングで上書きするようにすることを考えています。
そして、日本語環境以外では不要と思われるため、
以上の方針について、metaさんのご意見を頂戴できるとありがたいです。
よろしくお願いいたします。