Xrandr

如何在大型顯示器中模擬小型顯示器?

  • December 1, 2020

我有一個 23.8 英寸的顯示器。xrandr 的輸出 =

Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 16384 x 16384
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
HDMI-2 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 527mm x 296mm panning 1920x1080+0+0
  1920x1080     60.00*+  50.00    59.94  
  1920x1080i    60.00    50.00    59.94  
  1680x1050     59.88  
  1600x900      60.00  
  1280x1024     75.02    60.02  
  1280x800      59.91  
  1152x864      75.00  
  1280x720      60.00    50.00    59.94  
  1024x768      75.03    60.00  
  832x624       74.55  
  800x600       75.00    60.32  
  720x576       50.00  
  720x576i      50.00  
  720x480       60.00    59.94  
  720x480i      60.00    59.94  
  640x480       75.00    60.00    59.94  
  720x400       70.08  

我想通過以下方式在我的顯示器內模擬一個較小尺寸的顯示器(約 15 英寸):

|----------|-----|
|          |     |
|  X       |  Y  |
|          |     |
|      ~15 |     |
|-----------     |
|            23.8|
-----------------

X 區域必須表現得像普通顯示器,而 Y 區域必須是空白的(黑屏)

我正在嘗試使用 xrandr 但沒有成功。有什麼想法可以像上面那樣裁剪螢幕並在區域 X 中顯示整個螢幕內容(以較小的解析度)?

任何幫助表示讚賞

xrandr可以(告訴 GPU)在齊次座標中應用任意變換矩陣(對於 2D,這是一個 3x3 矩陣,末端(下面)通常總是g h i

$$ 0 0 1 $$):

--transform a,b,c,d,e,f,g,h,i

指定要應用於輸出的變換矩陣。自動選擇雙線性濾波器。數學形式對應於:

a b c
d e f
g h i

變換基於齊次座標。矩陣乘以輸出像素的座標向量,得到圖形緩衝區中像素的變換座標向量。

$$ … $$

這暗示從縮小的顯示到更大的實際幀緩衝區,必須將其乘以 1 以上。因此,要將幀緩衝區縮小到 23.8/15 的顯示,需要將 2x2 上的 23.8/15 乘以(而不是除以)2x2矩陣的左邊部分得到:

1.5867   0     0
0     1.5867   0
0        0     1

一旦實現這一點,就必須手動保持以前的虛擬螢幕大小(即:幀緩衝區大小)不變,否則它會被計算為更大以仍然覆蓋監視器:--fb 1920x1080.

--fb widthxheight

將螢幕重新配置為指定大小。所有配置的顯示器都必須適合此尺寸。當未提供此選項時,xrandr 計算將容納配置輸出集的最小螢幕尺寸;此選項提供了一種覆蓋該行為的方法。

此設置是全域的,而不是每個監視器。

這給出了:

$ xrandr --output HDMI-2 --transform 1.5867,0,0,0,1.5867,0,0,0,1 --fb 1920x1080

如果您想應用多種效果(例如翻譯),我只是展示了一般情況:您必須將矩陣相乘並僅提供最終結果矩陣。實際上,這種轉換很簡單,而是有一個專用選項:

--scale xxy

更改輸出圖片的尺寸。大於 1 的值會導致螢幕壓縮(螢幕尺寸大於輸出模式的尺寸),小於 1 的值會導致輸出放大。此選項實際上是該選項的快捷版本 --transform

所以最後只是:

$ xrandr --output HDMI-2 --scale 1.5867x1.5867 --fb 1920x1080

有一個警告,因為結果不再覆蓋監視器:

xrandr: specified screen 1920x1080 not large enough for output HDMI-2 (3047x1714+0+0)

輸出模式沒有改變(可以用 明確指定--mode 1920x1080 --rate 60.00)。

引用自:https://unix.stackexchange.com/questions/622361