なにやら、xrdpでLinuxサーバーに接続してみるとキー定義がおかしい。
アプリケーションによってはカーソルキーの「↓」を押すとEnterキーが押されたことになってしまう様子。
※正確にはNumericEnterでテンキー側のエンターキーと認識されてる
https://w3c.github.io/uievents/tools/key-event-viewer.html
■develop版のxrdpに変えて解決
現象を確認したのは xrdp v0.10.1でしたが、どうやらその先のv0.10.2でも解消されていないようで急遽develop版に差し替えてみることに。
サーバーにはv0.10.1をインストールした時の名残があるので
git switch –
でdevelopになっていることを確認してから
git pull
けっこう激しく変更があったようで、ダウンロードに少し時間がかかっていた。
pull後は
./bootstrap
./configure –enable-fuse –enable-mp3lame –enable-pixman
make
sudo make install
と、いつも通りの手順でインストール完了。xrdpxorgも忘れずに同じ要領で。
念のためにバージョンを確認すると v0.10.80 となっていた。
サーバーをrebootし、再起動後は無事に「↓」がArrowDownと認識されるようになりメデタシメデタシ。
■しかしMacBookでは「_」が入らない
ここで新たな罠が。
Windows端末からログインする分にはなんの問題もなくなったのだけれど、MacOS端末からログインするとアンダースコア「_」が入らない。
そのほかにも記号が刻印とずいぶんズレてしまう。
いったい誰が悪いんだろう?RDPに使っているWindowsAppが悪さしているのか?
■なぜかusキー判定
なかなか深みにはまっていってる予感。
ひとまず自分の端末がどんな値を送ってきているのか調べてみる。
sudo cat /var/log/xrdp.log
すると、直近の接続では keyboard_type=4, keyboard_subtype=0, layout=0x00000000 と!
私のはそんなこだわりもなく日本市場のMacBookで日本語キーボード。それなのに0x00000000が送信されていることで、受信した側のxrdpではusキー端末がログインしてきたと判定されているっぽい。
■キーボードレイアウト設定が変?
xrdpの設定なんか触れたことないぞ、とブツブツつぶやきながら設定を覗いてみると /etc/xrdp/xrdp_keyboard.ini なんてファイルがある。
でもこのファイル、中身をみても何を定義したいのだか理解しがたい構造。
あれこれ試してみてようやく、キーボードタイプやレイアウトの値を受け取って、最終的にキー配列が 「jp」 とか 「us」 とかいった値を導きだす目的のものなのかとひとまず理解した。
■本来はkm-00000406?
超絶詳しい方に聞いてみたところ、本来はMacOS(日本語キー)では0x00000406が送られてくるものらしい。でも私のはなぜか0x00000000しか出してこない。
※たまにそういうMacOS機がいるらしいとか。
そして、0x00000000を受け取ったxrdp側は、xrdp_keyboard.iniの設定に書かれている通り0x00000000に合致するものはusキーだと値を返してくるし、異なったキーマップなので日本語キーボードの刻印とはちがった記号が入力されてしまうということらしい。
ならば多少強引だけれども、/etc/xrdp/km-00000406.ini をコピーして km-00000000.iniとして置き換えてみたらどうかと試行すると、ある程度はちゃんと動作する。
でも、アンダースコアが”=”になったり、まったくなにも出なかったり。わりと困る。
■キーマップを作り直す
もういちどxrdp.logを見てみると、こんどはkm-00000000.tomlが存在しないという記録が残っていた。たしかにそんなファイルは存在しない。
キーマップってkm-????????.iniじゃないのか?と思って調べてみると確かにkm-????????.tomlも在るようで、ちょっと書式が違って人間がわかりやすい書き方である、という説明もあるものの大差ない気もするなあ。
特に今回はkm-00000000.iniを用意していたにもかかわらずログにはkm-00000000.tomlが無いと要求されているので、やむなく手探り状態でキーマップを作ってみることに。
キーマップを作製するコマンドがあるようなので以下を試してみる。
xrdp-genkeymap km-00000000.toml
これで作成されたkm-00000000.tomi を /etc/xrdp/以下に配置し、rdp接続しなおすことでキーマップが見つからないよ!っていうログは出なくなった。
しかも、ちゃんとアンダースコアが入力できるようになっているではないか(^^)素晴らしい。
■とりあえずはOKとして…
当面はこれで問題なしとして、まだちょっとこだわらないといけないポイントがありそう。
例えば、「¥」はどこに行ったのだろうとか「\」(←環境によっては¥表示かな)はどうやって出すんだ?とか詰めないといけないかもだけれど。
最悪でも、手探りで作ったキーマップファイルに追記すればなんとかなるか。
—
安心安全安価なSDカードデータ復元・HDDデータ復元は
長年の信頼と実績の『株式会社パソコントラブル救助隊』へ。
https://hqsecure.net/
株式会社パソコントラブル救助隊で公式サイトを含めたウェブマスターを兼任しています。
趣味はカメラとぶらり散歩。フォトマスターは2級。日々感じたことを忘れないうちに雑記帳に書いています。