概要

macでは修飾キーがcmdだけど、win, linuxにRDPした時はctrlであり、それぞれで押下するキーが異なるのがずっともどかしく思っていた。 また、macではkarabinerの設定で左cmdでIME off、右cmdでIME onにできていたが、RDP先ではうまく設定できずにいた。 ここに、愛用しているHHKBのキー配列が絡むので、問題がややこしくなっている。 今回重い腰を上げてキー設定を整えたので、メモしておく。

できること

コピペとかの修飾キーを全てtabの下のキーで、IMEオンオフを全てスペースバーの左右のキーで行えるようになる。 具体的には:

  • mac内蔵キー
    • caps lockをcmdにする
    • 左右cmdキー空打ちで、IMEをオンオフする
  • HHKB
    • ctrlをcmdに、左cmdをctrlにする
    • 置換されたctrl(ex左cmd)と右cmd空打ちで、IMEをオンオフする
  • RDP接続時(全キーボード)
    • cmdを全てctrlにする
    • 置換された左右ctrl空打ちで、IMEをオンオフする

手順

mac本体のキーは変更せず、全ての設定をkarabiner-elementsで行う。

まず、simple modificationsで画像のように変更する。

次に、complex modificationsで、下記のようなjsonファイルを作成する:

{
    "description": "my karabiner setting",
    "manipulators": [
        {
            "conditions": [
                {
                    "identifiers": [
                        {
                            "vendor_id": 1452
                        }
                    ],
                    "type": "device_if"
                },
                {
                    "bundle_identifiers": [
                        "^com\\.2X\\.Client\\.Mac$",
                        "^com\\.microsoft\\.rdc\\.macos$"
                    ],
                    "type": "frontmost_application_unless"
                }
            ],
            "from": {
                "key_code": "left_command",
                "modifiers": {
                    "optional": [
                        "any"
                    ]
                }
            },
            "parameters": {
                "basic.to_if_held_down_threshold_milliseconds": 100
            },
            "to": [
                {
                    "key_code": "left_command",
                    "lazy": true
                }
            ],
            "to_if_alone": [
                {
                    "key_code": "japanese_eisuu"
                }
            ],
            "to_if_held_down": [
                {
                    "key_code": "left_command"
                }
            ],
            "type": "basic"
        },
        {
            "conditions": [
                {
                    "identifiers": [
                        {
                            "vendor_id": 1278
                        }
                    ],
                    "type": "device_if"
                },
                {
                    "bundle_identifiers": [
                        "^com\\.2X\\.Client\\.Mac$",
                        "^com\\.microsoft\\.rdc\\.macos$"
                    ],
                    "type": "frontmost_application_unless"
                }
            ],
            "from": {
                "key_code": "left_control",
                "modifiers": {
                    "optional": [
                        "any"
                    ]
                }
            },
            "parameters": {
                "basic.to_if_held_down_threshold_milliseconds": 100
            },
            "to": [
                {
                    "key_code": "left_control",
                    "lazy": true
                }
            ],
            "to_if_alone": [
                {
                    "key_code": "japanese_eisuu"
                }
            ],
            "to_if_held_down": [
                {
                    "key_code": "left_control"
                }
            ],
            "type": "basic"
        },
        {
            "conditions": [
                {
                    "bundle_identifiers": [
                        "^com\\.2X\\.Client\\.Mac$",
                        "^com\\.microsoft\\.rdc\\.macos$"
                    ],
                    "type": "frontmost_application_unless"
                }
            ],
            "from": {
                "key_code": "right_command",
                "modifiers": {
                    "optional": [
                        "any"
                    ]
                }
            },
            "parameters": {
                "basic.to_if_held_down_threshold_milliseconds": 100
            },
            "to": [
                {
                    "key_code": "right_command",
                    "lazy": true
                }
            ],
            "to_if_alone": [
                {
                    "key_code": "japanese_kana"
                }
            ],
            "to_if_held_down": [
                {
                    "key_code": "right_command"
                }
            ],
            "type": "basic"
        },
        {
            "conditions": [
                {
                    "bundle_identifiers": [
                        "^com\\.microsoft\\.rdc\\.macos$"
                    ],
                    "type": "frontmost_application_if"
                }
            ],
            "from": {
                "key_code": "left_command"
            },
            "to": [
                {
                    "key_code": "left_control"
                }
            ],
            "type": "basic"
        },
        {
            "conditions": [
                {
                    "bundle_identifiers": [
                        "^com\\.microsoft\\.rdc\\.macos$"
                    ],
                    "type": "frontmost_application_if"
                }
            ],
            "from": {
                "key_code": "right_command"
            },
            "to": [
                {
                    "key_code": "right_control"
                }
            ],
            "type": "basic"
        }
    ]
}

使用するキーボードごとに挙動を変えるため、vendor_idによる条件分岐を行っている。 この数字はDeviceタブから確認できる。

また、RDPでは、ctrl左右空打ちでIMEのオンオフを切り替える、AutoHotKeyのスクリプトをバックグラウンドで実行しておく。 https://github.com/Miraium/ctrl-ime-ahk

以上で目的を達成できる。

まとめ

mac内蔵、HHKB、RDP先のWinで、統一したキー入力が可能になった。

不満として、HHKBでのctrlキーがスペースキーの隣になっているのは、慣れるのに時間がかかりそう。 また、mac内蔵キーボードでtab下のキーを空打ちした時もIMEがオフになるのも、ちょっと気持ち悪い。 あと、Winに直接ログインした時のIME on/offが統一されていない(滅多にしないけど)。 AutoHotKeyのスクリプトの書き方を勉強する必要がありそう。