0%

使用DDC协议控制显示器

我一直习惯用笔记本外接dock的用法,特别是最近几代的笔记本(不管是pc还是mac)配备了thunderbolt3接口以后。tb3接口的高带宽,实现了单一接口外接多个高分辨率显示器,使用体验上感觉还是非常好的。像是我带笔记本在公司里用。只要在工位上放置一个tb3的扩展坞,使用的时候只要连接一根tb3数据线,就能满足电脑充电、外接显示器等功能。外设的连接,像鼠标和键盘当然也是可以的。不过因为这样一来桌面的线材会非常多,所以键鼠一类低速设备我还是倾向于使用无线的。

不过这种使用方式在我的实际使用中存在一个不大不小的痒点。就是在笔记本连接了扩展坞以后,显示器并不能自动的从台式机切换到笔记本上。而且自动切换也不现实,因为设备当然不知道我什么时候想用笔记本,什么时候想用台式机。在只有单个屏幕的时候,这件事还不算很麻烦,我只要通过显示的OSD菜单切换输入源就可以了。但是当我连接了多个显示器以后,这个问题就愈加麻烦。直到某次在论坛偶然看到有人提起DDC协议,我才知道这个问题是可以解决的。

简而言之,显示器的数字接口(如DisplayPort和HDMI),是可以双向通信的,因此从主机向显示器发送命令也就是可行的。DDC协议也就因此应运而生。像笔记本上的功能键控制屏幕亮度等功能,其实本质上也是通过这个协议完成。知道了协议以后我就去找了找是否有现成的软件。还算顺利的找到了。

Windows下我使用的是一款别人推荐的免费软件ClickMonitorDDC,有图形界面,也有命令行接口。虽然CLI命令和常用的UNIX系命令不太像,不过使用上还算比较简单。以我用的LG显示器为例,要将输入源切换成HDMI,可以用命令ClickMonitorDDC_7_0.exe s LGUltraHD HDMI1。显示器的命令可以事先通过图形界面的控制面板拿到。最后我选择的用法是将切换命令存到我的AHK脚步里,实现一键切换。

Mac下则是搜索到了github上的一个开源项目,ddcctl。需要自行下载源码编译安装。编译安装好了以后,就可以通过如ddcctl -d 1 -i 15的命令,将指定显示器切换成指定的输入源。对比windows平台的软件,有一个小的不足是显示器是通过编号识别的。但是我实测通过tb3连接外接显示器时,每个显示器的编号并不固定,想要准确切换还需要自己写脚步识别每个编号的显示器具体是什么。当然如果每个显示器的连接方式都一样,那就没有这个烦恼了。Mac上的快捷工具我习惯用Alfred,因此就把相关的命令写成Alfred workflow来用就可以了。

一些小坑

  1. Dell的显示器(以我用的U2312为例)只能接收当前输入源的主机输入的命令。举例来说,我的台式机通过HDMI连接显示器,笔记本通过DP连接。当显示器输入源为HDMI时,只有台式机发送的DDC命令才会被执行。反之,当输入源为DP时,只有笔记本发送的命令会被执行。
  2. 几年前买的EIZO显示器,不支持DDC命令,那自然是没有办法控制了,比较遗憾。我觉得以后我会把这一条放在购买的要求里。如果不支持DDC,可能就不会考虑购买了。
  3. Mac我有两个dock,在家里用的是thinkpad的tb3 dock,公司里是belkin的tb3 dock。其中通过thinkpad的dock连接显示,ddcctl会提示发送命令失败,而belkin的则没有问题。本身显示器端的问题我也已经排除了,是支持ddc的。看来应该是dock本身对ddc支持的问题。本来买thinkpad的dock是出于兼顾window和mac的考虑。如此看来,以后还是要针对专项的笔记本选购最适用的dock才行。如果下一台笔记本还是用mac的话,就要考虑把家里的dock换掉了。