MacOS + Karabiner-Elements 環境でLogicool K380のファンクションキーをOnにする方法
1. 元ネタ
元ネタはここから。
https://github.com/pqrs-org/Karabiner-Elements/issues/3551
2. はじめに
筆者はプログラムど素人です。
ググりながら集めた情報を書いているので、粗があるのは許してください。
背景
Logicool K380のファンクションキーを有効化するには、Logi Options+ で設定を変更する必要がある。
しかし、MacOSでKarabiner-Elementsを有効にしていると競合してしまい、Logi Options+がK380を見つけられず、設定自体ができなくなる。
https://softantenna.com/blog/logicool-k380-functionkey/
どうすりゃいいんだ
K380のファンクションキーとKarabiner-Elementsを両立するには、以下の作業を行う必要がある。
Karabiner-ElementsのDevices -> K380 -> modify events をオフ
logi options+を起動して、ファンクションキーの設定をオン
Karabiner-ElementsのDevices -> K380 -> modify events をオン
この作業はK380を再接続するたびに設定する必要があり、非常に面倒。
幸い、これをターミナルから実行できることがわかったので、Hammerspoonというソフトで自動化することにした。
3. Hammerspoonとは
Hammerspoonはキー入力、ソフトの起動などのイベントを監視し、それに反応して指定したスクリプトを走らせるソフト。
https://www.hammerspoon.org
ただし、Bluetoothデバイスの接続を監視する方法は用意されてないので、代替案として「Finderをアクティブにしたとき」に逐一スクリプトを走らせることにした。(もっと頭の良い方法はあると思うが私には無理。)
4. 自動化のやり方
プロファイルの準備
まず、Karabiner-Elements側でK380のmodify eventsをオンにしたプロファイルと、K380のmodifyをオフにしたプロファイルを作成する。
ターミナルから次のように入力し、それぞれのプロファイルを読み出せることを確認しておく。
'/Library/Application Support/org.pqrs/Karabiner-Elements/bin/karabiner_cli' --select-profile Profile_1
'/Library/Application Support/org.pqrs/Karabiner-Elements/bin/karabiner_cli' --select-profile Profile_2
ファンクションキー有効化の準備
ターミナルからファンクションキーを有効化できるプログラムが作られているので、ダウンロードしてDocumentsフォルダに展開する。
https://github.com/faust93/k380-macos
Karabiner-ElementsでK380のmodify eventsをオフになっている時に(つまり、Profile_1にした時に)、先程のプログラム呼び出すとファンクションキーが有効になる。
このプログラムは、パスワードを入力して管理者権限で実行する必要があり、そのままだとHammerspoonでは使えない。。。
※ファイルパスは適宜変えてください。
sudo /Users/USERNAME/Documents/k380-macos-main/k380 -f on
F-n keys: ON
sudoers.dの設定
Hammerspoonでさっきのコマンドをパスワード入力なしで使えるように、sudoers.dフォルダ内に設定ファイルを作る必要がある。
以降の操作は私もよく理解してないので、↓のURLを熟読のこと。
https://kenchan0130.github.io/post/2017-12-23-1
visudoを用いて、sudoers.dフォルダ内に設定ファイルを作る。
sudo visudo /private/etc/sudoers.d/k380
編集画面が開くので、「i」を押下して編集モードにした後、次のように記述する。(このあたりの操作は"エディタ vi"でググるべし)
※USERNAMEには、macにログインするときのユーザー名を入れる。
USERNAME ALL = NOPASSWD: /Users/USERNAME/Documents/k380-macos-main/k380 -f on
保存して終了するため、escキーを押下した後、「:wq」と入力して保存した。
次のように入力して、sudoers.d内に作成したファイルの文法をチェック。
sudo visudo -cs -f /private/etc/sudoers.d/k380
/private/etc/sudoers.d/k380: parsed OK
もう一度ファンクションキー有効化のコマンドを入力すると、パスワードを聞かれないまま有効化されることを確認できる。
sudo /Users/USERNAME/Documents/k380-macos-main/k380 -f on
F-n keys: ON
Hammerspoonの設定
Hammerspoonをダウンロードしてインストールする。
https://www.hammerspoon.org
起動したらメニューバーのHammerspoonのアイコンを右クリックし、Open Configから以下のコードを保存。
注:2行目のファイルパスは適宜変えてください。
c1 = "'/Library/Application Support/org.pqrs/Karabiner-Elements/bin/karabiner_cli' --select-profile Profile_1"
c2 = "sudo /Users/USERNAME/Documents/k380-macos-main/k380 -f on"
c3 = "'/Library/Application Support/org.pqrs/Karabiner-Elements/bin/karabiner_cli' --select-profile Profile_2"
function applicationWatcher(appName, eventType, appObject)
if (eventType == hs.application.watcher.activated) then
if (appName == "Finder") then
hs.execute(c1)
-- Profile_1が読み込まれた後、少しディレイを入れる必要があったのでhs.timerで実装してます。
hs.timer.doAfter(0.05, function()
hs.execute(c2);
hs.timer.doAfter(0.05, function()
hs.execute(c3);
end)
end)
end
end
end
appWatcher = hs.application.watcher.new(applicationWatcher)
appWatcher:start()
再度Hammerspoonを右クリックしてReload Configをクリックすると、スクリプトが読み込まれる。
うまく設定できていれば、FinderがアクティブになるたびにHammerspoonのスクリプトが走り、K380のファンクションキーが有効化される。
k380を再接続した際に、いちいちlogioptions+やKarabiner-Elementsを操作しなくてよくなるので便利。
めでたしめでたし。
5. 所感
特に重くはないので、とりあえず実用性はあると思う。
頭の良い方法があったら教えてください…。
もっと素直なキーボードを使えというのは無しで。
Karabiner-Elementsが無いと生きていけないので本当によかった。
情報やソフトを作ってくれた方に感謝感謝です。
6. その他参考
Karabiner-ElementsのCLIについて
https://karabiner-elements.pqrs.org/docs/manual/misc/command-line-interface/