見出し画像

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/

Logi Options+がK380を見つけられず、設定できない。


どうすりゃいいんだ

K380のファンクションキーとKarabiner-Elementsを両立するには、以下の作業を行う必要がある。

  •  Karabiner-ElementsのDevices -> K380 -> modify events をオフ

  • logi options+を起動して、ファンクションキーの設定をオン

  • Karabiner-ElementsのDevices -> K380 -> modify events をオン

karabiner-Elementsの画面

この作業は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/

この記事が気に入ったらサポートをしてみませんか?