解决LG显示器无法通过DDC/CL切换输入源

解决LG显示器无法通过DDC/CL切换输入源

orzlee
2025-03-01 / 0 评论 / 107 阅读 / 正在检测是否收录...

ultragear-27gp95rp.png

前言

LG虽然是大厂,但是显示器DDC/CL却无法设置输入源。声音亮度等设置却没有问题,这是我目前最想要的功能。我有两个系统,共用两个显示器,不想买二进二出KVM切换器。国内这些KVM也就是个能用的程度。高刷和EDID几乎没有,就算有也不是所有接口都支持。

所以我有个想法,让系统来通过显示器DDC/CI控制切换,我再买个USB二进二出切换器,共用键盘和鼠标。写个程序监听USB设备,插入就通过电脑执行DDC/CI切换显示器输入源。

这样比KVM二进二出切换器多了很多优点:

  • 少了连根视频线
  • 显示器和主机直连兼容性更好
  • USB切换器便宜
  • 支持高刷等显示器特性(EDID的话我目前切换没有乱桌面布局,我不确定)

我的两台显示器,一台是AOC,好多年了,DDC/CI没有任何问题。还有台LG 27GP95RP,这两年入的,DDC/CL能控制大部分功能,唯独输入源控制不了。国内LG DDC/CI相关讨论都很少,国外还是有讨论关于LG显示器DDC/CI的问题。

开搞

DDC/CI不支持,国外有大佬通过GPU来控制显示器切换。我不太懂,你可以看看这篇文章。虽然里面只列出少部分LG显示器型号,但是自己试试说不定也支持,27GP95RP上面就没有列出,但是确实可行。

先上输入源代码,其实很好区分,你先确定你的LG显示器有什么接口,例如两个HDMI和一个DP,HDMI就是0x90开始递增,DP接口就是0xD0递增,至于type-c就要自己找找了,应该是通过0xD0来递增,我这台显示器没有。

Input Source Value
MONITOR_AUTO 0x0
MONITOR_DP1 0xD0
MONITOR_DP2 0xD1
MONITOR_DP3 0xD2
MONITOR_USB_C 0xD2
MONITOR_HDMI1 0x90
MONITOR_HDMI2 0x91
  • 英伟达显卡可以通过NVapi-write-value-to-monitor项目来执行输入源切换。
    你只需要修改两个参数,第一个参数0来选择显示器的序号,第二个参数是显示器的输入源(这里是切换到HDMI1,你要修改成自己想切换的输入源,看上面代码)。后面的0xF4 0x50不能动。我的是AMD显卡,具体显示器序号和他功能可以去项目里看作者的说明。

    writeValueToDisplay.exe 0 0x90 0xF4 0x50
  • ADM显示可以通过amdddc-windows项目来执行输入源切换。可以执行文件在issue中找到,作者上传的txt文件,下载下来修改后缀exe即可。
    先通过detect命令来查看显示器位置:

    amdddc-windows.exe detect

    amdddc-windows-detect.png
    我这里适配器索引5,LG显示器是0,要切换的端口DP1 0xD0。你只用修改最后三个参数。下面通过命令来切换输入源到DP1接口:

    amdddc-windows.exe --i2c-source-addr 0x50 setvcp 5 0 0xD0
  • intel可以看看这个issue

  • MAC OS
    mac os可以使用BetterDisplay或者m1ddc来控制,同一个作者。m1ddc我在M4 pro上使用过了没用,不管是不是LG显示器都无法切换,没有做过多研究。
    BetterDisplay没有问题,但是发现了一个坑。如果使用扩展坞带的视频接口,那么大概率是残血DDC/CI,或者干脆不支持的。网上资料说是由于usb占用了两个引脚,导致功能残缺。我这边是发现不能切换,但可以调亮度和声音,这还是另一台支持DDC/CI切换输入源的显示上测试的。所以要转视频接口建议买质量好的type-C直接转HDMP或者DP,不要附带其他扩展接口。LG用HDMI直连所有功能都正常。
    BetterDisplayLG显示器输入源:DisplayPort 1: 208, DisplayPort 2: 209, HDMI 1: 144, HDMI 2: 145, USB-C / DP 3: 210。CLI文档可以看文档
    显示器设备名称 UUID等信息去APP中可以看到,命令行的话看文档找找。
    除了namelike,还有name uuid都可以指定显示器,ddcAlt就是输入源端口代码了。非LG显示器切换去掉两个参数Alt字母就好了--ddc=15 --vcp=inputSelect

    /Applications/BetterDisplay.app/Contents/MacOS/BetterDisplay set --namelike=ABC --ddcAlt=208 --vcp=inputSelectAlt

    如果安装了betterdisplaycli可以简化命令,但是BetterDisplay不仅要装,还要启动,否则不行:

    betterdisplaycli set --namelike=ABC --ddcAlt=0x91 --vcp=inputSelectAlt
  • Linux
    我就是ddcutil的issues中找到windows切换LG输入源的,没有Linux需求,没有尝试,命令行参数对着上面的改。
    -d就是显示器顺序号,x0090就是输入源端口代码,其他不动。

    ddcutil -d 1 setvcp xF4 x0090 --i2c-source-addr=x50 --noverify

顺便把DDL/CI代码也贴一下好了:

Input Source Value
VGA-1 1
VGA-2 2
DVI-1 3
DVI-2 4
Composite video 1 5
Composite video 2 6
S-Video-1 7
S-Video-2 8
Tuner-1 9
Tuner-2 10
Tuner-3 11
Component video (YPrPb/YCrCb) 1 12
Component video (YPrPb/YCrCb) 2 13
Component video (YPrPb/YCrCb) 3 14
DisplayPort-1 15
DisplayPort-2 16
HDMI-1 17
HDMI-2 18
USB-C 27

DDC/CL切换用winddcutil或者ControlMyMonitor都行。

winddcutil查看显示2的60 输入源可能值,ControlMyMonitor有时候不准。

.\winddcutil.exe capabilities 2

(prot(monitor)type(LCD)model(U2790PQU)cmds(01 02 03 07 0C E3 F3)vcp(02 04 05 08 0C 10 12 14(01 05 06 08 0B) 16 18 1A 52 60(0F 11 12 ) 86(01 02 05 0B 0C 0D 0E 0F 10 11 12 13 14) AC AE B2 B6 C6 C8 CA CC(01 02 03 04 05 06 07 09 0A 0B 0D 0E 12 14 16 1E) D6(01 04 05) DC(00 0B 0C 0D 0E 0F 10) DF ED FF)mswhql(1)asset_eep(40)mccs_ver(2.2))

60(0F 11 12 ) 代表十进制15 17 18,对应DP1、HDMI1、HDMI2

DDC/CI切换就要简单些,setvcp/SetValue后面分别是 显示器、输入源切换代码不变、显示器输入源端口,可以看上面DDL/CI代码来尝试切换。

.\ControlMyMonitor.exe /SetValue "\\.\DISPLAY2\Monitor0" 60 17
或
.\winddcutil.exe setvcp 1 0x60 17

结语

好了,差不多就这么多,看起来不复杂,但是找资料确实花了我好几个小时。

下面我就要开始写代码通过USB切换器来同时控制显示器切换了。目前已经在windows上成功,另一个系统还在路上。等都到齐了我再来多测测,到时候再分享出来!

2025-03-04
切换搞定了,效果不错,通过USB扩展坞代替KVM切换显示器输入源

0
取消
扫码打赏
支付金额随意哦!

评论 (0)

取消