🍎

リモートデスクトップ経由でもローカルPCと同様に日本語入力を切り替える方法(Karabiner + Hammerspoon)

に公開

きっかけ

MoltBot(旧: ClawdBot)を常時稼働させるためにMac miniを購入し、普段使いのMacBook Proからリモートデスクトップで接続して作業するようになりました。

ところが、ローカルでは問題なく動作していた左右Optionキーでの日本語/英数切り替えが、リモート接続時にはうまく機能しないことが判明。この問題を解決するために試行錯誤した結果をまとめたのが本記事です。

前提条件

  • Google日本語入力がインストール・設定済みであること
  • macOS標準の日本語入力では本記事の設定は動作しません

導入方法がわからない場合は、以下の記事を参考にGoogle日本語入力の「ひらがな」と「英数」を追加してください:
https://note.com/super_newt4037/n/n26069e247a9b

やりたいこと

  • 右Option単独押し → 日本語入力(ひらがな)
  • 左Option単独押し → 英数入力
  • Option + 他のキー → 通常のOptionキーとして動作

これをローカルMacでも、リモートデスクトップ経由でも使えるようにします。

問題点

Karabiner-Elementsで japanese_kana / japanese_eisuu を割り当てる設定は簡単ですが、リモートデスクトップ経由だとこのキーコードが正しく伝わりません

本記事では、ParsecやJump Desktopなどでリモート接続している場合でも動作する設定を紹介します。

構成

マシン 役割 ツール
MacBook ローカル(操作元) Karabiner-Elements
Mac mini リモート(接続先) Hammerspoon

リモート先(Mac mini)の設定

1. Hammerspoonのインストール

brew install --cask hammerspoon

2. Hammerspoonの起動と権限設定

open -a Hammerspoon

メニューバーにハンマーアイコンが表示されます。
メニューバーのハンマーアイコン

アイコンをクリックすると、アクセシビリティ権限を求めるダイアログが表示されるので、システム設定 → プライバシーとセキュリティ → アクセシビリティ でHammerspoonを許可してください。

もしもアクセシビリティ権限を求めるダイアログが表示されない場合はメニューバーのハンマーアイコンから「Preferences...」で赤枠から設定できます。(画像は設定後なので緑の丸になっていますが、赤い丸になっているはずです。)Hammerspoonを再起動すれば緑色になるはずです。
Preferences画面

3 設定方法

メニューバーのハンマーアイコンから「Open Config」
Open Config

以下を貼り付けて保存:

-- Ctrl+Shift+J で日本語(ひらがな)
hs.hotkey.bind({"ctrl", "shift"}, "j", function()
    hs.keycodes.setMethod("Hiragana (Google)")
end)

-- Ctrl+Shift+E で英数
hs.hotkey.bind({"ctrl", "shift"}, "e", function()
    hs.keycodes.setMethod("Alphanumeric (Google)")
end)

保存し終えたら、メニューバーのハンマーアイコン → Reload Config で設定を反映します。

4. 入力メソッド名の確認

上記の設定はGoogle日本語入力を使用している場合の例です。他の入力メソッドを使用している場合は、Hammerspoon Consoleで以下のコマンドを実行し、正確なメソッド名を確認してください。

hs.inspect(hs.keycodes.methods())

このコマンドの実行結果に表示される入力メソッド名を使用することで、Google日本語入力以外の入力ツールにも対応可能です。

ローカル(MacBook)の設定

1. Karabiner-Elementsのインストール

brew install --cask karabiner-elements

2. 設定ファイルの作成

nano ~/.config/karabiner/assets/complex_modifications/remote-ime.json

以下を貼り付けて保存:

{
  "title": "入力切り替え(ローカル&リモート対応)",
  "rules": [
    {
      "description": "右Opt→日本語、左Opt→英数(アプリ別)",
      "manipulators": [
        {
          "type": "basic",
          "from": { "key_code": "right_option", "modifiers": { "optional": ["any"] } },
          "to": [{ "key_code": "right_option" }],
          "to_if_alone": [{ "key_code": "j", "modifiers": ["control", "shift"] }],
          "conditions": [{ "type": "frontmost_application_if", "bundle_identifiers": ["^tv\\.parsec\\.www$", "^com\\.p5sys\\.jumpdesktop"] }]
        },
        {
          "type": "basic",
          "from": { "key_code": "right_option", "modifiers": { "optional": ["any"] } },
          "to": [{ "key_code": "right_option" }],
          "to_if_alone": [{ "key_code": "japanese_kana" }]
        },
        {
          "type": "basic",
          "from": { "key_code": "left_option", "modifiers": { "optional": ["any"] } },
          "to": [{ "key_code": "left_option" }],
          "to_if_alone": [{ "key_code": "e", "modifiers": ["control", "shift"] }],
          "conditions": [{ "type": "frontmost_application_if", "bundle_identifiers": ["^tv\\.parsec\\.www$", "^com\\.p5sys\\.jumpdesktop"] }]
        },
        {
          "type": "basic",
          "from": { "key_code": "left_option", "modifiers": { "optional": ["any"] } },
          "to": [{ "key_code": "left_option" }],
          "to_if_alone": [{ "key_code": "japanese_eisuu" }]
        }
      ]
    }
  ]
}

3. Karabiner-Elementsで有効化

  1. Karabiner-Elements を開く
  2. Complex Modifications タブへ
  3. Add predefined rule をクリック
    Add predefined rule
  4. 「入力切り替え(ローカル&リモート対応)」を Enable
    Enable

これで設定は完了です!!お疲れ様でした!

仕組み

Karabinerの to_if_alone

"to": [{ "key_code": "right_option" }],
"to_if_alone": [{ "key_code": "j", "modifiers": ["control", "shift"] }]
操作 結果
Optionを押して離す(単独) Ctrl+Shift+J が送られる
Option + 他のキー 通常のOptionキーとして動作

アプリ別の分岐

conditions で、ParsecやJump Desktopがアクティブな時は Ctrl+Shift+* を送り、それ以外では japanese_kana / japanese_eisuu を送ります。

他のリモートデスクトップアプリを使う場合

Bundle IDを調べて bundle_identifiers に追加してください:

osascript -e 'id of app "アプリ名"'

)
$ osascript -e 'id of app "Parsec"'
tv.parsec.www

Cmdキーで切り替えたい場合

本記事ではOptionキーを使用していますが、Karabiner-Elementsの設定で right_option / left_optionright_command / left_command に変更すれば、Cmdキー単独押しでの切り替えも同様に実現できると思われます。

まとめ

状況 動作
MacBook単体 japanese_kana/eisuu で直接切り替え
リモート接続中 Ctrl+Shift+J/E → リモート先のHammerspoonが処理
Option+他キー どちらでも通常のOptionキーとして動作

リモートデスクトップ経由でも快適に日本語入力を切り替えられるようになりました。

Discussion