MacBook Pro (T2 Chip) Fedora 42.2 環境構築メモ
Touch Bar制御・スリープ復帰・キーカスタマイズの統合管理
T2チップ搭載MacでLinuxを運用する際、複雑になりがちな「設定ファイル」「本体」「実行コマンド」の役割を整理しました。
1. システム構成・ディレクトリ設計の棲み分け
Linuxでは「システム標準の動作」と「ユーザー独自のカスタマイズ」を場所で分けて管理します。
| カテゴリ | 主なディレクトリ | 役割 |
|---|---|---|
| ユーザー設定 | /etc/ |
ユーザーが編集する指示書(Config)。アップデートで上書きされない。 |
| システム基盤 | /usr/lib/ |
OSやパッケージが管理する本体・手順書。基本はいじらない。 |
| ユーザー道具 | /usr/local/bin/ |
ユーザーが自作したスクリプトやバイナリを置く場所。 |
| 個人設定 |
~/ (Home) |
ログインユーザー個別の設定(エイリアスなど)。 |
2. 主要コンポーネント管理表
各ツールの「どこに何があり、どう動かすか」のまとめです。
| ツール名 | 役割 | 設定・手順書の場所 (Config / Unit) | 実行・管理コマンド |
|---|---|---|---|
| systemd | OSサービス管理 |
/etc/systemd/system/ (自作) |
systemctl [start/restart/status] |
| tiny-dfr | Touch Bar制御 | /etc/tiny-dfr/config.toml |
systemctl restart tiny-dfr |
| suspend-fix-t2 | スリープ復旧 | /etc/systemd/system/suspend-fix-t2.service |
systemctl restart suspend-fix-t2 |
| keyd | キー入力変換 | /etc/keyd/default.conf |
sudo keyd reload |
| zsh | シェル環境 | ~/.zshrc |
source ~/.zshrc |
| 自作スクリプト | 機能の実体 | /usr/local/bin/fn_toggle-touchbar |
(直接実行) |
2. 主要コンポーネント管理表(完全版)
各機能の「設定」「手順書」「本体」「実行コマンド」の対応表です。
| ツール名 | 役割 | 設定・手順書の場所 (Config / Unit file) |
本体ファイルの場所 (Binary / Executable) |
実行・管理コマンド |
|---|---|---|---|---|
| systemd | OSサービス管理 | /etc/systemd/system/ |
/usr/lib/systemd/systemd |
systemctl [command] |
| tiny-dfr | Touch Bar制御 | 標準としての動き方(dnf installした時点である)/usr/lib/systemd/system/tiny-dfr.service独自の設定 /etc/tiny-dfr/config.toml
|
/usr/bin/tiny-dfr |
systemctl restart tiny-dfr |
| suspend-fix-t2 | スリープ復旧 | /etc/systemd/system/suspend-fix-t2.service |
なし(スクリプト呼び出し) | systemctl restart suspend-fix-t2 |
| keyd | キー入力変換 | /etc/keyd/default.conf |
/usr/bin/keyd |
sudo keyd reload |
| zsh | シェル環境 | ~/.zshrc |
/bin/zsh |
source ~/.zshrc |
| 自作スクリプト | 機能の実体 | なし(ファイル自体が設定兼実体) | /usr/local/bin/fn_toggle-touchbar |
(直接実行) |
3. 実装したカスタマイズの構造
① Touch Barのモード切り替え (Toggle Script)
/etc/tiny-dfr/config.toml 内の MediaLayerDefault の値を sed コマンドで書き換え、tiny-dfr サービスを再起動(または設定反映)させる自作スクリプト。
② CapsLockの多機能化 (keyd)
keyd を使用し、CapsLockに以下の2つの役割を付与。
-
長押し:
Controlキーとして動作 -
単押し: 上記の
fn_toggle-touchbarスクリプトをroot権限で実行
③ Wi-Fi不安定解消 (wifi-fix)
ドライバ brcmfmac のカーネルモジュールを一度デタッチ(-r)し、再度ロードすることでネットワーク接続を強制復旧させるエイリアス。
4. 逆引きトラブルシューティング・コマンド
-
Touch Barが反応しない/表示を変えたい
sudo systemctl restart tiny-dfr -
CapsLockの設定を変更した
sudo keyd reload -
エイリアス(wifi-fix等)が効かない
source ~/.zshrc -
スリープ復帰後に調子が悪い
sudo systemctl restart suspend-fix-t2 -
ログを確認してデバッグしたい
sudo journalctl -u [サービス名] -f
5. 「道具」と「手順書」の独立性:systemdの正体
Linuxにおいて、プログラムを「単なる道具」として使うか、「システムの一部(サービス)」として使うかは、ユーザーが自由に選べます。
プログラムは「独立」して存在できる
例えば、あなたが作成した fn_toggle-touchbar は、/usr/local/bin/ に置いて実行権限(chmod +x)を与えた時点で、一つの独立した道具として完成しています。
- ターミナルから
/usr/local/bin/fn_toggle-touchbarと打てば、いつでも単体で動かせます。 - つまり、「本体(プログラム)」は「手順書(.service)」がなくても存在し、動作します。
役割ごとのファイル所在まとめ
各機能が「道具本体」「手順書」「ユーザー設定」としてどこに配置されているかを整理しました。
| 機能名 |
① 道具本体 (Binary) 「何をするか」の実体 |
② 手順書 (Service) 「いつ、どう動かすか」 |
③ ユーザー設定 (Config) 「好みの設定は何か」 |
|---|---|---|---|
| 場所のルール |
/usr/bin/ など |
/usr/lib/systemd/system/ |
/etc/ |
| keyd | /usr/bin/keyd |
/usr/lib/.../keyd.service |
/etc/keyd/default.conf |
| tiny-dfr | /usr/bin/tiny-dfr |
/usr/lib/.../tiny-dfr.service |
/etc/tiny-dfr/config.toml |
| suspend-fix | /usr/local/bin/fn_toggle-touchbar |
/etc/systemd/system/suspend-fix-t2.service |
(スクリプト内に直接記述) |
なぜ「手順書(.service)」を作るのか?
単体で動く道具を、あえて systemd というマネージャーに預ける(=サービス化する)理由は3つあります。
- 全自動化: PC起動時やスリープ復帰時に、人間が打たなくても勝手に実行させるため。
- 権限の委託: 本来パスワードが必要な操作(root権限)を、システム側で安全に代行させるため。
- 継続的な監視: プログラムがエラーで落ちた時に、自動で再起動させるため。
結論:
suspend-fix-t2.serviceは、独立した道具であるスクリプトを「スリープ復帰時に自動で実行せよ」という任務に就かせるための、いわば**「辞令(手順書)」**なのです。
6. 上級者向けの仕組み:手順書の上書き(オーバーライド)
Linuxシステム(systemd)には、**「標準設定よりもユーザー設定を優先する」**という明確な優先順位があります。
優先順位のルール
-
/etc/systemd/system/(ユーザー作成の特注品):最優先 -
/usr/lib/systemd/system/(パッケージ付属の既製品):標準
もし tiny-dfr や keyd のような既製品(/usr/lib/ 所在)の「起動タイミング」や「挙動」を自分専用にカスタマイズしたくなったら、その手順書を /etc/systemd/system/ にコピーして編集することで、**システム全体の挙動を「上書き(オーバーライド)」**できます。
# 1. 既製品の手順書を「特注品置き場」にコピーする
sudo cp /usr/lib/systemd/system/tiny-dfr.service /etc/systemd/system/
# 2. コピーしたファイルを編集する
sudo nano /etc/systemd/system/tiny-dfr.service
# 3. systemdに「手順書が変わったぞ」と教えて反映させる
sudo systemctl daemon-reload
sudo systemctl restart tiny-dfr
7./usr/shareとの違い
-
/usr/lib (Libraries & Architecture-dependent data):
プログラムが動くために直接必要な「ライブラリ」や「システム設定のデフォルト(既製品)」を置く場所です。systemd のユニットファイル(.service)は、OSが起動プロセスを組み立てるためのシステム構成の一部とみなされるため、歴史的にここが定位置となっています。 -
/usr/share (Architecture-independent data):
こちらは「共有データ」置き場です。例えば、アイコン画像、マニュアル(man)、フォント、辞書データなど、プログラムの動作ロジックとは直接関係ない補助データが置かれます。
💡 まとめ:エンジニアとしての覚え方
- /etc = ユーザーが「書き換える」場所
- /usr/lib = システム(dnfなど)が「管理する」場所
- /usr/share = アプリが「参照する」素材(画像や文書)置き場
8. まとめ:自分だけの最強のMacBook Proへ
今回の構築を通じて、MBP (T2 Mac) の制御は以下の3層構造で支えられていることが整理できました。
-
道具本体 (Binary/Script):
- 場所:
/usr/bin/,/usr/local/bin/ - 役割: 「何をするか」の実体。
- 場所:
-
指示書 (Config):
- 場所:
/etc/ - 役割: 「どんな設定(メディアキーかFキーか等)」にするかの好み。
- 場所:
-
マネージャー (systemd):
- 場所:
/etc/systemd/system/,/usr/lib/systemd/system/ - 役割: 道具を「いつ、どう動かすか」の管理。
- 場所:
これらを理解することで、単に「動かないから直す」フェーズから、**「システム全体を自分好みに設計する」**フェーズへと進化することができます。