Ubuntu 重启后亮度恢复最大值的解决方法(NVIDIA 独显)

使用 NVIDIA 独显的 Ubuntu 系统重启后亮度恢复最大值的原因及 systemd 服务解决方案,包含常见报错 203/EXEC 的处理方法。

问题描述

在使用 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

Leave a Reply

Your email address will not be published. Required fields are marked *