2024-06-01

設定 虛擬桌面 及 使用 網頁瀏覽器 為作外接熒幕裝置

使用 智能電話 或 平板電腦 連接熒幕內容投映到外接熒幕裝置
但在下打算將 智能電話 或 平板電腦 當作外接熒幕裝置
讓電腦熒幕投映到 智能電話 或 平板電腦 ,能夠善用舊電子產品

Deskreen

https://github.com/pavlobu/deskreen/releases/latest 下載及安裝最新版本

開啟 Deskreen 會有支持烏克蘭的訊息
Glory To Ukraine! Glory To Ukrainian Heroes! 關閉訊息

Deskreen 會建立 網頁伺服器 ,並提供連接到伺服器的 網頁超連結
亦提供 QRCode 方便 智能電話 或 平板電腦 等 具備鏡頭 及 QRCode分析器 的裝置連接

在下使用 平板電腦 連接到 Deskreen

當有裝置嘗試連接到 Deskreen 時,Deskreen 需要選擇 允許拒絕 連接
Allow 允許 連接

連接後,選擇顯示方式

Entire Screen 會將選取的 整個熒幕 分享

Application Windows 會將選取的 應用程式視窗 分享

在下測試將 整個熒幕分享 的方式
設定完成後,按 Confirm

完成連接

外接裝置的網頁瀏覽器會顯示被連接的電腦的熒幕畫面

點擊全熒幕顯示的按鈕,外接裝置便能夠模仿成外接顯示器

Weylus

https://github.com/H-M-H/Weylus/releases/latest 下載及安裝最新版本

Weylus 的操作界面比 Deskreen 更簡單,但操作選項則比 Deskreen 多:

  • Access code - 連接密碼,預設 空白
  • Bind Address - 連接地址,預設 0.0.0.0 (任意有效地址)
  • Port - 連接埠,預設 1701
  • WebSocket - 預設 9001
  • Auto Start - 執行 Weylus 後自動起動
  • Wayland / PipeWire Support - 使用 Wayland 才有效
  • VAAPI - 使用 開源API 的 硬件加速,會降低穩定性
  • NVENC - 使用 Nvidia API 的 硬件加速,需要使用 Nvidia圖像卡 才有效,會降低穩定性

按 Start 起動後,同樣會建立網頁伺服器讓外接裝置連接
亦提供 QRCode 方便智能裝置連接

載入網頁,出現 Failed to create uinput device! 的提示訊息
原因是宿主系統沒有提供 uinput 讓外接裝置使用

出現 uinput 提示訊息後, Weylus 亦會提供解決 uinput 的方法,在 Terminal 輸入:

sudo groupadd -r uinput
sudo usermod -aG uinput "${USER}"
echo 'KERNEL=="uinput", MODE="0660", GROUP="uinput", OPTIONS+="static_node=uinput"' | sudo tee "/etc/udev/rules.d/60-weylus.rules"
sudo udevadm control --reload
sudo udevadm trigger
mode=`cvt 1920 1080 60 | grep 'Modeline ' | sed -r 's/Modeline //g'`
eval "xrandr --newmode ${mode}"
eval "xrandr --addmode VIRTUAL1 `echo "${mode}" | awk -F ' ' '{print $1}'`"

設定後(如果未能生效或重新開機)便可以讓外接裝置具備遙距離鍵盤輸入

如果要取消 uinput 只需要將 /etc/udev/rules.d/60-weylus.rules 刪除 或 將內容變改為註釋即可

但即使不設定 uinput ,只需要在外接裝置的網頁界面取消 Enable uinput 便可以正常運作

而即使取消 Enable uinput ,外接裝置仍然能夠使用:

  • 滑鼠(Mouse)
  • 繪圖筆(Stylus)
  • 觸控操作(Touch)

來遙距離操作

而其實選項方便,使用預設設定亦沒有影響,一般情況都能夠正常使用
但在下稍微修改設定,令顯示的內容更加流暢,畢竟無線顯示熒幕的內容,通常都會有延遲

  • Stretch Video - 會將宿主熒幕的內容延伸至整個外接裝置的熒幕
    有機會令畫面變形,因此在下建議取消
  • Capture Cursor - 可以顯示宿主熒幕上的遊標位置
  • Max Video Resolution - 宿主熒幕的內容在網頁上顯示的解像度
    越高越細緻,但同時需要較多時間更新內容,因此建議調低至視覺合適的解像度
    (解決度過低,影像會非常濛糊)
  • Min Frame Interval - 熒幕內容的更新速度,越低越快,外接裝置的運作速度快才能有效

