HDMI 오버스캔을 보상하기 위해 Linux 프레임 버퍼 텍스트 콘솔에 여백, 테두리, 오프셋 또는 패딩을 추가하는 방법이 있습니까?

HDMI 오버스캔을 보상하기 위해 Linux 프레임 버퍼 텍스트 콘솔에 여백, 테두리, 오프셋 또는 패딩을 추가하는 방법이 있습니까?

나는 모든 면에서 "가장자리를 잘라내는"(즉, 모든 픽셀을 표시하지 않는) 새로 구입한 값싼 8인치 TFT LCD 디스플레이를 가지고 있습니다. 나는 이것이 주로 HDMI 입력을 사용하는 TV를 괴롭히는 "오버스캔" 때문이라는 것을 이해하게 되었습니다.

내 커널은 먼저 efifb로 부팅한 다음 inteldrmfb로 전환합니다. 두 프레임 버퍼 드라이버 모두 문제가 발생합니다. 나는 X 창을 사용하지 않고 있으며 이 작은 디스플레이에서 X를 사용하고 싶지도 않습니다. 내가 하고 싶은 것은 Linux 텍스트 콘솔을 사용하는 것뿐입니다. 따라서 "xrandr"을 사용하는 솔루션은 종료되었습니다.

나는 시도했다모든 것"비디오" 커널 부팅 매개변수를 사용하여 해상도 설정을 조정하고 fbset를 사용하여 부팅 후 타이밍 설정을 조정하는 등 이 문제를 해결하기 위한 드라이버 수준(커널 수준) 프레임 버퍼 설정에 대해 찾을 수 있지만, 내가 무엇을 하든 상관 없습니다. fbset과 관련이 있으면 무시되는 것 같습니다.

그래서 제 질문은 이렇습니다. 프레임 버퍼 드라이버 수준보다 더 높은 수준에서 프레임 버퍼 콘솔 주위에 여백을 추가할 수 있는 방법이 있습니까?

"stty"를 사용하여 Linux가 콘솔에서 사용할 열과 행의 수를 줄일 수 있다는 것을 알고 있지만 이렇게 하면 오른쪽과 아래쪽의 문제만 해결되고 여전히 왼쪽과 아래쪽에 문자가 잘린 채로 남게 됩니다. 윗면. "stty"를 사용하여 "첫 번째 열"과 "첫 번째 행" 오프셋을 콘솔에 추가하는 방법이 있습니까(예: 공백 채우기)? stty가 아닌 경우 다른 경량 도구(X 창이 아닌)를 사용합니까?

답변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)에서 반복한다는 것입니다.

노트

관련 정보