问题描述
在使用 rEFInd 引导的 Ubuntu + Windows 双系统中,使用 NVIDIA 独显时,每次重启后屏幕亮度都会恢复为最大值,之前设置的亮度不会被保存。
原因
Ubuntu 默认不会持久化保存亮度设置,NVIDIA 独显驱动也不会自动恢复上次的亮度,导致每次开机都重置为最大值。
解决方法:用 systemd 服务保存和恢复亮度
1. 找到亮度控制文件
ls /sys/class/backlight/
记下你的设备名(如 nvidia_0),后续替换脚本中对应位置。
2. 创建恢复亮度脚本
sudo bash -c 'cat > /usr/local/bin/restore-brightness.sh << "EOF"
#!/bin/bash
if [ -f /etc/brightness-saved ]; then
cat /etc/brightness-saved > /sys/class/backlight/nvidia_0/brightness
fi
EOF'
sudo chmod +x /usr/local/bin/restore-brightness.sh
3. 创建保存亮度脚本
sudo bash -c 'cat > /usr/local/bin/save-brightness.sh << "EOF"
#!/bin/bash
cat /sys/class/backlight/nvidia_0/brightness > /etc/brightness-saved
EOF'
sudo chmod +x /usr/local/bin/save-brightness.sh
4. 创建 systemd 服务
sudo nano /etc/systemd/system/brightness.service
内容如下:
[Unit]
Description=Restore screen brightness
After=display-manager.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/restore-brightness.sh
ExecStop=/usr/local/bin/save-brightness.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
5. 启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable brightness.service
sudo systemctl start brightness.service
6. 验证状态
sudo systemctl status brightness.service
看到 active (running) 即表示成功。
注意事项
- 脚本第一行
#!/bin/bash(shebang)必须加,否则 systemd 不知道用什么解释器执行脚本,会报status=203/EXEC错误。 - 如果脚本是从 Windows 环境复制过来的,可能含有
\r\n换行符,需要用以下命令修复:
sudo sed -i 's/\r//' /usr/local/bin/restore-brightness.sh
sudo sed -i 's/\r//' /usr/local/bin/save-brightness.sh