
该实用程序可用于USB设备连接/断开事件,并通过DDC/CI监视器输入。这将一个简单的USB开关变成了成熟的KVM解决方案:按USB开关上的一个按钮,所有显示器都连接到其他输入。
它应该安装在所有可以连接到这些监视器的计算机上,因为该应用程序仅将监视器“一种方式”切换,并且依赖于在其他计算机上运行的自身来按需要将其“反另一个方式”切换。
该应用程序应在MACOS,Windows和Linux上运行。
display_switch可以与Homebrew一起安装: brew install haimgel/tools/display_switch在所有平台上的配置都非常相似:
On MacOS: the configuration file is expected in ~/Library/Preferences/display-switch.ini On Windows: the configuration file is expected in %APPDATA%display-switchdisplay-switch.ini On Linux: the configuration file is expected in $XDG_CONFIG_HOME/display-switch/display-switch.ini or ~/.config/display-switch/display-switch.ini
配置文件设置:
usb_device = " 1050:0407 "
on_usb_connect = " Hdmi1 "
on_usb_disconnect = " Hdmi2 " usb_device是要观看的USB设备(供应商ID /设备ID),而on_usb_connect是连接此设备时要切换到的监视器输入。支持的值是Hdmi1 , Hdmi2 , DisplayPort1 , DisplayPort2 , Dvi1 , Dvi2 , Vga1 。如果您的显示器具有USB-C端口,通常将其报告为DisplayPort2 。输入也可以指定为“原始”十进制或十六进制值: on_usb_connect = 0x10
可选的on_usb_disconnect设置允许在断开USB设备时向另一个方向切换。请注意,首选的方法是将此应用程序安装在两台计算机上。切换“ Away”是有问题的:如果另一台计算机使监视器入睡,它们将立即切换回原始输入。
display-switch支持人均配置:添加一个或多个特定于Monitor的配置部分以设置特定于监视的输入。例如:
on_usb_connect = " DisplayPort2 "
on_usb_disconnect = " Hdmi1 "
[monitor1]
monitor_id = " len "
on_usb_connect = " DisplayPort1 "
[monitor2]
monitor_id = " dell "
on_usb_connect = " hdmi2 " monitor_id指定了一个不敏感的子字符串,以与监视器ID匹配。例如,“ Len”将与LEN P27u-10 S/N 1144206897监视器ID匹配。如果一个以上的部分具有匹配项,则将使用第一个。 on_usb_connect和on_usb_disconnect (如果定义)优先于全局默认值。
Windows的提示:可以在注册表中重命名为HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnumDISPLAY{MODEL_ID}{CONNECTION_ID} 。编辑DeviceDesc值并在最后一个半隆之后更改名称。如果它们都是“通用PNP监视器”,这特别有用。
display-switch支持USB设备连接或断开连接时运行外部命令。该配置可以是全局的(每次连接或断开连接的USB设备时运行)或人均(仅在切换给定显示器时运行):
usb_device = " 1050:0407 "
on_usb_connect = " Hdmi1 "
on_usb_disconnect = " DisplayPort2 "
on_usb_connect_execute = " echo connected "
on_usb_disconnect_execute = " echo disconnected "
[monitor1]
monitor_id = " foobar "
on_usb_connect_execute = " echo usb connected, monitor 'foobar' being switched "
on_usb_disconnect_execute = " 'c:\program files\my app.exe' --parameter "笔记:
display-switch的同一用户。要在Windows上找到USB设备ID的ID:
HIDVID_046D&PID_C52B&MI_00 (确切值会有所不同)的值 - 例如,USB设备ID是供应商ID和产品ID的组合 - 例如,在这种情况下,它将为046D:C52B 要在MACOS上找到USB设备ID的ID,请打开一个终端并运行以下内容:
brew install lsusb
$ lsusb > a
< switch the usb dock here >
$ lsusb > b
$ opendiff a b在命令输出中,突出显示的行显示了哪些USB ID最相关。
有关USB设备的完整列表:
system_profiler SPUSBDataType
重要的是:您的display-switch.ini的格式是vendorid:productid。 VendorId在system_profiler输出中排除在第二
需要其他软件包,通过以下安装: sudo apt install libxi-dev xorg-dev
要在Linux上找到USB设备的ID,请首先安装lsusb ,Linux发行版应具有包装。 (在Debian,Ubuntu和Redhat上,包装名称为usbutils 。)然后,在终端中运行以下内容:
$ lsusb > a
<switch the usb dock here>
$ lsusb > b
$ diff -u a b
差异输出将显示哪些USB ID最相关。
/Users/USERNAME/Library/Logs/display-switch/display-switch.log%LOCALAPPDATA%display-switchdisplay-switch.log$XDG_DATA_HOME/display-switch/display-switch.log或~/.local/share/display-switch/display-switch.log 安装生锈,然后进行cargo build --release
安装Xcode,安装Rust,然后进行cargo build --release
安装生锈,然后进行cargo build --release
从targetrelease (在上一个步骤中构建的位置)复制display_switch.exe到%APPDATA%MicrosoftWindowsStart MenuProgramsStartup 。
# Get your INI file in order! (see above)
cp target/release/display_switch /usr/local/bin/
cp dev.haim.display-switch.daemon.plist ~ /Library/LaunchAgents/
launchctl load ~ /Library/LaunchAgents/dev.haim.display-switch.daemon.plist复制构建可执行文件:
cp target/release/display_switch /usr/local/bin/在i2c组中,启用对用户的I2C设备的读取/写入访问。作为root运行:
groupadd i2c
echo ' KERNEL=="i2c-[0-9]*", GROUP="i2c" ' >> /etc/udev/rules.d/10-local_i2c_group.rules
udevadm control --reload-rules && udevadm trigger然后将您的用户添加到I2C组:
sudo usermod -aG i2c $(whoami)
在您的用户目录中创建一个SystemD单元文件( /home/$USER/.config/systemd/user/display-switch.service )
[Unit]
Description=Display switch via USB switch
[Service]
ExecStart=/usr/local/bin/display_switch
Type=simple
StandardOutput=journal
Restart=always
[Install]
WantedBy=default.target
在/home/$USER/.config/display-switch/display-switch.ini上创建配置文件。然后启用服务
systemctl --user daemon-reload
systemctl --user enable display-switch.service
systemctl --user start display-switch.service