(2021/4/19 追記)
この事象が起こるのはKarabiner-Elements
を使っている場合のみで、原因はVirtual keyboard機能にありそうです。
Macにはキーボードごとに配列を記憶してくれる機能があるみたいですが、先述の機能によりうまく動いてくれません。
おそらくですが、OSには入力しているキーボードがKarabiner DriverKit VirtualHIDKeyborad x.x.xかのように見えているためかと考えています。
そのため、Virtual keyboardを無効化できれば解決しそうですが、無効化の方法が見つかりませんでした。(実際にKarabiner-Elements
を終了してみるとキーボードごとに判定される)
いつかまた状況が変わるかもしれませんが、とりあえず以下の運用を続けています。
JIS配列のMacbookでUS配列のキーボード(HHKB等)を使っていると起こる、キーボードの種類切替めんどくさい問題。
色々検索してみたところ、Karabiner-Elements
でプロファイル切り替えが安定していそうです。
そもそも原因はKarabiner-Elements
でした。
参考にさせていただいた記事:AlfredでKarabiner-Elementsのプロファイルを切り替えるWorkflowの作り方
私はAlfred
を使っていないので、Automator
+ AppleScript
でやってみました。
環境
MacBook Air (M1, 2020) - JIS配列
macOS Big Sur (11.2.3)
Karabiner-Elements (13.4.0)
Bluetoothキーボード - US配列
Karabiner-Elementsのインストール
Karabiner-Elements
設定方法等は割愛します。
Karabiner-ElementsでProfileの作成
Karabiner-Elements
の設定でProfiles
を選び、JISとUSを作ります。このProfileの名称をスクリプトで使うので、違う言葉を使いたい人は後述のスクリプトでも適宜変更してください。
この時点では中身は考えなくて良いですが、すでに設定してあるものがある場合は新しいProfileにも全て設定しないといけません。
コピーする方法があるのかもしれませんが、知りません。。。教えてください。
Profileが作れたらVirtual keyboard
の設定を変更します。
Country code
を以下のとおり設定します。
US:0
JIS:45
値を変えるとMacのキーボード設定アシスタントが出てくるはずです。
こちらを進めて、USの時はANSI(US配列)
、JISの時はJIS
で設定しておきます。
キーボード設定アシスタントが出てこない時はCountry code
の上下矢印で一度別の値に変えると表示されたりするので、画面が表示されてからCountry code
を正しい値に設定し、キーボード設定アシスタントをやってみてください。
それでも出ない場合はそれぞれの状態で環境設定のキーボードからやった方がいいかもしれません。
切り替えるスクリプトの作成
いよいよスクリプト作ります。
今回はキーボードショートカットに入れたいので、Automator
のクイックアクション
を選びます。
ワークフローの受け取る項目を入力なし
に変え、ユーティリティ
のシェルスクリプトを実行
で以下のスクリプトを入力します。
# 現在のprofileを取得
cur=`'/Library/Application Support/org.pqrs/Karabiner-Elements/bin/karabiner_cli' --show-current-profile-name`
# US/JIS
if [ $cur = "JIS" ]; then
par="US"
else
par="JIS"
fi
# profileの切替
'/Library/Application Support/org.pqrs/Karabiner-Elements/bin/karabiner_cli' --select-profile $par
結果、こんな感じになります。
スクリプトができたら右上の実行を押してみて、うまく切り替わってるか確認。
現在のProfileはメニューバーで確認できます。
実行でエラーなく、実行後に切り替わってればOK。
うまくできたら保存して適当に名前をつけておいてください。
スクリプト作成は終了です。
ショートカットへの登録
先ほど、クイックアクション
を作成して保存したので、環境設定 -> キーボード -> ショートカットのサービスにAutomator
で作成したクイックアクション
が登録されています。
そちらにショートカットキーを登録すれば完成です!
(私はスクリプト名をキーボードタイプ切り替え
にして、Ctrl+/
を登録しています。)
さいごに
お疲れ様でした。
せっかくキーボードショートカットに登録しているものの、使う機会も少なく、ショートカットを忘れがちです。
もし使っていないキーがあれば、ショートカットを複雑にしてそのキーをKarabiner-Elementsに設定することで1ボタンで切り替え
とかもできそうですが、そうなるとMacbook単体ではショートカット操作ができないとかが出てきそうです。
色々あるとはわかっていつつ、やっぱり面倒なので、Plag & Playでできる世界が来てほしいです。