[求助]笔记本无法调节背光

之前是能调“背光”(其实我是OLED屏,严格来讲没有“背光”这种东西)的,但不知是什么时候,大概是某次重装时用了zen内核并安装好了AMD+NVIDIA双显卡各自的驱动的时候,就无法调节背光了。我试图通过更改内核相关参数来实现允许亮度的调节。

当我加上了acpi_backlight=native参数后,则无法正常用文本编辑器编辑/sys/class/backlight/amdgpu_bl1/brightness/sys/class/backlight/nvidia0/brightness。但是能够调节Noctalia的亮度条,只是调了之后无效果。

当我改成了acpi_backlight=vendor后,无法调节,且Noctalia的亮度调节的设置里面显示“无亮度”,/sys/class/backlight/目录下无文件。

当我改成了acpi_backlight=video后,无法调节,Noctalia的亮度调节功能与使用native参数一样,能调但不会生效。/sys/class/backlight/下只有一个acpi_video0文件夹,有一个/sys/class/backlight/acpi_video0/brightness文件,但和前文所属的文件一样,无法正常写入。

当我改成acpi_backlight=none后,无法调节,Noctalia的亮度调节选项中显示为无亮度。/sys/class/backlight/下无文件。

如果不加参数,则无法正常用文本编辑器编辑/sys/class/backlight/amdgpu_bl1/brightness/sys/class/backlight/nvidia0/brightness。但是能够调节Noctalia的亮度条,只是调了之后无效果。

另外,需要注明的一点是,如果不加任何参数,则开机后亮度锁死在60,如果加了上述任一参数,则开机后亮度锁死在100。

想问下大家还有啥解决的办法不?
另外,这是我的fastfetch:

OS: Arch Linux x86_64
Host: RS
Kernel: Linux 6.18.9-zen1-2-zen
Uptime: 1 min
Packages: 1249 (pacman), 6 (flatpak)
Shell: zsh 5.9
Display (NE160QDM-NZC): 2560x1600 @ 2x in 16", 240 Hz [Built-in]
WM: niri 25.11 (Wayland)
Theme: Adwaita-Dark [Qt]
Icons: Papirus-Dark [Qt]
Font: Sarasa Gothic SC (12pt) [Qt]
Cursor: default (24px)
Terminal: kitty 0.45.0
Terminal Font: Sarasa-Mono-SC-Regular (11pt)
CPU: AMD Ryzen 9 7945HX (32) @ 5.46 GHz
GPU 1: NVIDIA GeForce RTX 5070 Ti Mobile [Discrete]
GPU 2: AMD Radeon 610M [Integrated]
Memory: 3.44 GiB / 14.83 GiB (23%)
Swap: Disabled
Disk (/): 237.80 GiB / 767.92 GiB (31%) - ext4
Battery (standard): 100% [AC Connected]

对于IPS屏幕,“背光”的概念容易成立

不修改内核相关参数acpi_backlightsudo su模式试下echo 5 > /sys/class/backlight/acpi_video0/brightness能不能调亮度(对应你显卡模式amd集显amdgpu_bl1, nvidia独显nvidia0)
如果能改看下用户在不在video组, 以及/sys/class/backlight/acpi_video0/brightness/sys/class/backlight/amdgpu_bl1/brightness的对应权限

在不添加acpi_backlight的时候,没有/sys/class/backlight/acpi_video0/目录。不过此时run0提权后,执行echo 5 > /sys/class/backlight/amdgpu_bl1/brightness可见效,但是Noctalia那里显示的亮度成0了,而且屏幕也变得很暗,但还是能看到显示内容的。在执行该命令前,/sys/class/backlight/amdgpu_bl1/brightness内的数值是37471,使用echo 37471 > /sys/class/backlight/amdgpu_bl1/brightness后亮度重新变成60%,使用echo 32390 > /sys/class/backlight/amdgpu_bl1/brightness后亮度变为50%。如果是echo 5 > /sys/class/backlight/nvidia_0/brightness则无效。目前video组内没有任何用户。即便是将我的登录用户加入到video组中,依旧无法通过Noctalia的亮度调节选项调节亮度,也无法使用brightnessctl命令调节亮度。
以下是使用了echo 37471 > /sys/class/backlight/amdgpu_bl1/brightness之后brightnessctl -l的返回结果:

