如何使用 Xrandr 裁剪显示器的一部分

Gre*_*g S 5 linux xorg xrandr

物理显示器的最顶部被边框遮住了(不要问!)。我想使用 xrandr 重新定义桌面的实际大小,因此它只使用显示器的可用部分。

显示器的实际像素尺寸为 2880x1920,但顶部(比如)20 行不可用。(实际上它更少,但我必须进行实验)。所以我想要一个 2880x1900 的桌面并设置监视器位置,以便桌面显示在监视器上,从第 20 行开始一直到底部。

认为这意味着我需要使用 --pos +0-20 但我得到:

$ xrandr  --output eDP-1 --pos +0-20
xrandr: failed to parse '+0-20' as a position
Run Code Online (Sandbox Code Playgroud)

我尝试了其他变体:

$ xrandr --fb 2880x1900 --output eDP-1 --size 2880x1900+0+20
xrandr: specified screen 2880x1900 not large enough for output eDP-1 (2880x1920+0+0)
Run Code Online (Sandbox Code Playgroud)

这与现有问题如何仅使用显示器的一部分进行显示非常相似,但该用户正在询问 Windows,并且每个人都建议仅使用窗口管理器。鉴于这将始终适用于每个工作区,这会很快变得令人厌烦。我正在寻找更基本的解决方案。

实际上,我认为它少于 20 像素行是错误的。

我发现了这个:

$ xrandr --output eDP-1 --transform 1,0,0,0,1,-30,0,0,1 
Run Code Online (Sandbox Code Playgroud)

确实将输出向下移动,以便顶部不会被切断。不幸的是,现在整个桌面帧缓冲区都延伸到了可见屏幕下方。我可以为该变换添加一个比例因子,但我宁愿只是调整桌面的大小,以便桌面的底部落在显示器的底部。

Dan*_*Dan 6

我的配置:

  • 英特尔赛扬 NUC
  • Ubuntu 18.04.3 LTS
  • Intel i915 驱动程序(集成视频)
  • HDMI 输出到旧液晶电视

什么不起作用:

  • 驱动程序不支持 xrandr 中的过扫描/欠扫描属性
  • 自定义视频模式仍然超出了显示器的边缘

做了什么工作:

xrandr --output "HDMI-2" --fb 1800x1000 --transform 1,0,-60,0,1,-30,0,0,1
Run Code Online (Sandbox Code Playgroud)

--fb 1800x1000设置显示区域。单独使用此设置将为您提供右侧和底部较大的边距,但不会使图像居中。

--transform 1,0,-60,0,1,-40,0,0,1将显示的图像向右移动 60 像素(-60),向下移动 40 像素(-40)。

组合在一起,我的屏幕有 60 像素的左边距、1800 像素宽的显示屏和另外 60 像素的右边距,总共 1920 像素。垂直方向上,我有 40 像素的上边距、1000 像素高的显示屏和 40 像素的显示屏。底部边距总计 1080。

我仍然收到警告:

xrandr: specified screen 1800x1000 not large enough for output HDMI-2 (1920x1080+-60+-40)
Run Code Online (Sandbox Code Playgroud)

然而,帧缓冲区的大小仍然会调整,并且变换仍然会应用,以便屏幕的边缘不再延伸超过显示器的末端。

即使显示上述警告消息,xrandr 为零后的错误级别(意味着它工作时没有错误)。

这是对我有用的解决方案,并且使用英特尔集成视频驱动程序而不是更先进的 nVidia 或 Radeon 驱动程序,这是迄今为止唯一有效的解决方案。

对于您的解决方案,我建议使用更小的 --fb 来开始:

xrandr --output eDP-1 --fb 2400x1800 
Run Code Online (Sandbox Code Playgroud)

然后进行变换以使左上角可见。

然后找出可以扩展帧缓冲区的内容以保持右边缘和下边缘可见。

这些都不会改变分辨率,您的屏幕仍然是 2880x1920。您只需更改屏幕尺寸并将屏幕向下和向右移动即可。