Есть ли способ добавить поля, границы, смещение или отступы в текстовую консоль буфера кадра Linux для компенсации пересканирования HDMI?

Есть ли способ добавить поля, границы, смещение или отступы в текстовую консоль буфера кадра Linux для компенсации пересканирования HDMI?

У меня есть недавно купленный дешевый 8-дюймовый TFT LCD дисплей, который "обрезает края" со всех сторон (т. е. не показывает все пиксели). Я пришел к выводу, что это из-за "пересканирования", которое, похоже, в основном поражает телевизоры, использующие вход HDMI.

Мое ядро ​​сначала загружается в efifb, а затем переключается на inteldrmfb — оба драйвера кадрового буфера демонстрируют эту проблему. Я не использую X windows и никогда не захочу использовать X на этом крошечном дисплее. Все, что я хочу сделать, это использовать текстовую консоль Linux. Поэтому любое решение с использованием "xrandr" отпадает.

я пыталсявсеЯ могу найти настройки кадрового буфера на уровне драйвера (уровня ядра), которые решают эту проблему, включая настройку разрешения с помощью параметра загрузки ядра «video» и настройку параметров синхронизации после загрузки с помощью fbset, но что бы я ни делал с fbset, они, похоже, игнорируются.

Итак, мой вопрос таков: есть ли способ, возможно, на более высоком уровне, чем уровень драйвера буфера кадра, с помощью которого я могу добавить поле вокруг консоли буфера кадра?

Я знаю, что могу использовать "stty", чтобы сократить количество столбцов и строк, которые Linux будет использовать на консоли, но это решит проблему только с правой и нижней стороны и все равно оставит символы обрезанными с левой и верхней стороны. Есть ли способ использовать "stty", чтобы добавить смещение "первого столбца" и "первой строки" на консоль (т. е. некоторое заполнение пробелами)? Если не с stty, то с каким-нибудь другим легким инструментом (не X windows)?

решение1

Вы можете fbsetпопробовать выполнить команду.

Запуск fbset -iпокажет вам некоторую информацию о текущих настройках кадрового буфера, включая строку "times". Для меня все значения равны 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

Если у вас есть экран HDMI слева от DP-1 и вы хотите оставить зазор слева, вы можете запустить скрипт ниже:

#!/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).

Примечания

Связанный контент