Sau*_*rma 17 display multiple-monitors hdmi
我有两台 PC 连接到戴尔 U3415W 显示器,一台带有带有 HDMI 输入的 ubuntu 14.04 LTS 操作系统,另一台带有带有 DP 输入的 Windows 10。我想要做的是在不使用屏幕菜单按钮 (OSD) 的情况下在这两个输入源之间切换。对于 Windows,有戴尔显示管理器,它可以从命令行从 DP 切换到 HDMI 输入。但是我找不到任何方法或监视工具来使用命令行在 ubuntu 上从 HDMI 切换到 DP 输入。
我曾尝试在 ubuntu 上使用 wine 安装戴尔显示管理器和显示器驱动程序(exe 文件),但没有成功。 有没有人尝试在 Ubuntu 上使用命令行更改监视器输入源?
Adr*_*eau 23
您正在寻找的命令是ddccontrol,可从常规 Ubuntu 存储库中获得。
警告! ddccontrol通过 i2c 总线发送数据,这本身就是一件危险的事情。大多数 i2c 设备非常低级且非常笨拙,一个错误放置的命令就足以使它们变砖或至少冻结计算机。话虽如此,DDC/CI 是一种标准化、成熟和古老的技术,因此风险并不太高。
因此,默认情况下,i2c 设备只能由 root 访问。您很可能需要在下面的所有命令前加上sudo. (我自愿不这样做以确保您阅读说明而不是盲目复制/粘贴它们。)
首先要做的是探测计算机中的各种 i2c 总线(我的有 11 条这样的总线……),搜索实际在显卡上并连接到屏幕的总线。
该ddccontrol -p命令执行此操作,并显示它找到的内容。我的计算机的示例输出:
Detected monitors :
- Device: dev:/dev/i2c-4
DDC/CI supported: Yes
Monitor Name: VESA standard monitor
Input type: Digital
(Automatically selected)
Reading EDID and initializing DDC/CI at bus dev:/dev/i2c-4...
I/O warning : failed to load external entity "/usr/share/ddccontrol-db/monitor/DELD070.xml"
Document not parsed successfully.
EDID readings:
Plug and Play ID: DELD070 [VESA standard monitor]
Input type: Digital
Run Code Online (Sandbox Code Playgroud)
请注意 I/O 警告:它仅表示您的监视器不为ddccontrol,因此它不知道它可能支持的所有非标准命令和值的描述。这不会阻止您发出命令,但这可能是一个反复试验的过程。
还要注意检测到的总线名称:dev:/dev/i2c-4在我的示例中。
该ddccontrol -d dev:/dev/i2c-4命令读取所有可能的控件(从 0x00 到 0xff)并显示它找到的值。当然,你应该使用探测时找到的总线。
ddccontrol还显示了它已知的控件和值的描述;要么是标准的,要么是 XML 文件中描述的。在我的示例中,我的监视器没有 XML 文件(请参阅上面的 I/O 警告)。
该ddccontrol -r 0x10 dev:/dev/i2c-4查询和0x10控制的当前值。示例输出:
Reading 0x10...
Control 0x10: +/21/100 C [Brightness]
Run Code Online (Sandbox Code Playgroud)
当前值是中间的数字,在我的例子中是 21。之后的值应该是最大值,但这似乎只适用于范围值(例如亮度和对比度),而不适用于列表项。
该ddccontrol -r 0x10 -w 25 dev:/dev/i2c-4设置为0x10控件的值。示例输出:
Writing 0x10, 0x19(25)...
Control 0x10: +/25/100 C [Brightness]
Run Code Online (Sandbox Code Playgroud)
请注意,您可以设置十六进制或十进制格式的值。在我的例子中,我使用了十进制。
我找到了用于切换显示器输入的命令和值。它运行良好,您当然需要尝试找到适合您的显示器的值。我的是戴尔 UltraSharp U2515H。
控制 0x60 [输入源选择]
这些值的顺序与监视器中的输入源菜单相同。
比如切换到DP: ddccontrol -r 0x60 -w 15 dev:/dev/i2c-4
小智 17
ddccontrol 工作正常,但十多年来(2006 年)它一直不受支持。这意味着每次使用它时,您都会收到一个大红色闪烁警告,表明您的监视器不在数据库中。
有一个较新的实用程序 ddcutil,它可以更好地与较新的显示器配合使用,因为它会询问显示器本身的 VCP 功能代码。它也适用于非 PCI 计算机,例如 Raspberry-Pi,但有一些注意事项。
这是一个比较: https: //www.ddcutil.com/ddccontrol/
例如,使用 ddcutil,我现在创建了三个 shell 别名,以使用以下命令切换我的 DELL 显示器的输入:
ddcutil -b 6 setvcp 0x60 0x1b:USB
ddcutil -b 6 setvcp 0x60 0x11: HDMI
ddcutil -b 6 setvcp 0x60 0x0f:显示端口
除了 Adrien Beau 的回答。
标准更改输入源命令是 0x60。所以你想使用这样的命令:
ddccontrol -r 0x60 -w $some_value dev:/dev/i2c-X
Run Code Online (Sandbox Code Playgroud)
但是你怎么知道哪个值负责哪个输入源呢?我不知道供应商是否提供此类信息,但我找到了一种无需询问供应商即可知道的方法。
只需读取 0x60 命令的当前值(使用sudo ddccontrol -r 0x60 dev:/dev/i2c-X)。它将返回如下内容:
显示器在 ddccontrol 数据库中的情况
EDID readings:
Plug and Play ID: DELA0D7 [DELL P2217H (VGA)]
Input type: Analog
Reading 0x60...
Control 0x60: +/257/4626 C [Input Source Select]
Run Code Online (Sandbox Code Playgroud)
监视器不在 ddccontrol 数据库中的情况
EDID readings:
Plug and Play ID: DELA0D9 [VESA standard monitor]
Input type: Digital
=============================== WARNING ===============================
There is no support for your monitor in the database, but ddccontrol is
using a basic generic profile. Many controls will not be supported, and
some controls may not work as expected.
Please update ddccontrol-db, or, if you are already using the latest
version, please send the output of the following command to
ddccontrol-users@lists.sourceforge.net:
LANG= LC_ALL= ddccontrol -p -c -d
Thank you.
=============================== WARNING ===============================
Reading 0x60...
Control 0x60: +/4369/4626 C [Input Source Select]
Run Code Online (Sandbox Code Playgroud)
假设您的监视器不在 ddccontrol 数据库中。请注意这个4369值。这是一个值,您将使用该值通过当前与监视器通话的电缆将监视器切换回当前状态。请注意,当您使用另一条传输电缆时,此值会有所不同(我的意思是您用来与显示器通话的端口,例如通过 vga 和通过 hdmi,即使对于相同的输入源,值也会不同)。
现在,使用监视器的 osd 菜单禁用自动选择输入源,因为我们现在不需要它。现在使用显示器的 osd 菜单切换输入源,然后读取当前值。在此示例中,我将显示器切换为使用 vga 源(源来自另一台计算机),同时仍使用第一台计算机通过 hdmi 与显示器通话,返回值为 4353。对您计划使用的所有输入执行相同操作交换。
好的,现在您知道了不同源状态下监视器的值。现在您可以使用以下方法切换监视器的输入源:
sudo ddccontrol -r 0x60 -w 4353 dev:/dev/i2c-X # switch to vga input using hdmi cable on Dell P2217H
sudo ddccontrol -r 0x60 -w 4369 dev:/dev/i2c-X # switch to hdmi input using hdmi cable on Dell P2217H
Run Code Online (Sandbox Code Playgroud)
值以十进制表示,但您可以使用十六进制值,如下所示:
sudo ddccontrol -r 0x60 -w 0x1101 dev:/dev/i2c-X # 0x1101 is 4353
sudo ddccontrol -r 0x60 -w 0x1111 dev:/dev/i2c-X # 0x1111 is 4369
Run Code Online (Sandbox Code Playgroud)
现在您希望您的监视器位于 ddccontrol-db 中。您需要探索监视器所有功能的值以及哪些值适用于哪个状态。然后您应该创建描述所有这些值的 xml 文件。注意,这里会有几个xml文件,因为不同的端口使用不同的监视器即插即用id。例如,对于我的 DELL P2217H 显示器,我将创建两个文件:DELA0D7.xml(通过 vga 连接时使用此 ID)和 DELA0D9.xml(通过 hdmi 连接时使用此 ID)。戴尔 P2217H 有一个 vga、一个 hdmi 和一个显示端口。因为我没有displayport设备,所以我无法探索创建DELA0D8.xml(通过displayport连接时使用这个id)。
可以在 Monitor Database Structure 页面 (file:///usr/share/doc/ddccontrol/html/apes02.html) 中找到 xml 参数的一些描述。
功能(大写)和即插即用 ID 可以使用
sudo ddccontrol -c dev:/dev/i2c-X.
准备好后,请贡献给https://github.com/ddccontrol/ddccontrol-db存储库。
假设您已将多台相同型号的显示器连接到一台计算机。然后你需要以某种方式区分显示器。为此,我创建了一个脚本,它通过监视器序列号确定 i2c 总线编号。我使用sudo get-edid -b $X 2>/dev/null | grep $TARGET_SERIAL
查看我的存储库了解更多详细信息:https : //github.com/Ashark/Ashark-bin/blob/master/i2c-bus-by-monitor-serial
现在,请参阅此脚本:https : //github.com/Ashark/Ashark-bin/blob/master/switch-monitor-source 您可以按如下方式使用它:
switch-monitor-source -s 0G2TG7360DXB -u # get and cache i2c-id number for monitor with specified s/n
switch-monitor-source -s 0G2TG7360DXB -v # switch that monitor to vga input
switch-monitor-source -s 0G2TG7360DXB -h # switch that monitor to hdmi input
Run Code Online (Sandbox Code Playgroud)
现在您可以将最后两个命令绑定到键盘快捷键并使用它们进行快速切换。惊人的!
| 归档时间: |
|
| 查看次数: |
20005 次 |
| 最近记录: |