
該實用程序可用於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