日本語キーボードの Mac で Microsoft Remote Desktop を使うのは苦痛、いや、拷問ではなかろうか?

Windows で開発していたり、Windows でしか動かないソフトがある都合、Windows PC にリモートデスクトップ接続する必要がある。

無料で使えそうなリモートデスクトップクライアントは、Microsoft Remote Desktop ぐらいだろうか。

しかし、このアプリ、日本語キーボードだとかなり使いづらい。いや、使えないのではないだろうか。

少し考えたのか、キーボードモードには、scancode と unicode がある。

scancode だと、キーボードが英語キーボードのように認識されてしまい、日本語キーボードを使っている者としては使えない。

unicode だとある程度キーボードの対応関係は合っていて、ギリギリ使えるだろうか?しかし私が使った限り、次のような問題があった。

  • 入力していないキーの入力が発生
  • Mac の IME が横取りして思ったように日本語が入力できない

FreeRDP のソースを修正

フリーなリモートデスクトップ実装に FreeRDP がある。このソースの SDL というライブラリを使っているクライアントソフトを修正してみた。使える感じではないだろうか。

修正内容

client/SDL/sdl_kbd.c に、SDL のスキャンコードと RDP のスキャンコードの対応関係が書かれている。

変換を修正する必要があるのは、\ と _。デバッグログを表示させると以下のようなイベントが発生していた。

\ -> SDL_SCANCODE_INTERNATIONAL3
_ -> SDL_SCANCODE_INTERNATIONAL1

これらに対応する RDP のコードには、RDP_SCANCODE_UNKNOWN が設定されていた。

どのキーを設定すれば良いだろうか?keymill というソフトで、日本語キーボードだと何が来ているのか調べてみたところ、以下のとおりだった。() 内は、(キーコード, スキャンコード) の順。

- -> VK_OEM_MINUS (189,l12)
^ -> VK_OEM_7 (222,13)
\ -> VK_OEM_5 (220,125)
@ -> VK_OEM_3 (192,26)
[ -> VK_OEM_4 (219,27)
; -> VK_OEM_PLUS(187,39)
: -> VK_OEM_1 (186,40)
] -> VK_OEM_6 (221,43)
, -> VK_OEM_COMMMA (188,51)
. -> VK_OEM_PERIOD (190,52)
/ -> VK_OEM_2 (191,53)
_ -> VK_OEM_102 (226,115)

以下の対応関係のようである。

\ -> VK_OEM_5 (220,125)
_ -> VK_OEM_102 (226,115)

試行錯誤の末、以下のコードを設定すると良いことがわかった。

\ -> SDL_SCANCODE_INTERNATIONAL3 -> RDP_SCANCODE_BACKSLASH_JP
_ -> SDL_SCANCODE_INTERNATIONAL1 -> RDP_SCANCODE_ABNT_C1

キーコードを調べたりと、試行錯誤した後に気づいたが、include/freerdp/scancode.h に日本語キーボードに関するコメントが付いている。

ついでに、右 command に全角/半角を割り当てておいた。

FreeRDP は凄い

ターミナルからコマンドを打って起動する必要があるが、本当に使いやすくなった。

他にも凄い点

  • /sound オプションを付けて起動すると音が出るようになる。
  • /microphone オプションを付けるとマイク入力が可能になる。Skype 音声テストで確認してみた。
  • /video オプションまで付けると、カメラ入力も転送される。
  • 他にも様々なオプションあり。

これらのソースコードが公開されているのだから本当に凄いことだと思う。

日本語キーボードの Mac でリモートデスクトップを使ってお困りであれば使ってみてほしい。