LoginSignup
1
0

xrdp にUSキーボードを接続した日本語Windows環境からリモートデスクトップした場合に日本語キーボードが使われれる問題のワークアラウンド

Posted at

xrdpにUSキーボードを接続した日本語Windows環境から接続すると、日本語キーボードとして認識されて記号がまともに打てないなどの問題が起きることは広く知られている。

https://gist.github.com/udnp/7d5697093cc94b473d53fdb4f8cdf41b

などなど。

よくわからないが、日本語WindowsからRDPをするとUSキーボードをつないでいても日本語キーボードの情報をサーバーに送ることが問題らしい…がそれだと対Windowsで問題が起きない理由がわからない。

そんなこと言っても仕方ないので、巷ではいろんな回避策があるのだが、全ユーザーに影響が及ぶことがあるため、日本語キーボードユーザーと同居した環境でこの問題を回避するのは比較的難しい。特にセッションを再開したときに日本語にリセットされる問題は ReconnectScript 、デフォルトでは /etc/xrdp/reconnectwm.sh にレイアウト変更を記述することになるが、各ユーザーの事情をシステムグローバルの設定に押し込むのは影響が無駄に大きいうえに、万一構文エラー等を起こすと巻き添えで他のユーザーもログインできなくなる。

というわけで、 .bash_profile にバックグラウンドでキーボードマップを監視して、定期的に us に書き直すというスクリプトを記述するワークアラウンドをここに示す。なお、ログインシェルは /bin/bash とする。

.bash_profile
if [ -v XRDP_SESSION ] && [[ "$0" == *startwm-bash.sh ]]; then
  setxkbmap -layout us
  (
    while true
    do
      sleep 5;
      if [ ! -d /proc/$PPID ]; then
        break
      fi
      if (setxkbmap -query | grep "^layout:" | grep -q "jp"); then
        setxkbmap -layout us
      fi
    done
  ) &
fi

なお、冒頭のifでそのbashがメインのウィンドウマネージャーの立ち上げようシェルだと判定しているが、ファイル名で検知していて若干ガバである。使う場合は注意されたい。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0