Mac
Windows
RemoteDesktop
Keyboard
Jis

Microsoft RDPでWindows機につなげる時の日本語キーボード問題

はじめに

MacからWindowsにリモート接続(GUI)するときに、MicrosoftのRDP(Remote Desktop)を使っているのですが、Mac側が日本語レイアウトなのに、Windows側でUSレイアウトとして認識されてしまいます。

このRDPが日本語レイアウトであることをWindows側に伝えてくれない問題については、
https://qiita.com/hidecha/items/33624f6ae57d41f3cd86
に非常に詳しく書いてあります。これ自体は、Microsoftが対応してくれないとどうしようもないようです。

また、私も以前バックスラッシュキーについて
https://qiita.com/KNaito/items/174404ea42470d00c063
で記事を書いたのですが、この時使っていたKarabinerというソフトは、現OSであるHigh Sierraには対応していないので、利用出来なくなってしまいました。

そこで妥協策として、Karabinerの後継ソフトであるKarabiner-Elementsを使って無理矢理キーコードを変換して使ってみたところ、まあまあ使える感じでしたので、紹介します。

Karabiner Elements

Karabiner Elementsは、Macでキーレイアウトをソフトウェア的に切り替えられるアプリケーションです。

https://qiita.com/kamoc/items/93550dd7f5bbae15e70f

にも紹介されています。最新版はhttps://pqrs.org/osx/karabiner/ からダウンロードしてインストールできます。

このKarabiner Elementsは、専用のjsonファイルを用意することで、特定のアプリが立ち上がっている時だけキーボードのレイアウトを変更することが可能です。(Complex Modifications機能)

そこで、この機能を使って、Mac (日本語レイアウト)から、WindowsにRDP接続したとき用の設定ファイルを作ってみました。

それが
https://github.com/knight9999/RDPCustomKeyboard
です。(直接ダウンロードしたい場合は、
https://raw.githubusercontent.com/knight9999/RDPCustomKeyboard/master/rdp-custom-keyboard.json
からダウンロード出来ます。)

使い方

上記から取得したjsonファイル rdp-custom-keyboard.jsonを、
~/.config/karabiner/assets/complex_modifications
の下においてください。

次に、Karabiner-Elementsを立ち上げて、+Add Ruleボタンをクリックすると

スクリーンショット 2018-04-14 20.16.04.png

このような画面が出るので、JIS to US with backslashボタンのところのEnableボタンを押して有効化してください。すると、Mictosoft Remote Desktopが立ち上がった時に、キーボードの変換がなされて、日本語レイアウトのキーで入力したものが、対応するUSレイアウトのキーになってくれます。

例えば、デフォルトではSHIFT+2で @ が入力されてしまうのが、ただしく " が入力されるようになります。

ファイルの解説

rdp-custom-keyboard.json の中を見ると、次のようなコードがたくさんあります。

        {
          "type": "basic",
          "from": {
            "key_code": "2",
            "modifiers": {
              "optional": [
              ],
              "mandatory": [
                "shift"
              ]
            }
          },
          "to": [
            {
              "key_code": "quote",
              "modifiers": [ "shift" ]
            }
          ],
          "conditions": [
            {
              "type": "frontmost_application_if",
              "bundle_identifiers": [
                "^com\\.microsoft\\.rdc\\.mac$"
              ]
            }
          ]
},

これは、shiftを押しながら2キーを押した時、それを " として認識させる設定になります。

conditions で条件として、アプリIDが com.microsoft.rdc.mac のときだけ有効になるようにしています。(キー一つ一つに設定しなくてはいけないので、面倒でしたが、、、。また、他のアプリに適用したい場合は、アプリID を、Karabiner EventViewerを使って調べて、conditions の設定を変更します)

苦労した点

キーのマッピングをしたい場合、Karabiner EventViewerを使って地道にしらべていけばよいのですが、やや分かりにくかったものをまとめます。

JISの¥キー => internatioal3
JISの]キー => macのキーでは backslash ですが、macに接続した外部キーボードでは non_us_pound でした。
Windows側の(USキーボード扱いの) ~キー => non_us_backslash

補足

気づいたキーは全部対応させたと思ったのですが、よく考えたら日本語変換キーのマッピングしてなかった、、。日本語使うことがなかったので、、、。時間があれば、こちらも対応させたいと思います。

そのほか、キーのマッピングが違ってるところなどありましたら、コメントをいただければと思います。