我有一個新買的便宜的 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 上執行此操作。