HDMI オーバースキャンを補正するために、Linux フレーム バッファー テキスト コンソールにマージン、境界線、オフセット、またはパディングを追加する方法はありますか?

HDMI オーバースキャンを補正するために、Linux フレーム バッファー テキスト コンソールにマージン、境界線、オフセット、またはパディングを追加する方法はありますか?

新しく購入した安価な 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 つを増加させ、同時に反対の値を減らすコマンドもあります。-lowerfbset-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)。

ノート

関連情報