前言
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
我这里适配器索引5,LG显示器是0,要切换的端口DP10xD0
。你只用修改最后三个参数。下面通过命令来切换输入源到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)