アフィリエイト広告を利用しています

Macの画面共有で英数/かなキーがリモートに取られる問題を、Karabinerで「ローカルもリモートも使いやすく」する【2026年版・解決法】

Macの画面共有(Screen Sharing.app)で別のMacを操作しているとき、手元のMacで日本語を打ちたいのに、英数/かなキーがぜんぶリモートに吸われてローカルのIMEが切り替えられない、、、ということ、ありませんか?

Karabiner-Elements で「英数/かなキーは普段どおりローカルのIME切替に使い、Control を足したときだけリモートへ送る」と、この設定に、Claude Codeできれいに解決しました。

この記事では、その設定をコード付きで紹介します。

どういう問題なのか

画面共有のウィンドウがフォーカスを持っている間、キー入力は基本ぜんぶリモートに転送されます。

Cmd + Tab みたいなシステムショートカットは「ローカルに残す」設定の対象になるんですが、英数/かなキーは「ただのキー入力」として扱われるので、その対象から外れてしまうんですよね。

結果として、

  • 手元のMacで日本語を打ちたいのに、IMEが切り替えられない
  • かなキーを押しても、反応するのはリモート側のIMEだけ

という、地味にストレスのたまる状態になります。

なぜ普通の方法だとうまくいかないのか

最初に思いつくのが「シェルコマンドで英数キーを送る」方法なんですが、これは失敗します。

{
  "from": { "key_code": "right_option" },
  "to": [{
    "shell_command": "/usr/bin/osascript -e 'tell application \"System Events\" to key code 102'"
  }]
}

キー → シェル → AppleScript で英数キーを送る、という流れなので、結局フォーカスしているアプリ(=画面共有)に届いてしまう。同じ問題に戻るだけなんですよね。

じゃ、どうすれば、いいのか?

答えは select_input_source を直接呼ぶこと

Karabiner-Elements には select_input_source という、macOSに直接「入力ソースを切り替えろ」と命令するアクションがあります。

これを使うと、フォーカスしているアプリ(=画面共有)を経由せずにローカルのIMEを切り替えられる。philosophyとして一貫していて、いちばんきれいに動きます。

しかもこれを to_if_alone(=単押しのときだけ発火)と組み合わせると、

  • Cmdキーを単押ししたとき → ローカルIMEを切り替え
  • Cmdキーを押しっぱなしにして他のキーと組み合わせたとき → 普通の修飾キー(Cmd+W など)として機能

という二刀流ができます。Cmd+W が壊れないのがうれしいポイント。

まずは「ローカルに留める」基本の設定

英数/かなを画面共有に取られず、ローカルのIME切替に使う設定がこちらです。

~/.config/karabiner/assets/complex_modifications/screen-sharing-ime-fix.json に置きます。

{
  "description": "画面共有中: 左Cmd 単押し → ローカル ABC に切替",
  "manipulators": [
    {
      "type": "basic",
      "conditions": [
        {
          "type": "frontmost_application_if",
          "bundle_identifiers": [
            "^com\\.apple\\.ScreenSharing$",
            "^com\\.apple\\.RemoteDesktop$"
          ]
        }
      ],
      "from": {
        "key_code": "left_command",
        "modifiers": { "optional": ["any"] }
      },
      "to": [
        { "key_code": "left_command", "lazy": true }
      ],
      "to_if_alone": [
        {
          "select_input_source": [
            { "input_source_id": "com.apple.keylayout.ABC" }
          ]
        }
      ]
    }
  ]
}

ポイントは frontmost_application_if画面共有のときだけ 発火するように絞っているところ。

  • ^com\.apple\.ScreenSharing$ → 画面共有.app
  • ^com\.apple\.RemoteDesktop$ → Apple Remote Desktop

これで画面共有が前面にないときは、このルールは素通りして普段の動きのままになります。

同じ要領で、右Cmd → 日本語IME も書いておきます。

{
  "description": "画面共有中: 右Cmd 単押し → ローカル日本語 IME に切替",
  "manipulators": [
    {
      "type": "basic",
      "conditions": [
        {
          "type": "frontmost_application_if",
          "bundle_identifiers": [
            "^com\\.apple\\.ScreenSharing$",
            "^com\\.apple\\.RemoteDesktop$"
          ]
        }
      ],
      "from": {
        "key_code": "right_command",
        "modifiers": { "optional": ["any"] }
      },
      "to": [
        { "key_code": "right_command", "lazy": true }
      ],
      "to_if_alone": [
        {
          "select_input_source": [
            {
              "language": "ja",
              "input_source_id": "com.apple.inputmethod.Kotoeri.RomajiTyping.Japanese"
            }
          ]
        }
      ]
    }
  ]
}

ここまでで「英数/かなはローカルに留まる」状態になります。

ここからが本題。「リモートにも送りたいとき」をどうするか

これで、いつでもIMEの切り替えはローカルを操作できます。

でも、リモート側のMacでも日本語/英数を切り替えたい場面は当然あります。

そこで考えたのが、Control を足したときだけリモートへ送るという両取りの設計です。

  • 英数/かなをそのまま押す → ローカルIMEを切り替え(さっきの設定)
  • Control を足して押す → リモートへ英数/かなを送る

