問題點:Moonlight遠端Linux桌面解析度與客戶端不符,導致文字看起來太小或者出現黑邊。我希望可以像TeamViewer那樣自動縮放,將遠端Linux桌面的解析度調整為客戶端解析度。
從這樣
變成這樣
Moonlight客戶端雖然可以指定解析度,但是電腦端的Sunshine並不會跟著變化。所以我們得設定hook,利用Sunshine的「Custom Application」功能,自訂啟動桌面後執行指令,自動執行xrandr調整解析度與縮放,關閉遠端桌面之後再自動切回去。
本文討論的內容僅適用X11,因為Wayland沒有統一調整桌面解析度的指令。
1. 測試xrandr指令#
以我的情況來說,客戶端iPad Air 6的解析度是2360x1640,比例大約是3:2。如果不追求這麼高畫質,那麼用同為3:2比例的1475x1025就夠了(iPad解析度除以1.6)。
因為如果直接設定為2360x1640的話,電腦顯示器必須支援2K以上解析度否則會「超出範圍」,還有高解析度得設定全域螢幕縮放,字在iPad才不會看起來太小。直接用低解析度就不用再設定全域螢幕縮放了。
於Sunshine後台設定前,先手動執行一次xrandr指令,確認真的能修改解析度再繼續。
- Ubuntu安裝以下套件
sudo apt install x11-xserver-utils
- 一般16:9的螢幕不會支援3:2這種比例,所以得強制新增Modeline。使用cvt指令計算1475x1025的Modeline所需參數,取整後解析度會略有變化,變成1480x1025
cvt -r 1475 1025 60
- 新增Modeline
xrandr --newmode "1480x1025R" 103.50 1480 1528 1560 1640 1025 1028 1038 1055 +hsync -vsync
- 查看目前使用的螢幕為何
xrandr -q
- 將Modeline新增到HDMI-1
xrandr --addmode HDMI-1 "1480x1025R"
- 指定解析度。螢幕應該會閃一下之後螢幕被拉伸。
xrandr --output HDMI-1 --mode "1480x1025R"
- 如果要設定全域縮放1.5倍的話:
xrandr --output HDMI-1 --mode "1480x1025R" --scale 1.5x1.5
- 重設螢幕解析度為1920x1080:
xrandr --output HDMI-1 --mode "1920x1080"
2. 調整Sunshine後台的指令#
- 我們新增指令稿,第一個是變更解析度
vim ~/.local/bin/changeresolution.sh
- 填入指令:
xrandr --newmode "1480x1025R" 103.50 1480 1528 1560 1640 1025 1028 1038 1055 +hsync -vsync
xrandr --addmode HDMI-1 "1480x1025R"
xrandr --output HDMI-1 --mode "1480x1025R"
- 再來是重置解析度的指令稿
vim ~/.local/bin/resetresolution.sh
- 填入指令:
xrandr --output HDMI-1 --mode "1920x1080"
- 賦予執行權限
chmod +x ~/.local/bin/changeresolution.sh
chmod +x ~/.local/bin/resetresolution.sh
安裝Sunshine伺服器。
開啟後台的Applications頁面,點選Desktop(你也可以另外新增其他程式)
找到Do Command和Undo Command欄位
填入指令稿的絕對路徑:
bash /home/user/.local/bin/changeresolution.sh
和bash /home/user/.local/bin/resetesolution.sh
點選下方Save
用Moonlight連線前需要把解析度設定為
Full
以符合iPad解析度。點選Desktop,電腦解析度應該就會自動變化了。
要觸發解析度重置,必須點Quit APP中止桌面工作階段。