はじめに
先日、念願のMacbook Proを手に入れましてウキウキでセットアップを済ませ、さっそくリモートワーク用の会社端末にリモートデスクトップをしようと思った矢先に問題が発覚しました。
RDP接続先の端末で日本語入力への切り替えができない!!
正確に言えばRDP接続先のWindowsで割り当てた「Control + Space」でのIME切り替えが機能しない。
購入したMacbookはUS配列なのですが、入力ソースの切り替えはデフォルトで同じく「Control + Space」がアサインされており、Mac側のショートカットが優先されてしまうので、リモートデスクトップクライアントアプリでキー入力されていない扱いとなっているようでした。
一応そのままでも回避策はあり、WindowsはデフォルトでUS配列キーボードの場合「Alt + `」でIME切り替えができます。なので、リモートデスクトップであってもMacから「Option + `」で代用することはできます。
でもやっぱり「Control + Space」で統一したい!!
Mac初心者ながら四苦八苦した結果の備忘録となります。
方針
私はリモートデスクトップにはMicrosoftのリモートデスクトップクライアントとParallels社のParallel Clientを使っています。
そのため、端的にこの2つのアプリを操作している間、Mac側の「入力ソースの切り替え」ショートカットよりも優先してキー入力をインターセプトし、「Control + Space」→「Option + `」に変換してキー入力として扱うことができれば、RDP接続中でも同じキー操作で日本語変換を行うことができそうです。
Karabiner-Elementsで解決できる
Macをほとんど初めて触った私には馴染みありませんでしたが、キー入力(From)をトリガーにして様々なイベント(To)に変換することのできるツールでKarabiner-Elementsというド定番ソフトウェアがあるそうです(すばらしい)。
詳しい使い方は先人達がQiitaをはじめとして解説してくださっているので、そちらでご確認いただくとして、今回の「Control + Space」問題に関して言えば、「方針」の通り、リモートデスクトップアプリの操作中という条件付きでキー入力の変換ルールが実装できそうです。
ルール作成 & 適用
ポイントは2点です。
- 同時押しを定義する"modifiers"は"from"には"mandatory" or "option"の区別があるが、"to"には存在せず直記述する
- "conditions"の"type": "frontmost_application_if"にて特定アプリケーション(リモートデスクトップクライアント or Parallel Client)がフロントになっている時だけキー変換を機能させる
細かいルールの記法は公式ドキュメントを参照ください。
ルールファイルの配置場所と内容だけ記載します。
$ vim ~/.config/karabiner/assets/complex_modifications/[user_rule].json
{
"title": "ユーザ定義の日本語環境向け設定",
"rules": [
{
"description": "Control+Spaceを押したときに、Option+`を送信する(RDC、Parallel Clientがフロントの場合)",
"manipulators": [
{
"type": "basic",
"from": {
"key_code": "spacebar",
"modifiers": {
"mandatory": [
"left_control"
]
}
},
"to": [
{
"key_code": "grave_accent_and_tilde",
"modifiers": [
"left_option"
]
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.microsoft\\.rdc\\.osx",
"^com\\.microsoft\\.rdc\\.macos",
"^com\\.2X\\.Client\\.Mac"
]
}
]
}
]
}
]
}
ルールの作成後、Karabiner-Elementsを起動し、
Complex modifications > Rules > Add rule > [作成した独自ルール] > Enable
で有効化、
Deviceタブでキー変換を行う対象のキーボードにチェックが入っていることを確認して(入っていなければチェックをつけて)完了です。
総評
想定通り、RDP接続時でも「Control + Space」で日本語変換ができるようになりました!
なかなか解決方法に辿り着かず、いろいろ試行錯誤があった上で実現できたので記事にしてみましたが、英字配列のキーボードをお使いの方で「Control + Space」でIME切り替えを行う+リモートデスクトップを行うという方は案外少ないんだろうか。
ちなみに、Karabiner-Elementsは定番ツールなだけあって、よくあるシチュエーションに対応したユーザ作成ルールが公式で共有されているので、今回はマッチするものは見つかりませんでしたが、ものによってはインポートするだけで問題解決したり効率化したりできそうです。
他にも利用できそうな幅があるのでまた良い使い方が見つかったら記事にしようかと思います。