我有一个新买的便宜的 8 英寸 TFT LCD 显示器,它的所有侧面都“切掉了边缘”(即不显示所有像素)。我了解到这是由于“过扫描”造成的,这似乎主要影响使用 HDMI 输入的电视。
我的内核首先启动到 efifb,然后切换到 inteldrmfb——两个帧缓冲区驱动程序都出现了这个问题。我不使用 X windows,也永远不想在这个小显示器上使用 X。我只想使用 Linux 文本控制台。所以任何使用“xrandr”的解决方案都已经过时了。
我努力了一切我可以找到有关驱动程序级(内核级)帧缓冲区设置来解决此问题,包括使用“视频”内核启动参数调整分辨率设置以及使用 fbset 调整启动后的计时设置,但无论我做什么用fbset做的,好像被忽略了。
所以我的问题是:有没有一种方法,也许比帧缓冲区驱动程序级别更高,我可以在帧缓冲区控制台周围添加边距?
我知道我可以使用“stty”来缩短 Linux 将在控制台上使用的列数和行数,但这只能解决右侧和底部的问题,并且仍然会在左侧留下字符被切断顶部。有没有办法使用“stty”向控制台添加“第一列”和“第一行”偏移量(即一些空白填充)?如果不使用 stty,使用其他一些轻量级工具(不是 X windows)?
答案1
您可以fbset
尝试一下该命令。
运行fbset -i
将向您显示有关当前帧缓冲区设置的一些信息,包括“计时”行。对我来说,所有值都是 0-s,这可能意味着它们没有被使用,但是如果您看到那里的一些实际值,您可以尝试调整它们。
摘录自man fbset
:
Display timings:
-pixclock <value>
set the length of one pixel (in picosec‐
onds). Note that the frame buffer device
may only support some pixel lengths
-left <value>
set left margin (in pixels)
-right <value>
set right margin (in pixels)
-upper <value>
set upper margin (in pixel lines)
-lower <value>
set lower margin (in pixel lines)
-hslen <value>
set horizontal sync length (in pixels)
-vslen <value>
set vertical sync length (in pixel lines)
--timings, -t ...
set all timing parameters at once in the
order <pixclock> <left> <right> <upper>
<lower> <hslen> <vslen>, e.g. -t 35242 64
96 35 12 112 2
请注意-left
, -right
, -upper
,-lower
参数。fbset
甚至有一个-move
命令可以增加这些值之一并同时减少相反的值:
Display positioning:
-move {left|right|up|down}
move the visible part of the display in the
specified direction
-step <value>
set step size for display positioning (in
pixels or pixel lines), if -step is not
given display will be moved 8 pixels hori‐
zontally or 2 pixel lines vertically
答案2
如果 DP-1 左侧有一个 HDMI 屏幕,并且您希望左侧有一个间隙,则可以运行以下脚本:
#!/bin/bash
# Usage: .script pixel_height pixel_width
new_mode_spec=$(cvt "$1" "$2" 60 | sed -n 's/Modeline *//p')
new_mode_name=$(echo "$new_mode_spec" | grep -o '"[^"]*"')
new_mode_res=$(echo "$new_mode_name" | sed 's/"//g' | sed 's/_.*$//')
xrandr --newmode "${new_mode_spec}"
xrandr --addmode HDMI-1 "${new_mode_name}"
xrandr --output HDMI-1 --left-of DP-1 \
--mode "${new_mode_name}" \
--panning "${new_mode_res}" \
--scale-from 1920x1080 \
--output DP-1 --mode 1920x1080
echo "Changed to ${new_mode_res}, remember that it must be a multiple of 8!"
它假设原始分辨率为 1920x1080,并将目标像素高度和宽度作为参数。
副作用是填充不是黑色,而是在右侧重复屏幕的左侧部分 (DP-1)。
笔记
- 相关回答:Xrandr 试图避免显示损坏的问题
- 尝试不同的设置很有用阿兰德尔,xrandr (x11-xserver-utils) 的 GUI。
- 不知道如何在 Wayland 上执行此操作。