如何在大显示器中模拟较小的显示器?

如何在大显示器中模拟较小的显示器?

我有一个 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 区域显示整个屏幕内容(以较小的分辨率)?

任何帮助表示赞赏

答案1

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矩阵左边部分可得:

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)。

相关内容