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

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

私はすべての面で「最もカットされた」(つまり、すべてのピクセルが表示されない)新しい安価な8インチTFT LCDモニターを持っています。これは、HDMI入力を使用するテレビに主に影響を与えるように見える「オーバースキャン」によるものであることがわかります。

私のカーネルはまずefifbで起動し、次にinteldrmfbに切り替えます。問題は、両方のフレームバッファドライバで発生します。私はXウィンドウを使用せず、この小さなモニターでXを使用したくありません。 Linuxテキストコンソールを使いたいです。したがって、「xrandr」を使用するソリューションは廃止されました。

頑張りましたすべて「ビデオ」カーネルブートパラメータを使用して解像度設定を調整し、fbsetを使用してブート後のタイミング設定を調整するなど、この問題を解決するためのドライバレベル(カーネルレベル)フレームバッファの設定に関する情報を見つけることができます。しかし、fbsetで何をしても構いません。 、無視されたようです。

だから私の質問は:フレームバッファドライバよりも高いレベルでフレームバッファコンソールの周りに余白を追加する方法はありますか?

私は "stty"を使用してLinuxがコンソールで使用する列と行の数を減らすことができることを知っていますが、これは右側と下側の問題のみを解決し、まだ左側の文字が切り捨てられたままになります。トップ。 「stty」を使用してコンソールに「最初の列」や「最初の行」オフセット(たとえば、いくつかの空白パディング)を追加する方法はありますか? sttyを使用していない場合は、他の軽量ツール(X windowsではない)を使用しますか?

答え1

このコマンドを試してみてくださいfbset

実行するとfbset -i、「タイミング」行を含む現在のフレームバッファ設定に関するいくつかの情報が表示されます。私にとっては、すべての値がゼロなので使用されていないという意味かもしれませんが、そこに実際の値が表示されたら調整してみることができます。

抜粋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ください。これらの値の1つを増やし、同時にその逆の値を減らすコマンドもあります。-upper-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!"

デフォルトの解像度は1920 x 1080と仮定し、ターゲットピクセルの高さと幅をパラメータとして使用します。

副作用は、塗りつぶしが黒ではなく右側(DP-1)で画面の左側の部分を繰り返すことです。

ノート

関連情報