🧷

Karabiner-elementsの許可を全部出しても1ミリも動かない時はここを見ろ

2024/12/11に公開

結論 外付けディスクを使う時はオーナーシップをenableにする

出すべき許可を全部出しても、単純な設定すら1ミリも動かない時、

外付けディスクに設定を置いていないかチェック しよう。

Karabiner-elementsは ~/.config/karabiner/karabiner.json、つまりホームディレクトリに設定ファイルを置く。私は1TのSSDをMacbookProの天板に貼り付けてそこをホームにしているため、これに引っかかった。

引っかかった人は、

当該ディスクのオーナーシップを有効に

しよう。そうすると動く。

% diskutil list | grep ディスク名
  1:                APFS Volume ディスク名              430.4 GB   disk7s1
# 最後の項目がディスクID(この場合disk7s1)
% sudo diskutil enableOwnership ディスクID

またはFinderで当該ディスクの「情報を見る」を表示し、鍵マークをはずしたのちに(管理者権限、パスワード入力が必要)「このボリューム上の所有権を無視」チェックボックスを外す。

ここからはお話

情報は以上。ここからは、

🤔動かない → 😆動いた → 🤨何だったんだ → 😃なるほどね

というお話。

Karabiner-elementsは親切

Karabiner-elementsは「キー入力をすげ替える」という身上のため、デフォルトでは許可されていない動きをユーザ側であれこれ許可する必要がある。ひとつでも許可しそこねると動かない。

動かない時、Karabiner-elementsは「動きません」で終わらせず、許可状況を可能な限り検出し、「このような許可が必要です、こうやって許可してください」と支援してくれて、大変親切。ソフトにも人柄が出るのだと思う。

親切さでカバーできないこともある。そういう時はログを見ろ。書いてある

が、必要があって何年かぶりに動かそうとしたところ、うんともすんとも言わない。単純なキーすげ替えひとつ動かない。言われたことは全部やった。許可が不足しているのかと何回もチェックしたり、許可を取り消して許可し直したり、再インストールしたり、再起動したりしたが、どうしても動かない。

設定のサイドバーにLogというのがあるな、と気がついた。エラーが出ていた。エラーメッセージがゲットできればこっちのものだ。エラーメッセージで検索したら公式のトラブルシューティングがヒットした。

https://karabiner-elements.pqrs.org/docs/help/troubleshooting/json-owner-is-invalid/

まさにこれだった。動いた。やはりKarabiner-elementsは親切。わかりやすいドキュメントがあると助かる。

ところでオーナーシップというのは何なんだ。気になる。

Macのディスクのオーナーシップとは

Macとしては「外付けディスクは気軽にあちこちのマシンにつけ外しするもの」と想定しているようだ。だから外付けディスクはデフォルトでファイルの所有者やそれ由来のアクセス権を無視して全アクセス可能、ということになっているらしい。

確かに、USBメモリのファイルの受け渡しでいちいち「アクセス権がありません」と言われるようでは使いづらい。

あるディスクの振る舞いをどっちにするのか、それをコントロールするのが「ディスクのオーナーシップ」とのこと。

  • ファイル所有者やアクセス権に沿ってアクセスの可不可を決めるか (enable)
  • このディスク内は全アクセス可とするか (disable)

というスイッチなのだ。

enableだとアクセスユーザとファイル所有者を見比べて読み書きを制御する。通常の動きだ。

disableだと誰でも何でもできる。が、その分、今回のKarabiner-elementsのように「そんなところに置かれたファイルは信用できない」という扱いをされることもある。

Macで外付けを固定運用している人は気に留めておこう。

コードを読みに行く。なぜならエンジニアだから

Karabiner-elementsはオープンソースで、好きなだけコードが読める。おおむねC++で書かれている。硬派だ。

実際のコードを見ると、設定ファイルの所有者をチェックしている。オーナーシップがdisableのディスク内のファイルの所有者を取得すると「誰のだかわかりません」になるのだろうと思われる。

https://github.com/pqrs-org/Karabiner-Elements/blob/main/src/share/core_configuration/core_configuration.hpp#L64-L75

https://github.com/pqrs-org/cpp-filesystem/blob/main/include/pqrs/filesystem.hpp#L48-L54

なるほどね。納得。

今回のまとめ

  • Macで外付けを固定運用する時はオーナーシップをenableにする
  • 動かない時はログを見る。エラーメッセージを読む。検索にブチ込む
  • オープンソースなら気になったところのコードを読む。楽しい。おすすめ👍🏻

Discussion