步骤一:安全编辑sudo免密规则,无权限漏洞
bash
sudo visudo -f /etc/sudoers.d/mbp-lid-acpi
写入以下内容
# 授权root无密码执行屏幕亮度控制命令
root ALL=(ALL) NOPASSWD: /usr/bin/tee /sys/class/backlight/*/brightness
步骤二:创建 ACPI 轮询核心脚本
bash
sudo nano /usr/local/bin/mbp-lid-acpi.sh
#!/bin/bash
# MBP纯ACPI合盖/开盖控制脚本 | 无button目录专用 | 7×24运行
# 日志路径(/tmp权限全开,必生成日志,可随时查看)
LOG_FILE="/tmp/mbp-lid-acpi.log"
# ✅ 固定使用你能识别的ACPI LID0路径(绝对可靠)
LID0_PATH="/proc/acpi/button/lid/LID0/state"
# ✅ 自动识别背光路径(兼容Intel/M系列MBP)
BACKLIGHT_PATH=$(ls -d /sys/class/backlight/* 2>/dev/null | head -1)
# 亮度配置(可自定义:开盖恢复50%亮度,满亮度改为 $MAX_BRIGHT 即可)
MAX_BRIGHT=$(cat ${BACKLIGHT_PATH}/max_brightness)
RESUME_BRIGHT=$((MAX_BRIGHT / 2))
# 记录上一次状态,避免重复执行操作(降低资源占用)
LAST_LID_STATE=""
# 初始化日志
echo -e "=====================================" >> $LOG_FILE
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ✅ MBP ACPI LID0轮询服务启动" >> $LOG_FILE
echo "[$(date)] 背光控制路径:$BACKLIGHT_PATH" >> $LOG_FILE
echo "[$(date)] 屏幕最大亮度:$MAX_BRIGHT | 开盖恢复亮度:$RESUME_BRIGHT" >> $LOG_FILE
echo "[$(date)] ✅ 开始每秒检测合盖/开盖状态..." >> $LOG_FILE
# 无限后台轮询(核心逻辑,资源占用≈0)
while true; do
# 100%读取合盖/开盖状态
CURRENT_LID_STATE=$(cat ${LID0_PATH} | awk '{print $2}')
# 仅当状态发生变化时执行操作(避免重复写入亮度)
if [ "${CURRENT_LID_STATE}" != "${LAST_LID_STATE}" ]; then
echo -e "\n[$(date)] ⚡ 状态变化:${LAST_LID_STATE} → ${CURRENT_LID_STATE}" >> $LOG_FILE
# 合盖 → 强制灭屏(亮度0,彻底解决发烫)
if [ "${CURRENT_LID_STATE}" = "closed" ]; then
echo 0 | sudo tee ${BACKLIGHT_PATH}/brightness > /dev/null
echo "[$(date)] ✅ 合盖成功 → 屏幕已熄灭,无发烫" >> $LOG_FILE
# 开盖 → 自动亮屏(恢复预设亮度)
elif [ "${CURRENT_LID_STATE}" = "open" ]; then
echo ${RESUME_BRIGHT} | sudo tee ${BACKLIGHT_PATH}/brightness > /dev/null
echo "[$(date)] ✅ 开盖成功 → 屏幕已亮起(亮度${RESUME_BRIGHT})" >> $LOG_FILE
fi
# 更新上一次状态
LAST_LID_STATE=${CURRENT_LID_STATE}
fi
# 每秒检测一次,CPU占用<0.1%,完全不影响NAS/Frigate运行
sleep 1
done
步骤三:创建 systemd 系统服务(开机自启 + 7×24 守护)
bash
sudo nano /etc/systemd/system/mbp-lid-acpi.service
[Unit]
Description=MBP ACPI LID0合盖开盖控制服务(无button目录专用,7×24运行)
After=multi-user.target network-online.target
Wants=network-online.target
# 依赖网络服务,确保NAS网络就绪后启动
Requires=network.target
[Service]
# 后台持续运行模式
Type=simple
# 执行核心脚本
ExecStart=/bin/bash /usr/local/bin/mbp-lid-acpi.sh
# 关键配置:意外退出/崩溃后自动重启,永不间断
Restart=always
# 重启间隔3秒,避免频繁重启
RestartSec=3
# 以root权限执行,无任何权限限制
User=root
# 忽略执行中的无关错误,保证服务稳定
IgnoreSIGPIPE=no
[Install]
# 多用户模式下开机自启(非GUI环境必选)
WantedBy=multi-user.target
步骤 4:赋权 + 启用服务(一键完成,立即生效)
bash
# 1. 给脚本执行权限
sudo chmod +x /usr/local/bin/mbp-lid-acpi.sh
# 2. 重载系统服务配置,使新服务生效
sudo systemctl daemon-reload
# 3. 设置开机自启 + 立即启动服务
sudo systemctl enable --now mbp-lid-acpi.service
# 4. 验证服务状态(确保运行中,无报错)
sudo systemctl status mbp-lid-acpi.service
步骤5:查看日志
bash
tail -f /tmp/mbp-lid-acpi.log
运行截图:
