Corredor

ウェブ、プログラミングの勉強メモ。

Mac でコマンドラインからキーボードの種類を変更したかった

職場で、日本語配列の MacBook に US 配列の外付けキーボードを繋いで作業している。

neos21.hateblo.jp

そのため、日頃は MacBook を起動したら「システム環境設定」→「キーボード」→「キーボードの種類を変更...」と進んで「キーボード設定アシスタント」を起動してキー配列を「ANSI」にすることで、US 配列の外付けキーボードを活かしているのだが、この作業が面倒臭い。どうせ ANSI を選ぶのは分かっているのだから、コマンドラインで一発で変えられたら楽チンだ。

そして、外付けキーボードを使わず MacBook だけ持ち歩く時は、日本語配列に戻しておかないと「アンダースコア」など入力できないキーが出てくるので、すぐさま JIS 配列に戻したい。

ということで、コマンドラインで一発でキーボードの種類を ANSI なり JIS なりに変更する方法がないか、調べてみた。

「キーボード設定アシスタント」に辿り着くまでを短くする

以前紹介したが、Option + (fn) + F5 キーで、「システム環境設定」→「キーボード」の画面を一発で開けるので、コレで手数を減らせる。

neos21.hatenablog.com

コレを更に短くするには、以下のようにコマンドラインから直接「キーボード設定アシスタント」を起動させてやれば良い。

$ open /System/Library/CoreServices/KeyboardSetupAssistant.app

# もしうまく起動しない場合は以下の呼び方も試してほしい
$ sudo open /System/Library/CoreServices/KeyboardSetupAssistant.app/Contents/MacOS/Keyboard SetupAssistant

コレはとりあえず動作した。

不明 : HIToolbox を編集する?

com.apple.HIToolbox という .plist (「プロパティリスト」と呼ぶ) が、キーボードレイアウトに関する情報を持っているっぽい文献がいくつか見つかったが、どうもコレは「キーボード設定アシスタント」で変更しているモノではなく、キーボードレイアウトの定義体の話みたいで、画面としては「システム環境設定」→「キーボード」→「入力ソース」タブで見られるモノに近いみたい。

思っていたところがイジれないようなので断念。

# こんなコード片は見付けたがうまく効かず。
$ defaults -currentHost write 'com.apple.HIToolbox' 'AppleCurrentKeyboardLayoutInputSourceID' -string "com.apple.keylayout.US"

失敗 : keyboardtype を変更する?

色々調べていると、「キーボード設定アシスタント」を操作した時に、com.apple.keyboardtype.plist というファイルが更新されているのが分かった。

<!-- ANSI を選択したとき -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
      <key>45073-1133-33</key>
      <integer>40</integer>
      <key>10203-5824-0</key>
      <integer>40</integer>
  </dict>
</plist>

<!-- JIS を選択したとき -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
      <key>45073-1133-33</key>
      <integer>42</integer>
      <key>10203-5824-0</key>
      <integer>42</integer>
  </dict>
</plist>

このファイルがキーボード配列の認識に影響しているらしいことは読み取れた。

試しに defaults コマンドで中身を読んでみる。

$ defaults read /Library/Preferences/com.apple.keyboardtype.plist 
{
    keyboardtype =     {
        "10203-5824-0" = 42;
        "45073-1133-33" = 42;
    };
}

ということは、コレをうまく書き換えられれば良いのかな?と思い、以下のようなコマンドで書き換えられるか試してみた。

# 40 = ANSI (US 配列) にしてみる
$ sudo defaults write /Library/Preferences/com.apple.keyboardtype.plist keyboardtype -dict 10203-5824-0 40 45073-1133-33 40

sudo を付ければ書き換えはできたのだが、実際にキーボード配列の認識は変更されなかった。変更の反映がうまくできていないのか、このファイルを書き換えるだけではダメなのかは不明。うーん残念…。

未検証 : input-source-switcher を使う?

コマンドラインで入力ソースを変えられるっぽいツールがあったのだが、cmake の準備ができておらず未検証。でもコレも「入力ソース」の変更であって、キー配列の認識を変えるモノじゃないように見える…。

以上…

というワケで、今回調べた範囲ではキー配列の認識を素早く変える方法が見付からなかった。ひとまずは「キーボード設定アシスタント」を起動するエイリアスを作っておき、手数を減らすかな…と思っている。

その他参考にした文献 (defaults で設定変更できるモノとか)。