Available devices:
Device 'nvidia_0' of class 'backlight':
	Current brightness: 60 (60%)
	Max brightness: 100

Device 'amdgpu_bl1' of class 'backlight':
	Current brightness: 37471 (60%)
	Max brightness: 62451

Device 'enp4s0-2::lan' of class 'leds':
	Current brightness: 0 (0%)
	Max brightness: 255

Device 'enp4s0-1::lan' of class 'leds':
	Current brightness: 0 (0%)
	Max brightness: 255

Device 'input3::numlock' of class 'leds':
	Current brightness: 1 (100%)
	Max brightness: 1

Device 'enp4s0-0::lan' of class 'leds':
	Current brightness: 0 (0%)
	Max brightness: 255

Device 'input3::capslock' of class 'leds':
	Current brightness: 0 (0%)
	Max brightness: 1

Device 'input3::scrolllock' of class 'leds':
	Current brightness: 0 (0%)
	Max brightness: 1

Device 'enp4s0-3::lan' of class 'leds':
	Current brightness: 0 (0%)
	Max brightness: 255

找到解决办法了,用brightnessctl -d amdgpu_bl1 set 光亮百分比就可以正常调节亮光了。但是这样的话,我不知道该怎么方便地调节游戏时N卡的亮光了……

video组成员要改亮度, 要写个udev rule才能改亮度. 手动写个/etc/udev/rules.d/backlight.rules把你的amd和nvidia都加进去, {amd-specify-name}
替换成你自己的
archwiki上有个Talk关于这个问题对背光权限的udev rule无法正常工作

ACTION=="add", SUBSYSTEM=="backlight" KERNEL=="{amd-specific-name}", RUN+="/bin/chmod g+w /sys/class/backlight/{amd-specific-name}/brightness"
ACTION=="add", SUBSYSTEM=="backlight" KERNEL=="{amd-specific-name}", RUN+="/bin/chgrp video /sys/class/backlight/{amd-specific-name}/brightness"
ACTION=="add", SUBSYSTEM=="backlight" KERNEL=="{nvidia-specific-name}", RUN+="/bin/chmod g+w /sys/class/backlight/{nvidia-specific-name}/brightness"
ACTION=="add", SUBSYSTEM=="backlight" KERNEL=="{nvidia-specific-name}", RUN+="/bin/chgrp video /sys/class/backlight/{nvidia-specific-name}/brightness"

不过我看Backlight的archwiki有个note关于OLED屏幕Since OLED screens have no backlight, brightness cannot be controlled by changing backlight power on laptops equipped with an OLED screen. In this case, perceived screen brightness can be adjusted with a PWM control (not implemented in the Linux kernel) or via software color correction.好像现在内核没实现PWM control, 我没用过OLED屏幕的电脑, 你可以试下wiki上的software color correction能不能改亮度

ACTION=="add", SUBSYSTEM=="backlight" KERNEL=="amdgpu_bl1", RUN+="/bin/chmod g+w /sys/class/backlight/amdgpu_bl1/brightness"
ACTION=="add", SUBSYSTEM=="backlight" KERNEL=="amdgpu_bl1", RUN+="/bin/chgrp video /sys/class/backlight/amdgpu_bl1/brightness"
ACTION=="add", SUBSYSTEM=="backlight" KERNEL=="nvidia_0", RUN+="/bin/chmod g+w /sys/class/backlight/nvidia_0/brightness"
ACTION=="add", SUBSYSTEM=="backlight" KERNEL=="nvidia_0", RUN+="/bin/chgrp video /sys/class/backlight/nvidia_0/brightness"

在对/etc/udev/rules.d/backlight.rules写入了如上内容后,依然无法通过brightnessctl set命令来调整亮度,依然只能通过brightnessctl -d amdgpu_bl1 set来调整亮度。

顺带提一嘴,至少就我这台使用OLED屏幕的笔记本而言,是可以直接使用背光实用程序来调节亮度的。不需要去主动折腾色彩校正。


下述版本的Noctalia支持手动设定调节选定显卡的亮度了
Noctalia Shell: v4.6.5
Noctalia QS: v0.0.6 (d483f737)