我正在寻找一种使用 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
...失败?
第二个答案(ddcutil)
快速测试:
$ sudo ddcutil capabilities
Display not found
...失败。
猜测:
$ 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
显示无效?好吧,这是正确的制造商、型号和制造年份 - 不确定如果“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.
...失败。对于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
我真的不知道这告诉了我什么,而且我找不到列出“输出”的方法,这让我只能猜测。
更新
我发现适用于 nvidia 卡的 ddcutil 的特殊说明,但我找不到两个建议中第一个建议中提到的文件:
用于进行此更改的文件是 90-nvidia_i2c.conf,位于分发目录 data/etc/X11/xorg.conf.d 中
我用的是Xubuntu。它建议我去哪里看?
链接中第二个建议的结果可以在下面的答案中找到。
更新2
我尝试ddcutil
在 MacBook/Intel HD Graphics/Ubuntu 上使用相同的显示器,它运行没有问题。
我认为这表明 GeForce GTX 550 或其驱动程序很可能是问题所在。
答案1
我是开发者ddutil。
看起来您的显示器具有边缘 I2C 实现。 Nvidia 选项强制驱动程序使用 I2C 规范中定义的最低总线速度,即 100 kbps。不幸的是,没有办法告诉司机使用更低的公交车速度。
使用该--ddc
选项查看 DDC 数据错误,使用该选项查看累积错误计数和必须重试操作的--stats
次数。ddcutil
有几个ddcutil
选项可能会有所帮助。如果您在输出中看到大量失败,--stats
显示超出了最大重试次数,您可以尝试使用该选项增加重试次数--maxtries
。其次,DDC/CI 协议要求应用程序在向监视器发送请求和读取回复之间等待一定的时间(通常为 50 毫秒)。这是为了让监视器有时间执行操作和/或组合回复。该--sleep-multiplier
选项会增加等待时间ddcutil
。例如,当规范要求等待 50 毫秒时,则等待 100 毫秒--sleep-multiplier 2
。ddcutil
(相反,我见过一些表现良好的显卡/显示器实现,它们的睡眠乘数值低至.1
,即,当规范要求 50 时,仅等待 5 毫秒。)
最后,对于查找文件的困难,我深表歉意90-nvidia_i2c.conf
。网站上该文件的文档尚未针对当前位置进行更新。
答案2
为了让它发挥作用,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
实际亮度在大约一半的尝试中发生了变化。失败并不总是与终端中的错误输出同时发生。
我把它放在一个答案中,因为这对其他人来说可能是一个很好的解决方案,但我仍在寻找更可靠的东西。
更新:实际上这个答案导致重启后卡在640x480,所以我不得不反转它。
问题原因未知。这可能是一个巧合。即使注释掉本答案中引入的文件内的单行文本,也会出现低分辨率问题。