![HDMI オーバースキャンを補正するために、Linux フレーム バッファー テキスト コンソールにマージン、境界線、オフセット、またはパディングを追加する方法はありますか?](https://rvso.com/image/122444/HDMI%20%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%B3%E3%82%92%E8%A3%9C%E6%AD%A3%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E3%80%81Linux%20%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%20%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%83%BC%20%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%20%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E3%81%AB%E3%83%9E%E3%83%BC%E3%82%B8%E3%83%B3%E3%80%81%E5%A2%83%E7%95%8C%E7%B7%9A%E3%80%81%E3%82%AA%E3%83%95%E3%82%BB%E3%83%83%E3%83%88%E3%80%81%E3%81%BE%E3%81%9F%E3%81%AF%E3%83%91%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
新しく購入した安価な 8 インチ TFT LCD ディスプレイは、すべての面で「端が切れて」います (つまり、すべてのピクセルが表示されません)。これは主に HDMI 入力を使用するテレビに発生する「オーバースキャン」によるものだと理解しました。
私のカーネルは最初に efifb で起動し、その後 inteldrmfb に切り替わります。両方のフレーム バッファ ドライバで問題が発生します。私は X ウィンドウを使用しておらず、この小さなディスプレイで X を使用するつもりはありません。私がしたいのは Linux テキスト コンソールを使用することです。したがって、「xrandr」を使用するソリューションは不可能です。
私が試してみましたすべてこの問題を解決するためのドライバー レベル (カーネル レベル) のフレーム バッファー設定については、「ビデオ」カーネル ブート パラメーターを使用して解像度設定を微調整したり、ブート後に fbset を使用してタイミング設定を微調整したりする方法がありますが、fbset で何をしても無視されるようです。
そこで私の質問は、フレーム バッファー ドライバー レベルよりも高いレベルで、フレーム バッファー コンソールの周囲にマージンを追加する方法があるかどうかです。
Linux がコンソールで使用する列と行の数を短くするために「stty」を使用できることはわかっていますが、それでは右側と下側の問題しか解決されず、左側と上側では文字が切り取られたままになります。「stty」を使用してコンソールに「最初の列」と「最初の行」のオフセット (つまり、空白のパディング) を追加する方法はありますか? stty でない場合は、他の軽量ツール (X ウィンドウ以外) ではどうですか?
答え1
コマンドを試してみるといいでしょうfbset
。
実行すると、fbset -i
現在のフレームバッファ設定に関する情報がいくつか表示されます。これには「タイミング」行も含まれます。私の場合、すべての値は 0 です。これはおそらく使用されていないことを意味しますが、実際の値が表示されている場合は、微調整してみることができます。
抜粋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
値の 1 つを増加させ、同時に反対の値を減らすコマンドもあります。-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 でこれをどうやって行うのか分かりません。