xrdp のキーボード設定を解読する
xrdp をサーバに導入して、Windows マシンから接続する環境を構築したところ、キーボードが正しく認識されないトラブルに遭遇した。そのため、xrdp のキーボード設定がどのような手順で行われているのかの解読を試みた。
色々なページで、xrdp を日本語キーボード配列に対応させるため、/etc/xrdp/km-0411.ini をインストールする方法が紹介されている。ただ、本来なら、この変更は PR #194 により xrdp 本体に反映済みのはずである。しかし実際には、Debian GNU/Linux の開発版から xrdp パッケージをビルド・インストールしたところ、当該ファイル群は存在しなかった。これらのファイルが存在しない場合には、やはり設定が必要と思われる。
Remote Desktop Protocol の公式な定義内容は、Microsoft 社によって提示されている。特に、Input Capability Set が重要で、RDP クライアントはキーボードについて、以下の3種類の情報を送出することになっている。
- keyboardLayout: キーボード配列を示す 4byte の符号なし整数(日本語配列は 0x00000411)
- keyboardType: キーボード種別を示す 4byte の符号なし整数(日本語キーボードは 0x00000007)
- keyboardSubType:
また、接続元の Windows マシンがどのようにキーボード配列を認識しているかは、以下のレジストリを確認すれば良い。
- HKEY_CURRENT_USER
- Keyboard Layout
- Preload
- 1 - 0x00000411
- 2 - 0xe0010411
- 3 - 0xe0200411
- Keyboard Layout
はずなのだが、HHK を接続している Windows10 マシンでも 0x00000411 となっており、どうしてそうなるのか?が良く分からない。
RDP クライアントによって送出されたキーボード種別コードが、xrdp サーバによってどのように解釈されるかという情報は、/etc/xrdp/xrdp_keyboard.ini に記述されている。
; How this file works:
; 1. load the file and scan each section to find matching "keyboard_type"
; and "keyboard_subtype" based on the values received from the client.
; If not found, then jump to default section.
; 2. in the selected section, look for "rdp_layouts" and "layouts_map".
; Based on the "keylayout" value from the client, find the right x11
; layout value.
; 3. model/variant are inferred based on the "keyboard_type" and
; "keyboard_subtype", but they can be overridden.
[default_rdp_layouts]
rdp_layout_jp=0x00000411
rdp_layout_jp=0xe0010411
rdp_layout_jp=0xe0200411
rdp_layout_jp=0xe0210411
[default_layouts_map]
rdp_layout_jp=jp
(snip)
Xサーバが、自身のキーボードをどのように認識しているかは、setxkbmap コマンドで確認できる。例えば、Debian GNU/Linux で動作している Let's Note CF-SZ6 で確認してみると、以下のような結果が得られる。
$ setxkbmap -query
rules: evdev
model: pc105
layout: jp
options: ctrl:nocaps
xrdp 上で動作している端末では、以下のような結果が得られる。
$ setxkbmap -query
rules: base
model: pc104
layout: jp,us
variant: ,
以下のように正しくレイアウトを設定すると、少なくとも「全角/半角」キーが正しく認識される。
$ setxkbmap -layout jp
なお、正しく認識されているかどうかは、xev コマンドで確認できる。
ここまで確認すると、とりあえず X のレイヤーまでのキーボード配列は正しくなっているはずである。加えて、Fcitx などの GUI フレームワークレベルの入力メソッドの設定が正しいかを確認する必要がある。Fcitx の場合、以下のように正しいキーボードが最上位に設定されていなければならない。この設定が間違っていると、X のレイヤーでは正しくキーシンボルが送出されているにも関わらず、Fcitx によって違うシンボルに変換されて、異なる文字が入力される現象が起きる。
最後に、Fcitx の起動時に、以下のようなエラーが表示されることがある。
この場合も、Fcitx の起動が不完全で、正しくキーボードが読み取られないことがあるようだ。以下の2つのコマンドを実行して、再ログインすれば回避できる。
$ rm -f ~/.mozc/.server.lock
$ rm -f ~/.mozc/.session.ipc
将来的には、TLS接続の設定も必要。
Author And Source
この問題について(xrdp のキーボード設定を解読する), 我々は、より多くの情報をここで見つけました https://qiita.com/tsuchm/items/2d3c602a553d647b696a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .