RDPでRaspberry Piへ接続時にキーボードレイアウト (US配列) が適用されない問題の解決方法

1 min read読了の目安(約1500字

xrdpをインストールしたRaspberry Pi (Raspberry Pi OS) へUS配列を使用しているWindowsから接続時に、Raspberry Pi側ではUS配列設定になっているが、JIS配列が強制的に適用されてしまう問題の解決法を備忘録として書く。

原因

恐らく、RDP接続時に操作側のキー配列等の情報を送信し、適用していると考えられる。
その処理の中で、JIS配列の情報が送られてしまい、操作側と整合性が合わなくなってしまっている。

解決方法

その1

setxkbmap コマンドを使用して「US配列だよ!」と教えてあげる。

setxkbmap -layout us

上記コマンドを叩いてあげれば、その セッションに限り、問題は解決する。

しかし、接続の度にコマンドを叩くのは面倒だ。

その2 (たぶんこれが正解)

Raspberry Pi OSに採用されているデスクトップ環境、LXDEの起動時 (RDP接続時) に setxkbmap コマンドを叩くようにすれば良い。

  1. 必要なディレクトリを作成

    mkdir -p ~/.config/lxsession/LXDE-pi
    
  2. 全ユーザ用 autostart を持ってくる

    cp /etc/xdg/lxsession/LXDE-pi/autostart ~/.config/lxsession/LXDE-pi/
    
  3. LXDE起動時 (RDP接続時) に setxkbmap -layout us を叩いてもらうように autostart へ追記

    echo "@/usr/bin/setxkbmap -layout us" >> ~/.config/lxsession/LXDE-pi/autostart
    

    先頭に @ が入っている理由だが、ArchWiki/LXDE/Autostart によると

    @の後のコマンドはクラッシュした際に自動的に再度実行されます。

    らしいです。便利ですね!

    (絶対パスで書きたい派なので、追記内容はそのように書いている。多分、元のコマンドでも動くはず…)

あとがき

普段、Windowsを使用していて、「わざわざVNCクライアントを入れるのも…。」という時に役立つxrdp。
US配列で使う時には、少し細工が必要なようですが、どんどん活用していきましょう💪

失敗談

setxkbmap -layout us で解決すると知った当時は rc.local に記述してみましたが、失敗に終わりました。

LXDEのAutostartを見つけた時には、先頭に @ がついていませんでしたが、この備忘録を書く際に再度調べて、つけられているので良かったと思います。