每次从屏幕锁定、睡眠或挂起恢复后,我的笔记本电脑屏幕都非常暗。如果我输入Fn+ F6,那么屏幕会立即跳到 100% 亮度。(F5和F6是我的亮度控制键。)
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
$ lspci -nnk | grep -EA3 VGA
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:25b8] (rev a1)
Subsystem: Lenovo Device [17aa:22d8]
Kernel driver in use: nouveau
Kernel modules: nvidiafb, nouveau
$ sudo lshw -c video
*-display
description: VGA compatible controller
product: NVIDIA Corporation
vendor: NVIDIA Corporation
physical id: 0
bus info: pci@0000:01:00.0
logical name: /dev/fb0
version: a1
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress vga_controller bus_master cap_list rom fb
configuration: depth=32 driver=nouveau latency=0 mode=1920x1080 visual=truecolor xres=1920 yres=1080
resources: iomemory:400-3ff iomemory:410-40f irq:199 memory:ab000000-abffffff memory:4000000000-40ffffffff memory:4100000000-4101ffffff ioport:3000(size=128) memory:ac080000-ac0fffff
$ sudo lshw | grep -i lenovo
product: 20YU002HUS (LENOVO_MT_20YU_BU_Think_FM_ThinkPad P17 Gen 2i)
vendor: LENOVO
configuration: administrator_password=disabled chassis=notebook family=ThinkPad P17 Gen 2i power-on_password=disabled sku=LENOVO_MT_20YU_BU_Think_FM_ThinkPad P17 Gen 2i uuid=4C043C28-3F2B-B211-A85C-940FFC06910B
vendor: LENOVO
vendor: LENOVO
在屏幕锁定、睡眠或挂起之前:
$ cat /sys/class/backlight/nv_backlight/actual_brightness
100
屏幕锁定、睡眠或挂起后:
$ cat /sys/class/backlight/nv_backlight/actual_brightness
33
我通过以下任一方式进入锁定模式:
- 通过不活动
- 从命令行:
xdg-screensaver lock
- 从下拉菜单中单击:
Lock
我通过以下任一方式进入睡眠/挂起模式:
- 从命令行:
systemctl suspend
- 从下拉菜单中单击:
Power Off/Log Out
>Suspend
请注意,从锁定/睡眠/挂起恢复后, 的内容/sys/class/backlight/nv_backlight/actual_brightness
是33
,而不是100
。
要再次达到全亮度,我只需输入Fn+F6一次。我觉得这有点奇怪,因为通常情况下,如果亮度那么低,则需要按几次按键。例如,要从30
到100
,通常需要按七次按键。
此外,您还会注意到Settings/Power
窗口中的亮度级别表明在锁定/睡眠/挂起之前和之后都处于 100%。
最后,您会注意到我禁用了设置Dim Screen When Inactive
。
在我尝试提出某种解决方案时,我安装了xbacklight
一个想法,即我可以在脚本中使用它来自动重置我的亮度。但这没有影响。
我还尝试了以下命令,但亮度级别没有改变,并且我无法写入文件。也许这是错误的做法。
$ sudo chmod 644 /sys/class/backlight/nv_backlight/actual_brightness
$ sudo tee /sys/class/backlight/nv_backlight/actual_brightness <<< 100
100
tee: /sys/class/backlight/nv_backlight/actual_brightness: Input/output error
$ sudo su
# echo 100 > /sys/class/backlight/nv_backlight/actual_brightness
bash: echo: write error: Input/output error
为什么会出现这种症状?如何解决?理想情况下,我不想合并在登录时运行的脚本。这似乎是治标不治本。
更新
我尝试了以下两个建议的解决方案,但都不起作用。
建议 1 - Systemd 服务
创建文件:
$ cat /etc/systemd/system/nvidia-backlight-sleep [Unit] Description=Fix Nvidia backlight after suspend Before=sleep.target StopWhenUnneeded=yes [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/bash -c "cat /sys/class/backlight/nv_backlight/actual_brightness > /run/previous_nv_backlight_brightness" ExecStop=/bin/bash -c "sleep 1; cat /run/previous_nv_backlight_brightness > /sys/class/backlight/nv_backlight/brightness" [Install] WantedBy=sleep.target
重新加载 systemd 守护进程:
sudo systemctl daemon-reload
启用服务:
sudo systemctl enable nvidia-backlight-sleep
建议 2 - 创建脚本/lib/systemd/system-sleep
创建文件:
$ cat /lib/systemd/system-sleep/nvidia-backlight-sleep #!/bin/bash case $1 in post) sleep 1 echo 50 > /sys/class/backlight/nv_backlight/brightness ;; esac
使可执行:
sudo chmod 755 /lib/systemd/system-sleep/nvidia-backlight-sleep
我能够通过从开源
nouveau
驱动程序切换到专有的nvidia-driver-535
. 可以从命令行或通过 GUI 安装。我选择通过GUI安装它。重启后,可以看到Nvidia驱动正在使用:
此外,在安装驱动程序的同时,
nvidia-settings
还会安装一个名为的实用程序。运行它sudo nvidia-settings
并显示以下窗口:与 Nvidia 驱动程序一起安装的另一个实用程序应用程序是系统管理界面,
nvidia-sma
:最后,我可以锁定或暂停我的笔记本电脑,并且保留屏幕背光亮度设置。而之前的值保存在 中
/sys/class/backlight/nv_backlight/actual_brightness
,新驱动程序将值保存在 中/sys/class/backlight/nvidia_0/actual_brightness
:总之,我认为驱动程序存在
nouveau
错误保存和调用该actual_brightness
值的错误。由于某种原因,它总是从锁定或睡眠/挂起状态恢复,值为33
。看起来你的 Nvidia 驱动程序没有记住背光值,尽管你的 GNOME 会记住。让我们用 sleep hook 来解决这个问题:
将以下内容粘贴到
/etc/systemd/system/nvidia-backlight-sleep-askubuntu-1505827-1004020.service
跑步
sudo systemctl daemon-reload
跑步
sudo systemctl enable nvidia-backlight-sleep-askubuntu-1505827-1004020.service
actual_brightness
不是可写的,所以我们需要使用该brightness
文件。sleep 1
如果它不起作用或者您希望它更快地恢复,您还可以进行调整。负责在关闭/启动时保存,而 GPU 驱动程序本身负责挂起/恢复。/lib/systemd/system/[email protected]
替代解决方案
如果这不起作用,我们可以硬编码更多东西:
禁用并删除其他解决方案
将以下内容粘贴到
/lib/systemd/system-sleep/nvidia-backlight-sleep-askubuntu-1505827-1004020
sudo chmod 755 /lib/systemd/system-sleep/nvidia-backlight-sleep-askubuntu-1505827-1004020