概要
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のスクリプトの書き方を勉強する必要がありそう。