用軟體讓螢幕在兩個輸入源間互換
在 AI 盛行時代,有時候兩台電腦一起開發還真的比較有效率。
但想切換不同 input 的時候,就得按螢幕背面那顆搖桿才能切換,非常的不方便
此文分享我如何用 keyboard 進行切換。
(本文使用 XV322QK 進行實驗)
DDC/CI 是什麼
一個螢幕的標準功能,讓電腦「透過影像線(HDMI / DP / USB-C)反過來去命令螢幕」。
平常都是電腦把畫面送給螢幕,但 DDC/CI 讓你可以從電腦端下指令,去改螢幕的亮度、對比、甚至切換輸入源。
所以螢幕如果有支援,那剩下的就是如何透過程式去送訊號到螢幕。
(意思是這篇文章能成功的前提是你的螢幕支援此功能哦 !)
先找出「輸入源」的數字
DDC/CI 裡每個功能都有一個代碼,叫 VCP code。切輸入源的是 0x60(Input Select)。
但每個輸入對應的「數字」各家螢幕不一樣,可以用以下工具去尋找。
Windows 此次我使用 ControlMyMonitor(免安裝),mac 應該也有
打開後,在 60 Input Select 那一行,我們可以看到 value,他顯是的是當前的 input source
而我經過實驗,得到我的螢幕是:
- Windows(DisplayPort)→ 值是 15
- 手動切到 Mac(USB-C)→ 值變成 16
而 ControlMyMonitor 其實就內帶改 value 的指令,如果我們開 PS Shell 來實驗
1 | # 讀目前輸入源 |
若真的有跳轉,那代表這條路通了
到這邊其實你已經可以用任何軟體來取代
例如寫兩個捷徑 (滑鼠點擊捷徑),或者整合到各種 API 來代替呼叫。(例如透過 python)
而我手邊剛好有一顆外接小鍵盤 (DOIO 16 keys),若能設定上去的話我就終於能從螢幕按鍵解脫ㄌ
想法:讓巨集鍵送 F21 / F22
keyboard 有一些按鍵是幽靈鍵,舉例來說 F21 根本不存在於一般實體鍵盤
但這種外接三方鍵盤可以設定這些幽靈鍵上去
所以想法上
(若我們稱 三方鍵盤上的按鍵叫做 巨集鍵)
1 | 按巨集鍵 → 送出 F21 → Windows 收到 → 觸發 ControlMyMonitor → 切螢幕 |
並且用兩個幽靈鍵對兩個輸入源進行 mapping
F21→ DP = 切 Windows(15)F22→ TypeC = 切 Mac(16)
並且根據後面的實測,不管螢幕現在顯示哪一台,螢幕都收的到切換訊號
如果有些螢幕不支援在「非當前輸入」的狀態下收 DDC,那就 ... 得在另一台輸入源也實作類似概念
(Optional) 踩坑:VIA 新舊版
這個步驟是我想要設定 F21、F22 到小鍵盤。不是要用小鍵盤的可以跳過
我的三方鍵盤要改巨集鍵就得用 VIA
這台官方給的方法是「開 VIA,拉一個 json 進去」,並不支援 3.0 的網頁版 usevia.app
一開始以為是韌體太舊,即使把 json 拉進 Design 分頁,也只會跳
1 | Error: '0xFEED' is not a valid vendorId. |
拉 AI 來處理
解說是說 VID_FEED & PID_6060——0xFEED 是 QMK 的預設 / 範例 vendorId
官方明明叫大家量產要改掉,但這顆 DOIO 就這樣出貨了
然後比對了兩個版本 VIA:
| 我本機留著的舊 VIA | 網頁 usevia.app | |
|---|---|---|
| 版本 | 1.3.1(2020 年的) | 最新版 |
對 0xFEED 的態度 |
不檢查,照吃 | 直接擋掉 |
所以網頁不能用的原因不是韌體,是新版 VIA 加了 vendorId 驗證,把 0xFEED 當非法值
改 json 也沒用,因為定義檔的 VID 一定要跟硬體回報的一致,改了就對不上鍵盤了
結論:**乖乖用舊版 VIA 1.3.1 **
想讓網頁新版能用的話,唯一的路是重刷一份「把 vendorId 改成合法值 + 帶 V3 定義」的韌體。
雖然 AI 很屌但我還是不想冒風險,浪費時間 ...
把鏈子接起來:AutoHotkey
小鍵盤可以送 F21 / F22 了,但還缺一個「偵測到 F21 被按下就跑指令」的程式。
單獨一顆 F21 沒辦法綁 Windows 捷徑熱鍵(捷徑熱鍵一定要 Ctrl+Alt 開頭),於是我們請出 AutoHotkey v2
腳本:
1 |
|
走這條之後 Twinkle Tray(另一個 setValue 程式)就可以不用了,只需要 ControlMyMonitor 裝好就好
讓它開機自動啟動
AutoHotkey 腳本一重開機就沒了。
想讓它開機自動啟動,做法是在啟動資料夾放一個捷徑:
Win + R打shell:startup開啟動資料夾- 放一個指向
AutoHotkey64.exe "腳本路徑.ahk"的捷徑
如果有描述看不懂的可以丟 AI 問一下 XD
(Optional) 關機也讓螢幕可以 USB 供電 (TypeC 同理)
設定完的隔天起來,發現我的 Mac 一直有 "連接上電源了!" 的提示音
才發現我這螢幕如果關閉,就插著充電的裝置也會被斷電
(Mac 有走 USB-C 連接,希望它待機也能充。這條線直接承擔充電 + 螢幕訊號輸入)
後來查到 XV322QK 的 OSD 裡本來就有一個選項叫 「Power-off USB charge」(關機 USB 充電),預設是關的
打開它就會在螢幕關機/待機時繼續供電。用實體搖桿進 OSD → System 設定裡打開。
註: Acer 說這選項跟「USB-C 輸入 + 睡眠喚醒」會互相影響,我看不懂。
先用用看,有問題再上來補充
小結
整套弄完,我的體驗變成:
按小鍵盤上一顆鍵,螢幕就在 Mac 和 Windows 之間跳,再也不用慢慢的調整螢幕背面那顆搖桿了
其實這個功能,買個 KVM 也能處理,但 KVM 便宜到貴的感覺各有各的坑
如果我把鍵盤滑鼠的線也都拉到螢幕 USB 孔,搭配 USB A 線就能完全複刻 KVM。
但因為線被我放在原廠箱子,還得挖出來 ... 先將就將就 XD
