MacBookPro运行飞牛Nas,解决合盖亮屏

步骤一:安全编辑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

运行截图:

相关推荐
GeW3 小时前
超详细!RHCE10版通用备考策略,内含评分细则解读
linux
用户041328465133 小时前
Linux 服务开机自启动怎么配置?systemctl enable 原理详解
linux
草莓熊Lotso12 小时前
【Redis 初阶】Set 类型深度解析:去重集合的运算能力与实战场景
linux·网络·数据库·windows·redis·tcp/ip·缓存
张文君12 小时前
ubuntu26.04坏道坏块分区隔离急速版260831-V0.12
linux·python
XR12345678812 小时前
汽车制造园区网络怎么建?柔性产线与 AGV 的选型逻辑
网络·汽车·制造
贝锐21 小时前
从国产化信创设备到商用安卓终端,向日葵如何帮助企业实现统一运维管理?
linux·运维·远程控制
IT大白鼠1 天前
MSF二次开发与自定义模块编写
网络·安全·web安全·msf
Julien20041 天前
调查和解决 SELinux 问题
linux·运维·服务器·网络·学习方法
kekekzt1 天前
TCP协议的粘包问题介绍,IP分片,MTU,MSS,滑动窗口的概念及之间的关系
网络·网络协议·tcp/ip
小张同学a.1 天前
Docker 容器实战 1—— docker 基础与镜像构建
linux·运维·docker·容器