如何在大型顯示器中模擬小型顯示器?
我有一個 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
)。