Karabiner-elementsを利用したキー割り当て設定:MacOS/Windows10onVirtualBox
MacユーザでUSキーボードを使いたい人は多い、またVirtualBoxでWindows環境を併用している人も多い、私もその一人である。 しばらくはMacキーバインドとWindowsキーバインドでそれぞれ使っていたが、やはり同じキー操作で使うのが快適であると思い立ち、Karabiner-elementsを利用することで「macもwinも同じキー操作に」する方法を紹介する。
確認した環境情報:Apple純正USキーボード(Magic Keyboard US)で...
MacOS BigSur/Monterey/Ventura、
Karabiner-elements 14.3.0(14.12.0でも動作確認済:2023/4月)、
Windows10 on VirtualBox 6.1.28/6.1.32(7.0.6でも動作確認済:2023/4月)
実現したことは下記:
(1)MacOSでの日本語切替は、左⌘キーを押すと「英字」に、右⌘キーを押すと「ひらがな」になる
(↑これまで通り、⌘+c, ⌘+v, ⌘+x, ⌘+z, ⌘+a, ⌘+s ...などは問題なく機能する)
(2)Windows10 onVirtualBoxでは、左⌘キーを押すと「英数」に、右⌘キーを押すと「かな」になる
(↑Macと同じ様に、⌘+c, ⌘+v, ⌘+x, ⌘+z, ⌘+a, ⌘+s ...なども機能する)
(3)おまけ:Windows10 onVirtualBoxで、⌘と←, →, ↑, ↓ の押下で それぞれ 行top, 行end, 文書top, 文書end
おまけのカーソル移動:注意点
・MacOSのMS-Officeは一般的なMacキー所作とは異なる部分あり(⌘やctrlの組合せに関して)
・MacOSではctrl+aやctrl+eでも行端移動できるが今回方法のWindows上では未対応
(1)MacOSでUSキーボードの左右の⌘で日本語のON/OFFする手順
Karabiner-elementsのバージョンで下記と画面が異なりますご了承ください
まず、Karabiner-elements をインストールする。
インストールしたら、[Preferences]メニューから表示されるポップアップ画面の[Complex modifications]タブを選んで、左下のボタン[Add rule]を押す。
すると、ポップアップに[Import more rules from the Internet]というボタンが現れるのでコレを押してブラウザを開く。
ブラウザ表示されたページの上部リンクから[International(Language Specific)]をクリックすると、ページ下方にジャンプするので[For Japanese(日本語環境向けの設定)] を"Import"する。
Karabiner-elementsにImportされたので、[Preferences]メニューの一覧から「コマンドキーを単体で押したときに、英数・かなキーを送信する」を"Enable"にする。
これで、左⌘キーを押すと英字モード、右⌘キーを押すとひらがなモードの切り替えが実現する。
(2)Windows10(VirtualBox)で、MacOSと同じに左右の⌘で日本語のON/OFFする手順
Karabiner-elementsの既存rulesに望みのものが見つからなかったので、新たにruleを作成(JSON記述)
下記のコードでJSONファイルを作成します。
(※下記コードには、(3)のおまけ:カーソル移動キーruleも含んでいます)
{
"title": "Japanese-Setting for US-keyboard on VirtualBox",
"rules": [
{
"description": "Japanese On/Off : Make ⌘key for Japanese on(right⌘)/off(left⌘) as 'CTRL+7'/'CTRL+.' under VirtualBox",
"manipulators": [
{
"type": "basic",
"from": { "key_code": "left_command", "modifiers": { "optional": [ "any" ] } },
"parameters": { "basic.to_if_held_down_threshold_milliseconds": 100 },
"to": [ { "key_code": "left_control", "lazy": true } ],
"to_if_held_down": [ { "key_code": "left_control" } ],
"to_if_alone": [ { "key_code": "7" , "modifiers" : [ "left_control" ] } ],
"conditions": [ { "type": "frontmost_application_if",
"bundle_identifiers": [ "^org\\.virtualbox\\.app\\.VirtualBoxVM$" ] } ]
},
{
"type": "basic",
"from": { "key_code": "right_command", "modifiers": { "optional": [ "any" ] } },
"parameters": { "basic.to_if_held_down_threshold_milliseconds": 100 },
"to": [ { "key_code": "left_control", "lazy": true } ],
"to_if_held_down": [ { "key_code": "left_control" } ],
"to_if_alone": [ { "key_code": "period" , "modifiers" : [ "left_control" ] } ],
"conditions": [ { "type": "frontmost_application_if",
"bundle_identifiers": [ "^org\\.virtualbox\\.app\\.VirtualBoxVM$" ] } ]
}
]
},
{
"description": "Cursor-Move with CTRL+←,→,↑,↓ (i.e. CTRL=⌘) as lineTop,lineEnd,docTop,docEnd under VirtualBox",
"manipulators": [
{
"type": "basic",
"from": { "key_code": "left_arrow", "modifiers": { "mandatory":["left_control"] } },
"to": [ { "key_code": "left_arrow", "modifiers": [ "fn" ] } ],
"conditions": [ { "type": "frontmost_application_if",
"bundle_identifiers": [ "^org\\.virtualbox\\.app\\.VirtualBoxVM$" ] } ]
},
{
"type": "basic",
"from": { "key_code": "right_arrow", "modifiers": { "mandatory":["left_control"] } },
"to": [ { "key_code": "right_arrow", "modifiers": [ "fn" ] } ],
"conditions": [ { "type": "frontmost_application_if",
"bundle_identifiers": [ "^org\\.virtualbox\\.app\\.VirtualBoxVM$" ] } ]
},
{
"type": "basic",
"from": { "key_code": "up_arrow", "modifiers": { "mandatory":["left_control"] } },
"to": [ { "key_code": "home", "modifiers": [ "left_control" ] } ],
"conditions": [ { "type": "frontmost_application_if",
"bundle_identifiers": [ "^org\\.virtualbox\\.app\\.VirtualBoxVM$" ] } ]
},
{
"type": "basic",
"from": { "key_code": "down_arrow", "modifiers": { "mandatory":["left_control"] } },
"to": [ { "key_code": "end", "modifiers": [ "left_control" ] } ],
"conditions": [ { "type": "frontmost_application_if",
"bundle_identifiers": [ "^org\\.virtualbox\\.app\\.VirtualBoxVM$" ] } ]
}
]
}
]
}
このruleの概要:VirtualBox環境の時のみに適用されるルール
・単独で左⌘キーを押した場合にctrl+7 に置換え、右⌘キーを押した場合にctrl+. に置換える
(↑後でWindows側のIME設定変更あり:ctrl+7 , ctrl+. を それぞれ 英数, かな に変更)
・⌘を装飾キー(組合せ)で使う場合は、ctrlとして機能する
・カーソル移動に⌘を使えるようにする:⌘+←,→,↑,↓ は 行頭, 行末, 文書頭, 文書末へ移動する
(↑⌘はctrlに置き換わっているので、実際はctrl+←,→,↑,↓ の置換え処理)
作成したJSONファイルを、Karabiner-elementsのrule保存場所(下記)に保存します。
~/.config/karabiner/assets/complex_modifications
Karabiner-elementsの[Preferences]メニューから表示されるポップアップ画面の[Complex modifications]タブを選んで、左下のボタン[Add rule]を押す。 表示されるruleから、"Japanese-Setting for US-keyboard on VirtualBox"の [Japanese On/Off:...] を"Enable"にする。
【重要】EnableになったRulesの順番を変更します、[Japanese On/Off:...]を "↑Up"ボタン で先頭に移動します。
【重要】ここで、VirtualBoxを起動してWindows10のVMにし、IMEのキー割り当てを変更します。
IMEの「あ/A アイコン」で右クリックしてプロパティを開きます、さらに詳細設定を開いて、[全般][編集操作][キー設定]の"変更"ボタンから開いたウインドウで"キー追加"ボタンを押し、ctrl+7 を押下でOKします。これで追加されたctrl+7の行の先頭項目'入力/変換済み文字なし'を"IME-オフ"に設定します(項目を右クリック)
同じように、"キー追加"ボタンを押し、ctrl+. を押下でOKします。これで追加されたctrl+.の行の先頭項目'入力/変換済み文字なし'を"IME-オン"に設定します(項目を右クリック)
※つまり、Karabiner-elementsで、左⌘はctrl+7 , 右⌘はctrl+. となっているので、これをIME-オフ, オンにする
これで、Windows10(VirtualBox)で、Macと同じように左⌘キー/右⌘キーで日本語が切り替わります。
★追記!:困ったWindows変更:IMEプロパティ設定が勝手に無くなる!!キー変更が機能しない...
対処方法:いろんな人が文句を言いながらも対処を載せている(下記参考:記事の一例)
※一度プロパティ設定してある場合は、プロパティ表示が無くなっても復活させればキー設定も復活します
【参考URL:IMEプロパティ復活】
IMEのプロパティがない!詳細設定がない!最短で元に戻す方法【Windows 10】
(3)おまけ:Windows10(VirtualBox)で、MacOSと同じに⌘+←,→,↑,↓ でカーソル移動の手順
Karabiner-elementsの[Preferences]メニューから表示されるポップアップ画面の[Complex modifications]タブを選んで、左下のボタン[Add rule]を押す。 表示されるruleから、"Japanese-Setting for US-keyboard on VirtualBox"の [CursorMove with CTRL...] を"Enable"にする。
【重要】EnableになったRulesの順番を変更します、[CursorMove with CTRL...]を "↑Up"ボタン で先頭の次(2番目)に移動します。
これで、Windows10(VirtualBox)で、Macと同じように⌘+←,→,↑,↓ が行頭,行末,文書頭,文書末へのカーソル移動となります。
【windows側の日本語切り替えは、なぜ ctrl+7, ctrl+. キーなのか? の話】
Windows(VirtualBOX)でMS-Officeを使使いますよね〜ふつう...
で、Word,PowerPoint,Excel,特にExcelではショートカットキーが大量に存在してて、そのキーを変更できなかったり変更が面倒だったりします。このために、日本語のIME-オフ、オンにしたいキーとカブったりすると困るわけです。
そこで、MS-Officeのどれにも使われてないショートカットキーを探しました、すると(たぶん...)ctrl+7, ctrl+. は大丈夫そうでした。
そういうわけで、このキー割り当てになっています。
その後の話 ...(2023年)
Windowsアプリは、どうにもショートカットキーが散乱・混乱してて統一されておらず勝手に個々にアサインしている気配。なので被らないキーを割り当てようとしても難しい・・・
現時点では、左⌘キーは CTRL+Shift+F11 とすることで他アプリと競合しない模様.
JapaneseSettingForMacUSkeyOnVirtualBox.jsonスクリプトは、
"description": "Japanese On/Off :...のブロックの最初のルール定義部分の
"to_if_alone": [ { "key_code": "7" , "modifiers" : [ "left_control" ] } ],
を
"to_if_alone": [ { "key_code": "f11" , "modifiers" : [ "left_control" ,"shift" ] } ],
に変更してください.