動(dòng)到遠(yuǎn)程查看的完整實(shí)測(cè))
一篇文章吃透 VirtualMonitor虛擬顯示器從裝驅(qū)動(dòng)到遠(yuǎn)程查看的完整實(shí)測(cè)【免費(fèi)下載鏈接】VirtualMonitor項(xiàng)目地址: https://gitcode.com/gh_mirrors/vi/VirtualMonitor先別急著下單新顯示器。VirtualMonitor 這個(gè)開(kāi)源項(xiàng)目做的事說(shuō)起來(lái)一句話(huà)就能講清它借用 VirtualBox 的驅(qū)動(dòng)框架在系統(tǒng)里造出一臺(tái)沒(méi)有實(shí)體、也不占桌面的顯示器再把這塊屏幕的畫(huà)面通過(guò) VNC 協(xié)議推送給任意設(shè)備上的查看器。換句話(huà)說(shuō)你用一臺(tái)沒(méi)接顯示器的電腦也能擁有一塊能被遠(yuǎn)程看到的虛擬屏。這篇文章會(huì)把它的真實(shí)能力、裝驅(qū)動(dòng)流程、啟動(dòng)參數(shù)和容易踩的坑從頭到尾過(guò)一遍。先說(shuō)清楚它不是什么以及它是什么在網(wǎng)上搜 VirtualMonitor 相關(guān)介紹時(shí)很容易被多屏擴(kuò)展替代物理顯示器這類(lèi)說(shuō)法帶偏。實(shí)測(cè)之后我得先給你糾三個(gè)最普遍的誤解這比急著上手更重要它不是窗口管理器。它的產(chǎn)物是一整塊虛擬顯卡輸出的畫(huà)面不是幫你把窗口鋪滿(mǎn)桌面的工具。它不是給本機(jī)增加第二個(gè)屏幕用的。它的設(shè)計(jì)重心是把這塊虛擬屏的畫(huà)面發(fā)出去給別人看觀(guān)看端通過(guò) VNC 連接。它不是開(kāi)箱即用的商業(yè)軟件。這是一個(gè)偏研究與演示性質(zhì)的項(xiàng)目需要你具備基本的編譯、命令行和驅(qū)動(dòng)安裝常識(shí)。那它到底是什么把話(huà)說(shuō)直白VirtualMonitor 一塊模擬出來(lái)的顯示設(shè)備 一臺(tái)內(nèi)置的 VNC 服務(wù)器。你運(yùn)行它它注冊(cè)一塊虛擬顯示器驅(qū)動(dòng)系統(tǒng)會(huì)認(rèn)為多了一臺(tái)顯示器與此同時(shí)它監(jiān)聽(tīng)網(wǎng)絡(luò)端口任何 VNC 客戶(hù)端連上來(lái)都能看到這塊虛擬屏上正在發(fā)生的變化。VirtualMonitor 沿用了 VirtualBox 的組件化架構(gòu)思路上層管理、底層驅(qū)動(dòng)各司其職。一條數(shù)據(jù)鏈路看懂它的工作方式與其背一堆術(shù)語(yǔ)不如跟著一幀畫(huà)面走一遍它的內(nèi)部流程。假設(shè)虛擬屏的分辨率是 1280x720屏幕上有一個(gè)窗口正在拖動(dòng)虛擬顯示驅(qū)動(dòng)發(fā)現(xiàn)這一小片區(qū)域變了把它框成一個(gè)矩形通知 VirtualMonitor 主程序。主程序只把這個(gè)矩形范圍內(nèi)的像素讀出來(lái)而不是整屏重傳。內(nèi)置的 VNC 服務(wù)器收到這批增量數(shù)據(jù)轉(zhuǎn)給所有連進(jìn)來(lái)的客戶(hù)端。你的 VNC 查看器只重繪這一塊畫(huà)面就活了。這套臟矩形增量更新的設(shè)計(jì)意味著空閑時(shí)它幾乎不產(chǎn)生網(wǎng)絡(luò)流量也幾乎不占 CPU——屏幕上沒(méi)變化就什么都不傳。這跟很多把整幀畫(huà)面反復(fù)編碼推流的方案相比省下的開(kāi)銷(xiāo)是實(shí)打?qū)嵉?。如果你關(guān)注性能這是 VirtualMonitor 最值得稱(chēng)道的一處細(xì)節(jié)。驅(qū)動(dòng)側(cè)它在 Windows 上走的是 XPDM 顯示驅(qū)動(dòng)設(shè)備名就叫 VirtualMonitor Graphics Adapter通過(guò)WinDrvInstaller安裝同時(shí)內(nèi)置了一個(gè)Dummy假驅(qū)動(dòng)專(zhuān)門(mén)給開(kāi)發(fā)者離線(xiàn)調(diào)試用不依賴(lài)任何真實(shí)硬件和系統(tǒng)權(quán)限。兩條腿走路一條通向真實(shí)場(chǎng)景一條通向代碼調(diào)試。從零到看到畫(huà)面的四步實(shí)測(cè)下面這段流程我在命令行里實(shí)際跑過(guò)照做基本能復(fù)現(xiàn)。核心就是一個(gè)可執(zhí)行文件配合命令行參數(shù)工作。第一步拿到可執(zhí)行文件或源碼項(xiàng)目基于 VirtualBox 代碼樹(shù)開(kāi)發(fā)源碼位于倉(cāng)庫(kù)內(nèi)的src/VirtualMonitor/。克隆命令如下git clone https://gitcode.com/gh_mirrors/vi/VirtualMonitor想編譯需要先配置好 VirtualBox 的 kBuild 構(gòu)建環(huán)境對(duì)不熟構(gòu)建鏈的普通用戶(hù)來(lái)說(shuō)門(mén)檻不低。如果你只是想驗(yàn)證虛擬顯示器 VNC這套機(jī)制直接在 Windows 上運(yùn)行現(xiàn)成構(gòu)建產(chǎn)物更快。第二步安裝虛擬顯示驅(qū)動(dòng)Windows用管理員權(quán)限運(yùn)行WinDrvInstaller把 VirtualMonitor Graphics Adapter 注冊(cè)到系統(tǒng)。這一步是讓操作系統(tǒng)認(rèn)這塊虛擬顯卡的關(guān)鍵跳過(guò)的話(huà)程序只能用-dummy假驅(qū)動(dòng)跑演示畫(huà)面看不到真實(shí)系統(tǒng)桌面。第三步啟動(dòng) VirtualMonitor最簡(jiǎn)單的啟動(dòng)方式是指定分辨率其余參數(shù)全部走默認(rèn)VirtualMonitor -x 1280 -y 720它會(huì)創(chuàng)建一個(gè) 1280x720、32 位真彩色的虛擬顯示器并在 5800 端口被占用時(shí)自動(dòng)換監(jiān)聽(tīng) VNC 連接。第四步用 VNC 客戶(hù)端連上去任意 VNC 查看器地址填運(yùn)行 VirtualMonitor 那臺(tái)機(jī)器的 IP端口 5800回車(chē)。等一兩秒虛擬屏的畫(huà)面就出現(xiàn)在你面前了。多個(gè)人同時(shí)連接也是允許的——它按客戶(hù)端數(shù)量分別維護(hù)會(huì)話(huà)很適合一塊屏、多人圍觀(guān)的演示場(chǎng)景。同一套虛擬化底座下的管理界面示例VirtualMonitor 與 VirtualBox 共享驅(qū)動(dòng)與顯示層的基礎(chǔ)能力。一張表看懂全部啟動(dòng)參數(shù)把-h參數(shù)打印的選項(xiàng)整理成表格照著查比看幫助文本直觀(guān)得多參數(shù)含義默認(rèn)值 / 說(shuō)明-x虛擬屏水平分辨率未指定時(shí)為 800-y虛擬屏垂直分辨率未指定時(shí)為 600-bpp每像素位數(shù)只有 32 位真彩色真正可用-p4/-a4IPv4 監(jiān)聽(tīng)端口 / 地址端口默認(rèn) 5800地址默認(rèn)全部接口-p6/-a6IPv6 監(jiān)聽(tīng)端口 / 地址同上Win 平臺(tái)對(duì) IPv6 有專(zhuān)門(mén)支持-dummy使用假驅(qū)動(dòng)開(kāi)發(fā)者選項(xiàng)不裝真實(shí)驅(qū)動(dòng)時(shí)用來(lái)跑演示-tf 文件名用文件當(dāng)作輸入像素僅配合 dummy 驅(qū)動(dòng)使用-v/-h版本信息 / 幫助—兩個(gè)容易踩的坑提前說(shuō)明一是分辨率參數(shù)不寫(xiě)滿(mǎn)-x和-y程序會(huì)退回 800x600別以為是故障二是位深想設(shè)成 16 或 24 位會(huì)直接被忽略當(dāng)前實(shí)現(xiàn)只支持 32 位真彩色省得你折騰半天發(fā)現(xiàn)沒(méi)效果。小貼士想在無(wú)顯示器的主機(jī)上做無(wú)頭演示配合 dummy 驅(qū)動(dòng)和-tf輸入文件可以在完全沒(méi)有虛擬顯卡驅(qū)動(dòng)的情況下把一份像素?cái)?shù)據(jù)源源不斷送進(jìn) VNC 查看器——這也是項(xiàng)目留給開(kāi)發(fā)者的調(diào)試后門(mén)第一次玩的人反而可以靠它先建立直觀(guān)印象。用它前后體驗(yàn)差在哪拿有一臺(tái)閑置電腦想遠(yuǎn)程看它的桌面這種場(chǎng)景做對(duì)照感受最直觀(guān)對(duì)比維度沒(méi)有它的時(shí)候用了 VirtualMonitor 之后硬件依賴(lài)那臺(tái)電腦必須接著顯示器和顯卡否則桌面渲染無(wú)從談起虛擬顯示器由驅(qū)動(dòng)模擬不占物理接口畫(huà)面?zhèn)鬏斂窟h(yuǎn)程桌面軟件整幀編碼網(wǎng)絡(luò)和 CPU 壓力隨分辨率上漲臟矩形增量傳輸靜止畫(huà)面幾乎零流量觀(guān)看向?qū)枰~外搭建或配置專(zhuān)用服務(wù)啟動(dòng)即自帶 VNC 服務(wù)客戶(hù)端即開(kāi)即用多人查看多數(shù)方案只支持單會(huì)話(huà)允許多個(gè) VNC 客戶(hù)端同時(shí)觀(guān)看需要說(shuō)明的是這并不代表它能取代物理顯示器或成熟的遠(yuǎn)程桌面產(chǎn)品。它的價(jià)值更偏向這幾類(lèi)場(chǎng)景驗(yàn)證虛擬化顯示驅(qū)動(dòng)的技術(shù)演示、需要一塊無(wú)實(shí)體屏幕但可遠(yuǎn)程共享的測(cè)試環(huán)境以及想研究 VirtualBox 顯示驅(qū)動(dòng)與 VNC 協(xié)議如何銜接的學(xué)習(xí)路徑。虛擬化桌面與宿主界面融為一體是這一整套虛擬顯示技術(shù)棧的直觀(guān)呈現(xiàn)。五個(gè)高頻疑問(wèn)一次答完Q它能給我多一塊本機(jī)可用的屏幕嗎A本機(jī)畫(huà)面會(huì)直接發(fā)到 VNC 客戶(hù)端觀(guān)看端通常還是同一臺(tái)或另一臺(tái)機(jī)器的顯示器。它解決的是讓一塊虛擬屏可被遠(yuǎn)程查看不是本地多屏布局。Q不裝驅(qū)動(dòng)能不能玩A能。-dummy假驅(qū)動(dòng)不需要任何系統(tǒng)權(quán)限和硬件適合先跑通流程、看懂 VNC 那半邊邏輯。QVista / Win7 下為什么總是權(quán)限報(bào)錯(cuò)A這是設(shè)計(jì)內(nèi)的安全檢查那兩個(gè)系統(tǒng)上需要管理員身份運(yùn)行。右鍵以管理員身份打開(kāi)命令行再執(zhí)行即可。Q畫(huà)面清晰度會(huì)不會(huì)很差A(yù)VNC 走的是原始像素增量更新不經(jīng)過(guò)有損壓縮文字邊緣是否銳利取決于兩端分辨率是否匹配。把-x/-y設(shè)為查看端顯示器的原生分辨率體驗(yàn)最穩(wěn)。Q這個(gè)項(xiàng)目還在維護(hù)嗎A它更接近一個(gè)功能完整的參考實(shí)現(xiàn)源碼齊全、路徑清晰src/VirtualMonitor/下驅(qū)動(dòng)、顯示、安裝器分層擺放非常適合當(dāng)作學(xué)習(xí)素材或二次開(kāi)發(fā)起點(diǎn)。別指望它像商業(yè)軟件一樣頻繁迭代。下一步你自己動(dòng)手如果你被一塊不存在的屏幕通過(guò)網(wǎng)絡(luò)出現(xiàn)在別人眼前這件事勾起了興趣最合理的起步方式是先克隆源碼把main.cpp的命令行解析和VirtualMonitor.cpp的主循環(huán)讀一遍加起來(lái)不過(guò)兩三百行再用-dummy模式跑一次接著裝真實(shí)驅(qū)動(dòng)跑一次對(duì)比兩條路徑的畫(huà)面來(lái)源差異。整個(gè)過(guò)程兩三個(gè)小時(shí)就能完成收獲卻是從零理解一塊虛擬顯示器如何誕生的完整認(rèn)知。安裝遇到問(wèn)題、想討論驅(qū)動(dòng)細(xì)節(jié)或者有新的虛擬顯示器玩法直接去項(xiàng)目倉(cāng)庫(kù)提 issue 或參與討論就行。硬件不夠、桌面太擠都不再是限制條件——你需要的只是幾行命令和一塊愿意被網(wǎng)絡(luò)看見(jiàn)的虛擬屏。動(dòng)手試試吧看完它從無(wú)到有點(diǎn)亮的那一刻你大概就明白為什么那么多人愿意研究它了。延伸資源核心源碼在src/VirtualMonitor/官方文檔在doc/manual/含中英文用戶(hù)手冊(cè)include/VBox/下有全套虛擬化相關(guān)頭文件可供查閱?!久赓M(fèi)下載鏈接】VirtualMonitor項(xiàng)目地址: https://gitcode.com/gh_mirrors/vi/VirtualMonitor創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考