通过 DDC 调节背光?

And*_*eas 5 scripting brightness display hdmi backlight

我正在寻找一种使用 DDC 调整外部显示器背光的简单方法。喜欢的东西good-ddc-tool --monitor 0 --backlight 100,只是没有工作时,一台显示器连接(通常情况下)复杂的事情。

我已经尝试过这个问题的答案但没有成功:

第一个答案(ddccontrol)

$ sudo ddccontrol -p

[...]

Probing for available monitors........
Detected monitors :
No monitor supporting DDC/CI available.
If your graphics card need it, please check all the required kernel modules are loaded (i2c-dev, and your framebuffer driver).

$ sudo modprobe i2c-dev
$ sudo lsmod | grep i2c
i2c_nforce2            20480  0
Run Code Online (Sandbox Code Playgroud)

...失败?

第二个答案(ddcutil)

快速测试:

$ sudo ddcutil capabilities
Display not found
Run Code Online (Sandbox Code Playgroud)

...失败。

猜测:

$ sudo ddcutil detect
Invalid display
   I2C bus:             /dev/i2c-4
   EDID synopsis:
      Mfg id:           DEL
      Model:            DELL 2209WA
      Serial number:    [redacted]
      Manufacture year: 2009
      EDID version:     1.3
   DDC communication failed
Run Code Online (Sandbox Code Playgroud)

显示无效?嗯,这是正确的制造商、型号和制造年份——不确定如果“DDC 通信失败”它是如何显示此信息的。

我知道显示器和电缆完全能够在其他系统上的其他操作系统上调整背光,认为 Geforce GTX 550 缺乏基本的 DDC 支持感觉有些牵强。显然它没有,因为它成功读取了显示模型。

第三个答案(xrandr)

快速(猜测)测试:

$ xrandr --output HDMI2 --brightness 0.6
warning: output HDMI2 not found; ignoring
xrandr: Need crtc to set gamma on.

$ xrandr --output HDMI1 --brightness 0.6
warning: output HDMI1 not found; ignoring
xrandr: Need crtc to set gamma on.
Run Code Online (Sandbox Code Playgroud)

...失败。相同的HDMI0和 只是HDMI

猜测:

$ xrandr --listproviders
Providers: number : 1
Provider 0: id: 0x279 cap: 0x1, Source Output crtcs: 2 outputs: 4 associated providers: 0 name:NVIDIA-0
Run Code Online (Sandbox Code Playgroud)

我真的不知道这告诉我什么,我找不到列出“输出”的方法,这让我猜测。


更新

我找到了针对 nvidia 卡的 ddcutil 的特殊说明,但是我找不到在两个建议中的第一个中提到的文件:

进行此更改的文件是位于分发目录 data/etc/X11/xorg.conf.d 中的 90-nvidia_i2c.conf

我正在使用Xubuntu。它暗示我看哪里?

链接中第二个建议的结果可以在下面的答案中找到。


更新 2

ddcutil在配备相同显示器的 MacBook/Intel HD Graphics/Ubuntu 上尝试过,它运行没有问题。

这向我表明 GeForce GTX 550 或其驱动程序很可能是问题所在。

And*_*eas 0

为了让它在某种程度上发挥作用,ddcutil我必须首先找到这个页面,然后解读这些建议。由于我无法真正理解第一个建议(找不到它所指的文件),我尝试了第二个建议:

我将options nvidia NVreg_RegistryDwords=RMUseSwI2c=0x01;RMI2cSpeed=100其自己的 .conf 放入 /etc/modprobe.d 中并重新启动。

结果是 ddcutil 在 50% 的时间内有效:

$ sudo ddcutil capabilities | grep Brightness
   Feature: 10 (Brightness)
:~$ sudo ddcutil getvcp 10
VCP code 0x10 (Brightness                    ): current value =     0, max value =   100
:~$ sudo ddcutil getvcp 10
VCP code 0x10 (Brightness                    ): current value =     9, max value =   100
:~$ sudo ddcutil setvcp 10 100
Setting value failed for feature 10. rc=EIO(-5): Input/output error
:~$ sudo ddcutil setvcp 10 10
:~$ sudo ddcutil setvcp 10 99
Verification failed for feature 10
:~$ sudo ddcutil setvcp 10 50
:~$ sudo ddcutil setvcp 10 75
:~$ sudo ddcutil setvcp 10 80
Setting value failed for feature 10. rc=EIO(-5): Input/output error
:~$ sudo ddcutil setvcp 10 90
Setting value failed for feature 10. rc=EIO(-5): Input/output error
:~$ sudo ddcutil setvcp 10 95
Setting value failed for feature 10. rc=EIO(-5): Input/output error
:~$ sudo ddcutil setvcp 10 99
Display not found
:~$ sudo ddcutil setvcp 10 10
Verification failed for feature 10
:~$ sudo ddcutil setvcp 10 100
Display not found
:~$ sudo ddcutil setvcp 10 100
:~$ sudo ddcutil setvcp 10 0
Display not found
:~$ sudo ddcutil setvcp 10 0
Run Code Online (Sandbox Code Playgroud)

实际亮度在大约一半的尝试中发生了变化。失败并不总是与终端中的错误输出同时发生。

我把它放在一个答案中,因为这对其他人来说可能是一个很好的解决方案,但我仍在寻找更可靠的东西。


更新:实际上这个答案导致重启后卡在640x480,所以我不得不扭转它。

问题原因未知。这可能是一个巧合。即使注释掉本答案中引入的文件内的单行文本,也会出现低分辨率问题。