我一直在努力在 Linux 上为通过 HDMI 连接的电视设置自定义分辨率,但没有成功。我的用例是,我有一台 55 英寸的大电视,想把它用作超宽显示器,自定义分辨率为 3840x1200,如果不可能,则为 3840x1080,这样我就能将图像居中,屏幕顶部和底部有黑条。
我可以让它在装有 Nvidia GPU 的 Windows 桌面上运行,方法是设置自定义分辨率,然后打开 Nvidia 控制面板 -> 调整桌面大小和位置 -> 缩放 -> 无缩放。我想在我的 Linux 笔记本电脑上复制它。
笔记本电脑没有 nvidia 卡,它有一个 AMD GPU,但我相信它使用英特尔 GPU 进行 HDMI 显示:输出lspci -k | grep -A 3 -E "(VGA|3D)"
是
00:02.0 VGA compatible controller: Intel Corporation WhiskeyLake-U GT2 [UHD Graphics 620] (rev 02)
Subsystem: Lenovo Device 5073
Kernel driver in use: i915
Kernel modules: i915
如果我在笔记本电脑屏幕而不是 HDMI 电视上尝试以下命令,它就会按我想要的方式工作:
xrandr --output eDP1 --mode 1600x900 --set "scaling mode" "Center"
在上面的例子中,我的笔记本电脑屏幕的原始分辨率为 1920x1080,获得了所需的效果,即只用黑条填充屏幕的中心,而不会拉伸。
但是,如果我尝试对 HDMI 电视执行相同操作,它会显示一条错误消息,显然 HDMI 没有缩放模式选项:
# add the custom res I want, this command runs fine
xrandr --newmode "3840x1200_30.00" 180.00 3840 3992 4376 4912 1200 1203 1213 1224 -hsync +vsync
xrandr --addmode HDMI1 3840x1200_30.00
# try to change to the new added res
xrandr --output HDMI1 --mode 3840x1200_30.00 --set "scaling mode" "Center"
X Error of failed request: BadName (named color or font does not exist)
如果我设置不带缩放模式的命令,它可以工作,但图像会被拉伸以填满电视的整个区域。我还尝试了在其他答案中看到的以下命令,但均未成功:
xrandr --output HDMI1 --mode 3840x1200_30.00 --scale 1x1 --fb 3840x1200 --panning 3840x1200
xrandr --output HDMI1 --mode 3840x1200_30.00 --transform 1,0,0,0.5,0,0,1
xrandr --output HDMI1 --mode 3840x1200_30.00 --scale 1x0.5
顺便说一下,电视型号是 LG C1 Oled,我也尝试过在电视菜单中将其缩放比例设置为原始比例、16:9、4:3,但这些都不起作用。(在 Windows 中,使用原始设置可以正常工作)
我开始认为我想要的根本就是不可能的,也许是英特尔驱动程序的限制?