快轉到主要內容

xrandr製作Linux虛擬顯示器,設定虛擬雙顯示器輸出

分類   Linux系統 Linux使用技巧
標籤   X Window DisplayLink
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

Create a virtual monitor or display on Linux with xrandr.

注意:本文討論的內容僅支援X11環境,不支援Wayland。

Ivon將在這篇文章討論如何給Linux做個虛擬顯示器,好讓遠端桌面軟體擷取該顯示器的畫面,達成用另一台裝置當做Linux無線延伸桌面的效果。

1. 問題點
#

在研究 Moonlight平板當作電腦第二螢幕的時候,我發現Linux沒有一個萬用的做法,能夠生出第二個虛擬顯示器(virtual monitor)。

最簡單的方式是買個HDMI欺騙器,但如果不想花錢呢?

網路資料很多人說使用xrandr指令,並且只要寫個X.org設定檔標註VirtualHeads就能軟體模擬一個虛擬顯示器出來,但是只有Intel GPU支援這種模擬方式,Nvidia GPU要用其他方式繞過。還有,Intel的這個驅動過時了,需要modesetting核心參數才能用。。

另一種方式是讓xrandr使用未插上顯示器的視訊孔輸出,再利用xrandr --output指令強制啟用螢幕。可這個的運作條件是電腦必須有二個以上的視訊輸出孔,且處於閒置狀態才能讓xrandr控制。如果電腦只有一個CPU內顯,就沒有額外的孔能給xrandr利用了。

最後一種方式是依賴桌面環境實作,這個更不可靠,GNOME有 RDP Screen Share Mode,KDE則是 krfb-virtualmonitor,那麼其他桌面環境該怎麼辦呢?


為了解決以上問題,我採用xrandr搭配EVDI的做法。

EVDI (Extensible Virtual Display Interface) 是專為Synaptics DisplayLink設計的開源專案,但我們不是要它的DisplayLink功能,而是生成一個虛擬顯示器的功能。EVDI提供一個讓userspace管理的介面,載入核心模組後,Linux就會多出一個dummy能讓xrandr控制輸出畫面,這樣就彷彿有兩個顯示器了。

如果覺得裝EVDI太麻煩,下面設定EVDI的xrandr指令也適用其他閒置的顯示器,只要把EVDI的DVI-*顯示器名稱換掉就好了。

2. 安裝EVDI核心模組
#

  1. Ubuntu可從套件庫安裝DKMS核心模組:
sudo apt install evdi-dkms

Arch Liunx從AUR安裝

yay -S evdi
  1. 設定開機自動載入EVDI核心模組,生出一個虛擬顯示器
echo "evdi options initial_device_count=1" | sudo tee -a /etc/modprobe.d/local-evdi.conf
  1. 電腦重開機

  2. 檢查核心模組是否有載入,若無,手動載入

sudo lsmod | grep evdi

sudo modprobe evdi options initial_device_count=1

3. 設定虛擬顯示器
#

  1. 用xrandr指令,列出可用顯示器
xrandr -q
  1. 例如我的主顯示器是eDP-1,而EVDI生成的顯示器應該都是DVI-*開頭
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
eDP-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 344mm x 193mm

DVI-I-1-1 disconnected (normal left inverted right x axis y axis)
  1. 設定解析度
xrandr --addmode DVI-I-1-1 "1920x1080"
  1. 設定DVI顯示器,使其位於eDP顯示器的右邊
xrandr --output DVI-I-1-1 --mode 1920x1080 --right-of eDP-1
  1. 這樣就有二個顯示器了,用xrandr -q指令確認
Screen 0: minimum 320 x 200, current 3840 x 1080, maximum 16384 x 16384
eDP-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 344mm x 193mm

DVI-I-1-1 disconnected 1920x1080+1920+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1920x1080     60.01*
  1920x1080 (0x46) 152.840MHz -HSync -VSync
        h: width  1920 start 2000 end 2054 total 2250 skew    0 clock  67.93KHz
        v: height 1080 start 1086 end 1094 total 1132           clock  60.01Hz
  1. 實測KDE X11下,EVDI生成的螢幕是黑色背景的,沒有任何桌布,不過確實能把視窗拖曳過去。此外EVDI螢幕使用的時候KDE滑鼠會有點閃爍。

4. 測試軟體能否擷取到EVDI的虛擬顯示器
#

Weylus:可

x11VNC:可

Sunshine:可,指定顯示器編號就行

參考資料
#

相關文章

XWayland Rootful Mode:Wayland跑巢狀X11工作階段視窗
分類   Linux系統 Linux使用技巧
標籤   X Window Wayland
Weston合成器用法:X11跑巢狀Wayland工作階段
分類   Linux系統 Linux使用技巧
標籤   Wayland X Window
Linux PipeWire透過AirPlay協定播放音樂
分類   Linux系統 Linux使用技巧
標籤   AirPlay PipeWire

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。