У меня есть недавно купленный дешевый 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).
Примечания
- Сопутствующий ответ:Проблема Xrandr, попытка избежать поломки дисплея
- Полезно попробовать разные настройки.арандр, графический интерфейс для xrandr (x11-xserver-utils).
- Не уверен, как это сделать на Wayland.