状況
蓋を閉じるとmacが復帰できなくなる、画面はついたとしても入力できない、カーソルが動かない、画面がついたとしても画面つくまでが遅いしもちろん動かない
蓋を開けたままにして画面が暗くなった場合は問題なく復帰できる
環境
macbookpro 2019 13inch
fedora 42.2
手順
手順 0:カーネルが「モジュールの強制アンロード」を許可している必要があるので確認
grep "CONFIG_MODULE_FORCE_UNLOAD" /boot/config-$(uname -r)
結果がyであればよいです
手順 1:必要なコマンドのパスを確認する(modprobe,rmmodの場所を確認)
通常は/usr/binにあるとのことなので今回は/ser/binにあるものとする
wakaba@fedora ~ % which modprobe
/usr/bin/modprobe
wakaba@fedora ~ % which rmmod
/usr/bin/rmmod
wakaba@fedora ~ %
手順 2: サービスファイルの作成
サスペンドの直前と直後に特定の動作をさせるための設定ファイルを作成します。
1.ターミナルでエディタ(nanoなど)を使ってファイルを作成します。
sudo nano /etc/systemd/system/suspend-fix-t2.service
2.以下の内容をコピーして貼り付けてください。
※Wi-Fi,touch barも不安定な場合は、# でコメントアウトされている行の # を消してください。
貼り付けたあとにctrl+o , enter , ctrl+xで保存です
[Unit]
Description=Disable and Re-Enable Apple BCE Module (and Wi-Fi)
Before=sleep.target
StopWhenUnneeded=yes
[Service]
User=root
Type=oneshot
RemainAfterExit=yes
# サスペンド時にWi-Fiを切る場合は下の2行の # を消す
#ExecStart=/usr/bin/modprobe -r brcmfmac_wcc
#ExecStart=/usr/bin/modprobe -r brcmfmac
# T2チップのコントローラー(BCE)を強制的に切り離す
ExecStart=/usr/bin/rmmod -f apple-bce
# 復帰時にBCEを再読み込みする
ExecStop=/usr/bin/modprobe apple-bce
# サスペンド時にWi-Fiを戻す場合は下の行の # を消す
#ExecStop=/usr/bin/modprobe brcmfmac
# Touch Barが真っ暗になる場合#コメントアウトを削除
#sudo systemctl restart tiny-dfr
[Install]
WantedBy=sleep.target
手順 3: サービスの有効化
作成した設定をシステムに反映させ、自動で実行されるようにします。
1行目が読み込みで、2行目が反映ですね。
無効化する場合はenable -> disableです
sudo systemctl daemon-reload
sudo systemctl enable suspend-fix-t2.service
シンボリックリンクの作成がされます。
Created symlink ... というメッセージは、**「ショートカット(シンボリックリンク)を作りました」**という意味です。
あなたが作った本体ファイル:/etc/systemd/system/suspend-fix-t2.service
システムが自動で作ったショートカット:/etc/systemd/system/sleep.target.wants/suspend-fix-t2.service
Linuxのシステムは、「スリープ(sleep.target)に入るときに実行したいもの」を sleep.target.wants というフォルダの中にまとめて管理しています。今回の enable コマンドによって、あなたの作った設定ファイルがその「実行リスト」に正式に登録されたわけです。
参考
その他参考
どうやらディープサスペンド状態(stateful suspend deeply)になると、(悪名高い)wifiカードの挙動云々で復帰できなくなるらしいです
別の方法でサスペンド自体を無効にしてもいいかと思います
設定ファイルを開く
sudo nano /etc/systemd/logind.conf
以下の行を探し、コメントアウト(#)を消して ignore に書き換えます(無ければ追記してください)。
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore
HandleLidSwitchDocked=ignore
保存(Ctrl+O → Enter)して終了(Ctrl+X)します。
設定を反映させるために以下のコマンドを実行します。
sudo systemctl restart systemd-logind