これなら、ひとつのキーで両方の世界を行き来できます。

リモートへ送るルールがこちら。

{
  "description": "画面共有中: Control + 左Cmd → リモートに 英数 を送る",
  "manipulators": [
    {
      "type": "basic",
      "conditions": [
        {
          "type": "frontmost_application_if",
          "bundle_identifiers": [
            "^com\\.apple\\.ScreenSharing$",
            "^com\\.apple\\.RemoteDesktop$"
          ]
        }
      ],
      "from": {
        "key_code": "left_command",
        "modifiers": {
          "mandatory": ["control"],
          "optional": ["caps_lock"]
        }
      },
      "to": [
        { "key_code": "japanese_eisuu" }
      ]
    }
  ]
}

modifiers.mandatorycontrol を入れて「Control必須」にし、to では Control を剥がした素の英数キー(japanese_eisuu)を生成しています。

これで生成された英数キーは、前面アプリ(=画面共有)経由でリモートに届くという仕組みです。かな側も right_command + Control で同じように書けます。

順番がめちゃくちゃ大事

ここ、地味だけど超重要なポイントです。

Karabiner はルールを上から順に処理します。 そして「ローカルに留める」ルールは modifiers: { "optional": ["any"] } になっているので、Control を足しても素通りで拾ってしまうんですよね。

なので、リモート送出ルール(Control必須)を、ローカル切替ルールよりに置く必要があります。

[上]
✅ Control + 左Cmd → リモートに 英数     ← Control必須・先に勝つ
✅ Control + 右Cmd → リモートに かな     ← Control必須・先に勝つ
✅ 左Cmd 単押し → ローカル ABC
✅ 右Cmd 単押し → ローカル日本語 IME
[下]

こうしておくと、Control を足したときはリモート送出ルールが先に勝つ。Control なしの素押しは、リモート送出ルールにマッチせず下のローカル切替ルールに落ちる。きれいに振り分けられます。

ここでハマりました。simple_modifications の落とし穴

さて、設定して意気揚々とテストしたんですが、、、

Control + 右Cmd は効くのに、Control + 英数キー がぜんぜん反応しない。

あれ?なんで?となりました。

原因を追っていったら、わたしのKarabinerには simple_modifications(シンプルなキー置き換え)で、こんな設定が入っていたんです。

英数キー(japanese_eisuu)  →  left_command

つまり、物理の英数キーは left_command に置き換えられていた。普段わたしが「左Cmd=英数」として使えていたのは、まさにこの置き換えのおかげだったんですね。

で、ここがポイントなんですが、Karabiner は simple_modificationscomplex_modifications より先に処理します。

キー入力 → simple_modifications → complex_modifications

なので、英数キーを押した瞬間に left_command へ変換され、complex 側に届くころには英数キーではなくなっている。japanese_eisuu を待っていた最初のルールが、永久に発火しなかったわけです。

理屈がわかれば簡単で、リモート送出ルールの fromjapanese_eisuu ではなく left_command で受けるように直したら、あっさり動きました。

"from": {
  "key_code": "left_command",
  "modifiers": {
    "mandatory": ["control"],
    "optional": ["caps_lock"]
  }
}

「自分の英数キーが、本当はどのキーコードで届いているのか」を確認するのが大事、という教訓でした。

完成した動き

最終的にこうなりました。

押すキー動き
英数キー(素押し)ローカルを英数に
かなキー / 右Cmd(素押し)ローカルをかなに
Control + 英数キーリモートを英数に
Control + 右Cmdリモートをかなに

ひとつのキーで、ローカルとリモートを行ったり来たり。画面共有しながらの作業がだいぶ快適になりました。

まとめ

  • 画面共有中、英数/かなキーはリモートに吸われてローカルIMEが切り替えられなくなる
  • Karabinerの select_input_sourceto_if_alone で呼べば、ローカルIMEを直接切り替えられる
  • frontmost_application_if で「画面共有のときだけ」に絞るのがコツ
  • Control を足したときだけリモートへ送るようにすると、ローカルもリモートも両取りできる
  • リモート送出ルールは、ローカル切替ルールよりに置く
  • simple_modifications で英数キーが別のキーに置き換わっていないか要チェック(complexより先に処理される)

入力ソースのIDは環境によって違うので、参考に載せておきますね。

用途input_source_id
英語(ABC)com.apple.keylayout.ABC
ことえり日本語com.apple.inputmethod.Kotoeri.RomajiTyping.Japanese
Google日本語入力com.google.inputmethod.Japanese.base

正確なIDはターミナルでこのコマンドを叩くと確認できます。

defaults read com.apple.HIToolbox AppleEnabledInputSources

画面共有での日本語入力にモヤモヤしている方は、ぜひお試しください。

この記事を書いた人

大東 信仁

カンパチが好きです。

プロフィールはこちら

10月14日開催 参加者募集中
(画像をタップ→詳細へ)

ミッションナビゲート モニター
(画像をタップ→詳細へ)

広告