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

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

나는 모든 면에서 "가장자리가 잘려진"(즉, 모든 픽셀이 표시되지 않는) 새로운 저렴한 8인치 TFT LCD 모니터를 가지고 있습니다. 이는 HDMI 입력을 사용하는 TV에 주로 영향을 미치는 것으로 보이는 "오버스캔" 때문인 것으로 알고 있습니다.

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

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

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

나는 "stty"를 사용하여 Linux가 콘솔에서 사용할 열과 행의 수를 줄일 수 있다는 것을 알고 있지만 이것은 오른쪽과 아래쪽의 문제만 해결하고 여전히 왼쪽의 문자가 잘리는 상태로 남게 됩니다. 맨 위. "stty"를 사용하여 콘솔에 "첫 번째 열" 및 "첫 번째 행" 오프셋(예: 일부 공백 패딩)을 추가하는 방법이 있습니까? stty를 사용하지 않는 경우 다른 경량 도구(X windows 아님)를 사용하시겠습니까?

답변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, 매개변수를 참고하세요 -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)에서 화면의 왼쪽 부분을 반복한다는 것입니다.

노트

관련 정보