Moonlight Game Streaming(月光)是能讓你用手機/筆電串流玩另一台電腦遊戲的開源軟體,同時有遠端桌面的功能。
Moonlight主要依賴GPU傳輸畫面,因此CPU佔用較低。作為開源專案,Moonlight現已支援Nvidia/AMD/Intel顯示卡,但只有Windows版怎麼行呢?於是就有人開發了Linux版的Moonlight,就叫作Sunshine(陽光)。
本文將示範在性能較強的Linux桌機安裝Sunshine,並用性能較弱的Linux筆電遊玩桌機上的《戰爭雷霆》,後面再討論如何架設ZeroTier服務以達成在外面也能連線到家中電腦。
1. 安裝Sunshine伺服器
Sunshine最初由loki-47-6F-64開發,現請使用LizardByte維護的新版本Sunshine。
首先,參照說明文件安裝Sunshine的依賴套件,Nvidia顯示卡記得要安裝CUDA套件。
接著安裝Sunshine本體。
Ubuntu/Debian使用者下載deb檔安裝;Fedora/openSUSE下載rpm檔安裝。
Arch/Manajro則是從AUR安裝:
|
|
其他發行版,例如Gentoo就下載AppImage安裝:
|
|
安裝Sunshine後還要設定Sunshine的服務。
2. 設定Sunshine伺服器服務
- 將自己加入input群組:
|
|
- 編輯Sunshine規則:
|
|
- 加入以下內容:
|
|
- 編輯uinput:
|
|
- 加入以下內容,防止
Could not create Sunshine Mouse: Permission denied
錯誤:
|
|
- UFW開啟防火牆,允許以下幾個通訊埠(port)連線:
|
|
- 啟動Avahi服務
|
|
- 啟動Sunshine系統服務
|
|
用瀏覽器開啟
https://localhost:47990
,設定Sunshine後台的帳號密碼。之後頁面會重新載入,登入Sunshine後台。
3. 安裝Moonlight客戶端
Moonlight的客戶端(Client)支援Linux/Windows/MacOS/Android/iOS,請到官網下載。
開啟Monnlight連線客戶端,確認桌機和筆電都連線到同一個Wifi,筆電的Moonlight客戶端應該就會掃描到電腦了。點選電腦圖示,會出現一組配對碼。
桌機Sunshine後台點選Pair,輸入配對碼。
點選電腦圖示再點選"Desktop",筆電端就可以存取電腦桌面了。
選擇Desktop的界面能使用設定檔(
~/.config/sunshine/sunshine.conf
)或是Sunshine後台加入要快速啟動的程式。如果延遲嚴重試著在Moonlight客戶端調低畫質和FPS。
遠端桌電的聲音也會一併傳輸過來,聽不到的話試著調整遠端主機的PulseAudio輸出模式。
4. Moonlight啟動Steam遊戲
Moonlight客戶端支援用遊戲手把、鍵盤、觸控螢幕遠端操控遊戲,手機版Moonlight APP由下往上三指滑動開啟鍵盤。由於手把要看遊戲有無支援,甚至還要搞按鍵映射,因此這邊是用筆電的鍵盤滑鼠作遠端操控。
Moonlight客戶端能夠直接啟動Steam的Big Picture Mode,不過若Steam是用Snap或Flatpak安裝的就得手動開啟。
進入Big Picture Mode後,直接開啟遊戲吧。
實際用Moonlight遠端遊戲打了幾場空戰,偏靜態的畫面還算清楚。
不過畫面一複雜就可能變馬賽克了(下圖畫面是真的很模糊)。即使是區域網路都有這種問題,從外面連線回來這種真遠端就更不用說了,後面會探討一些解決方式。
5. 架設內網穿透軟體
虛擬區域網路軟體是用於內網穿透的工具,讓二部不同網路的裝置連線到一個虛擬區域網路。
此處使用ZeroTier,請參考ZeroTier使用教學,原理差不多,將二台裝置都連上ZeroTier網路,並開啟9993通訊埠給ZeroTier做P2P。
Moonlight客戶端連線會找不到ZeroTier網路上的電腦,請直接按右上角以ZeroTier分配的區域IP新增電腦:
6. 解決Moonlight連線延遲
非區域網路連線下,Moonlight(Sunshine)的伺服端上傳網速需求為40Mbps(每秒5MB)以上,ping值小於50ms,才能流暢串流720p30FPS的遊戲;要玩1080p60FPS遊戲則是需要160Mbps的上傳速度。
Moonlight客戶端的位元速率(Bitrate)最好設定為低於遠端電腦的上傳速度,串流才不會卡卡。
藉ZeroTier從外網連線到桌機上的Sunshine服務一定會有延遲,下面是我嘗試過的解決方法。
- 將系統NetworkManager的DNS伺服器設定為
8.8.8.8
- 用
zerotier-cli peers
查看二個節點間是否有P2P成功,若成功會顯示為LEAF
。 - 從本機ping遠端主機的IP看延遲,100ms以內延遲才夠低。
- Speedtest測試一下網速。
- 重開數據機與路由器。