如何把 MacBook 變成 24/7 的 Debian 伺服器

4 min

近期家人把 Macbook Pro 2015 年份的筆電還給我,但自己已經有 M 系列的 Mac MiniMacbook Pro,想說不要浪費它就把他拿來跑一些 Docker 應用。

不過,直接把筆電闔上並不等於可以安心當伺服器。預設行為是闔蓋後休眠;即使設定成不休眠,某些 MacBook 的內建螢幕背光仍可能繼續亮著。這篇記錄的是我在 Intel MacBook Pro 2015 與 Debian 13 的設定方式:闔蓋後服務持續運作,但關閉內建面板背光。

目標與前提

完成後的行為應該是:

  • 闔蓋不進入 suspend,SSH 與所有背景服務不中斷。
  • 闔蓋時關閉內建螢幕背光,避免無謂耗電與發熱。
  • 開蓋時重新開啟背光。
  • 仍能以 SSH 正常管理主機。

本文假定系統使用 systemd,且是 non-GUI 的 Debian 安裝。以下指令都以可使用 sudo 的帳號執行。

1. 不讓闔蓋使系統休眠

systemd-logind 負責處理闔蓋行為。建立一個獨立的設定檔,避免直接修改系統預設檔案:

sudo mkdir -p /etc/systemd/logind.conf.d
sudoedit /etc/systemd/logind.conf.d/lid.conf

填入:

[Login]
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore
HandleLidSwitchDocked=ignore

三個選項分別涵蓋一般情況、接上電源與接上外接螢幕/底座的情境。ignore 的意思是 logind 不對闔蓋事件執行 suspend、hibernate 或關機。

套用設定最穩妥的方式是重新開機:

sudo reboot

也可以重啟 systemd-logind,但這可能使目前的登入工作階段短暫中斷;遠端管理中的主機通常直接重開機比較單純。

sudo systemctl restart systemd-logind

2. 確認 Linux 有收到闔蓋事件

先確認核心是否真的看得到蓋子狀態:

cat /proc/acpi/button/lid/*/state

闔蓋時應出現:

state:      closed

開蓋時則是 open。如果狀態完全不變或找不到此檔案,先不要進行後續自動化;那代表核心尚未正確支援這台機器的闔蓋開關,需要先處理 ACPI 或該機型的 Linux 硬體支援問題。

3. 找出內建螢幕的背光控制器

在這台 2015 Intel MacBook Pro 上,Intel 顯示核心會提供 intel_backlight

ls /sys/class/backlight

輸出:

intel_backlight

bl_power 可直接控制背光。先測試能否手動熄掉螢幕:

sudo sh -c 'echo 4 > /sys/class/backlight/intel_backlight/bl_power'

螢幕會熄滅,但系統本身、網路連線和 SSH 都會繼續運作。要立即重新開啟背光:

sudo sh -c 'echo 0 > /sys/class/backlight/intel_backlight/bl_power'

這一步很重要:只有在手動控制確實有效後,才值得把它接到闔蓋事件上。不同機型的背光名稱可能不同,請以 ls /sys/class/backlight 的結果取代本文的 intel_backlight

4. 用 acpid 將闔蓋事件連到背光控制

安裝 ACPI 事件服務:

sudo apt update
sudo apt install acpid

新增事件規則:

sudoedit /etc/acpi/events/lid

填入:

event=button/lid.*
action=/etc/acpi/lid.sh %e

接著建立對應腳本:

sudoedit /etc/acpi/lid.sh

內容如下:

#!/bin/sh

case "$3" in
  close) echo 4 > /sys/class/backlight/intel_backlight/bl_power ;;
  open)  echo 0 > /sys/class/backlight/intel_backlight/bl_power ;;
esac

其中 %e 會把 ACPI 事件傳給腳本;通常第三個參數會是 closeopen。設定執行權限並啟用服務:

sudo chmod 755 /etc/acpi/lid.sh
sudo systemctl enable --now acpid
sudo systemctl restart acpid

現在闔蓋時,acpid 會把背光設為 power down;開蓋時再恢復。你可以先從 SSH 執行下列指令觀察服務日誌,再手動開闔蓋測試:

sudo journalctl -u acpid -f

Comments

Loading comments...