為什么每次想把游戲或桌面串流到電視上,都得重新折騰一遍內核模塊、虛擬顯示器、音頻路由和防火墻?一個周末的深夜,我盯著反復崩潰的 Sunshine + Moonlight 配置,終于受夠了。既然流程是死的,為什么不讓腳本替我記住?于是我寫了一個叫 GDEV TV Mode 的小工具。
這件事的起點其實很樸素:我希望 Linux Mint 筆記本能穩定地把一個獨立虛擬桌面,而不是主顯示器的鏡像,推流給客廳的電視或掌機。但在 Linux 上用 X11 搞無頭顯示,幾乎每一步都在埋坑。典型的一次串流會話,我要依次執行六步:加載 vkms 內核模塊、用 xrandr 創建并定位虛擬顯示器、把音頻導向虛擬聲卡讓 Sunshine 能抓取、打開防火墻端口、最后啟動 Sunshine,并祈禱所有組件都以正確的順序運行。少任何一步,畫面就是黑屏,或者音頻消失。手動重復這套流程,讓人迅速失去耐心。
于是一個想法跳了出來:能不能把所有步驟收斂成一條命令?我選擇用模塊化 Bash 腳本實現這個生命周期。現在,當我在終端敲下 gdev-tv start,工具內部會按以下順序自動推進:先跑一輪健康診斷,確認環境就緒;接著加載 VKMS;創建虛擬顯示器;配置 xrandr 布局;生成虛擬音頻接收器;調整防火墻;最后拉起 Sunshine,等待 Moonlight 客戶端接入。整個過程幾秒鐘完成,我只需要從沙發上拿起手柄。
這里最讓我興奮的其實是內置的診斷系統。過去腳本跑到一半突然失敗,日志里只有一行難以理解的錯誤。而 GDEV TV Mode 在真正動手改變系統狀態之前,提供了 gdev-tv doctor 這條命令。它可以全面檢查 GPU 型號(Intel、AMD 或 NVIDIA)、當前運行的顯示服務器(目前只支持 X11)、必需的內核模塊、Sunshine 是否已安裝、防火墻狀態、虛擬顯示支持、音頻子系統、依賴包和用戶權限。任何一項不滿足,工具就會逐條列出缺失項,而不是在運行時才報錯。這意味著我可以一次性修好所有環境問題,然后把后續操作完全交給腳本。
串流結束后的清理同樣令我頭疼過:手動停止 Sunshine、刪除虛擬顯示器、卸載 VKMS、恢復防火墻、把音頻切回揚聲器……這些操作稍不注意就會殘留僵尸模塊。現在一句 gdev-tv stop 就能全部搞定,工具會自動停止 Sunshine、移除虛擬顯示、卸載 VKMS、還原防火墻規則、將音頻設備指回默認輸出,并清理臨時資源。用起來就像給電視模式裝了一個總開關,開和關都干干凈凈。
為了讓習慣不同的用戶都能用起來,我把所有可調配置都集中到了一個 .conf 文件里。虛擬顯示器的分辨率、刷新率、音頻源、防火墻端口范圍都可以在此定義。這樣跨機器部署時,只需要拷貝一份配置,不必再對著腳本文件改來改去。對于喜歡折騰的朋友,也可以輕松覆蓋默認行為。
這個周末項目的可靠性目標,我覺得基本達到了。通過強制性的前置診斷和統一的停止清理,幾乎所有我過去遇到的因環境差異導致的故障都被提前擋在外面。現在,我那臺舊 Linux Mint 筆記本真的變成了一臺“一鍵串流服務器”,打開電視,拿起手柄,運行一條命令,所有復雜的底層細節都被隱藏起來。如果有同樣被 Sunshine + Moonlight 搭配虛擬顯示器折磨過的人,我很想邀請你試試這個輕量小工具。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.