除了能夠設定顯示及控制的內容
Weylus 可以互動地讓外接裝置選擇顯示的宿主熒幕內容

例如選擇整個熒幕

確定顯示設定後,點擊外接熒幕上,設定欄的選單按鈕便可以收合(或展開)設定欄

如果使用 非iOS設備 作為外接裝置,還能夠裝換為全熒幕顯示模式

硬件模擬

坊間有一些稱為 模擬插頭 (Dummy Plug) 的電子產品,能夠令電腦以為已經連接到 熒幕顯示器
這些 模擬插頭 涵蓋所有已知的 影像輸出介面,包括: VGA, DVI, HDMI, DP
在下使用 HDMI模擬插頭 測試

當 模擬插頭 連接到 電腦 , 電腦 識別到虛擬的 熒幕顯示器 (在下使用的 HDMI模擬插頭 標示為 BBC 16")
便可以在 熒幕分享 時,選擇 虛擬熒幕 並在 外接裝置 顯示 熒幕內容

虛擬熒幕

閣下可能會發現,雖然這種方法能夠將宿主熒幕的內容在外接裝置顯示
但實際只是 熒幕鏡射(Mirroring) ,並不能將宿主熒幕延伸到外接裝置
因此,如果需要將宿主熒幕延伸,便需要添置一些裝置或設定

軟件模擬

畢竟 硬件模擬 需要成本添置額外設備,而且 圖像卡 的插孔亦有限
因此亦可以改用軟件方式模擬虛擬熒幕

Linux 可以使用 XRandR 建立虛擬熒幕
例如在下打算模擬 1920x1080 60Hz 的 虛擬熒幕
先到 /usr/share/X11/xorg.conf.d 建立 熒幕區域

Section "Device"
	Identifier "intelgpu0"
	Driver "intel"
	Option "VirtualHeads" "1"
EndSection

檔案名並不重要,不過一般儲存為 *.conf
而設定檔當中,在下使用模擬 Intel GPUIntel 驅動程式 的設定,並建立 1個虛擬熒幕
(熒幕數量按需要調整)
設定後,需要重新登入才生效

重新登入後,在 Terminal 輸入:

xrandr

會顯示

VIRTUAL* disconnected (normal left inverted right x axis y axis)

表示已經設置虛擬熒幕,但未連接

輸入:

cvt 1920 1080 60

顯示

# 1920x1080 59.96 Hz (CVT 2.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz
Modeline "1920x1080_60.00"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync

表示 1920x1080 60Hz 熒幕的建議設定值

將剛才的建議設定值複製,輸入:

xrandr --newmode "1920x1080_60.00"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync

新增 1920x1080 60Hz 的 熒幕設定選項

輸入:

xrandr --addmode VIRTUAL1 "1920x1080_60.00"

1920x1080 60Hz 熒幕設定選項 指派到 VIRTUAL1

然後可以到 熒幕偏好設定 選取 VIRTUAL1 並啟動熒幕,便能夠使用 虛擬熒幕

便可以讓外接裝置選取 虛擬熒幕 ,作為 延伸熒幕

虛擬熒幕 與真實的熒幕功能相同,都可以設定位置、解像度、更新率、旋轉方向

補充資料

雖然技術文章指宿主系統與外接裝置連接到相同網絡才能有效
但如果將宿主系統的 IP地址 及 連接埠 加入到 通訊埠轉發 ,能夠讓外部網絡的裝置連接
這種操作接近與 VNC 相同

cvt 並不是 Linux 或 X11 的預設套件,需要安裝 xcvt 才能使用
輸入

sudo apt install xcvt
按此安裝 xcvt

總結

這個技術能將已經折舊但仍能使用的智能裝置,替待成支援電腦的外接熒幕
但亦並非所有折舊的智能裝置都能使用,在下發現不支援 HTML5 的網頁瀏覽器不能顯示熒幕內容

參考資料

沒有留言 :

張貼留言