xrdpのキーボードレイアウト処理に関する相談

49 views
Skip to first unread message

junker...@gmail.com

unread,
Jul 11, 2021, 11:52:21 AM7/11/21
to 日本xrdpユーザ会 (The "xrdp" Users' Group Japan)
metaさん、こんにちは

#PR1934では 英国の@mat335672さんへの
日本語キーレイアウトの事情について、
簡潔で的確な補足をいただきありがとうございました。
(私では彼を納得させることはできなかったと思います)

さて。
xrdp 本家に日本語キーボードに関連する新たなPRを考えていまして、
投げる前にまたこちらで相談をさせていただけないでしょうか。

1) US配列キーボードを接続したWindowsでxrdp が JIS配列になる問題の対策

本家PR#1934 の作成中のテストで 
US配列キーボードを接続したWindows10タブレットのmstsc.exeで
xrdpに接続したところ、
xrdp接続ダイアログでのキーボードレイアウトがJIS配列になっていることに気づきました。
これは https://xrdp.vmeta.jp/よくある質問 に記載されている内容と同一と認識しています。

この事象は 英語キーボードの場合でも日本語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 にハードコーディングで上書きするようにすることを考えています。

そして、日本語環境以外では不要と思われるため、
keyLayout 上位16bitをマスクした値のファイル名で読みこむ処理はオミットすることを考えています。

以上の方針について、metaさんのご意見を頂戴できるとありがたいです。

よろしくお願いいたします。

meta

unread,
Jul 12, 2021, 2:27:55 AM7/12/21
to 日本xrdpユーザ会 (The "xrdp" Users' Group Japan)
いつもありがとうございます。

Windows 10での英語と日本語の切り替えですが、問題なくできています。
したがって、切替方法を周知すればよくxrdp側のコードをいじるまでもないと考えて
いるのですがいかがでしょうか。

クリーンインストール状態から検証したわけではないので環境により差異があるかも
しれませんが、

タスクトレイのIMEアイコンクリック→言語設定→優先する言語
→言語の追加→英語(米国)

以上を行ったのち、タスクトレイのIMEアイコンをクリックして、英語が追加されていれば
完了です。Alt+Shiftで切り替えることができます。かんたんなショートカットで
切り替え可能なので重宝しています。

スクリーンショット 2021-07-12 151546.png

junker...@gmail.com

unread,
Jul 13, 2021, 4:10:08 PM7/13/21
to 日本xrdpユーザ会 (The "xrdp" Users' Group Japan)
metaさん、ありがとうございます。

1)についてコメントをありがとうございます。
私はUSキーボードは常用していないため、その操作を良く知りませんでした。

日本語WindowsでUSキーボードを常用し、
xrdpでLinux/FreeBSD GUIを操作するような人々にとって
「En」の登録と切替えは一般的なのでしょうか?
(CTRL + Space などがWin側でキャプチャされないようにするために必須?)
そうであれば 通常の xrdp 利用者に対してはおっしゃるように
使い方の案内だけでコード変更は不要かもしれませんね。

私は NeutrinoRDP Proxy 経由でリモートWindowsにだけアクセスしようとする人々のことを想像しました。

 Linux/FreeBSD GUI をあまり使用しない  USキーボード利用者は
(不自由しないので)Windowsに「En」 をインストールするとは限らないと考えます。

US配列キーボードを持つ中国製WinタブレットやUMPCの国内流通も増えました。
(以前は玄人好みでしたが)いまではライトなUSキーボード 付きWindows 利用者も増えていると想像します。

このようなライトなユーザーは
NetutrinoRDP Proxyへのアクセスのために xrdp の認証ダイアログが表示されたときに
キーボードレイアウトが違っていて「パスワードが入力できない」という問い合わせをしてくると思います。
サポート負荷を下げる意味でもこの処理はあったほうが親切と考えますが、いかがでしょうか。

2)に関してはいかがでしょうか。
現行の lang.c では(私の読解力では)キーボードレイアウトファイルが見つからない場合、
常に上位16bitがマスクしたファイル名で読み込みを試みるように見受けられます。
日本語の場合は問題ないですが、
それ以外の言語で不適切なキーレイアウトを読み込む結果になりかねないと予想しています。
このため、keyLayout 0xnnnnn411 から 0x00000411 への変換は
 kbd_type 0x07の日本語キーボードに限定したほうが良いと考えました。

私の上記の理解は考慮が浅いかもしれないと思っています。

ご意見をいただければ幸いです。

引き続きよろしくお願いいたします。

2021年7月12日月曜日 15:27:55 UTC+9 meta:
Reply all
Reply to author
Forward
0 new messages