![Existe uma maneira de adicionar margem, borda, deslocamento ou preenchimento ao console de texto do buffer de quadros do Linux para compensar o overscan HDMI?](https://rvso.com/image/122444/Existe%20uma%20maneira%20de%20adicionar%20margem%2C%20borda%2C%20deslocamento%20ou%20preenchimento%20ao%20console%20de%20texto%20do%20buffer%20de%20quadros%20do%20Linux%20para%20compensar%20o%20overscan%20HDMI%3F.png)
Eu tenho um display LCD TFT barato de 8 polegadas recém-comprado que está "cortando as bordas" em todos os lados (ou seja, não mostrando todos os pixels). Cheguei à conclusão de que isso se deve ao "overscan", que parece afetar principalmente as TVs que usam entrada HDMI.
Meu kernel está inicializando primeiro no efifb e depois mudando para o inteldrmfb - ambos os drivers de buffer de quadros apresentam o problema. Não estou usando o X windows e nunca vou querer usar o X nesta pequena tela. Tudo o que quero fazer é usar o console de texto do Linux. Portanto, qualquer solução usando "xrandr" está fora de questão.
eu tenteitudoPosso encontrar configurações de buffer de quadros no nível do driver (nível do kernel) para resolver esse problema, incluindo ajustes nas configurações de resolução com o parâmetro de inicialização do kernel "vídeo" e ajustes nas configurações de tempo pós-inicialização com fbset, mas não importa o que eu fazer com fbset, parece ser ignorado.
Portanto, minha pergunta é a seguinte: existe uma maneira, talvez em um nível mais alto do que no nível do driver do buffer de quadros, de adicionar margem ao console do buffer de quadros?
Eu sei que posso usar "stty" para encurtar o número de colunas e linhas que o Linux usará no console, mas isso só resolverá o problema no lado direito e no lado inferior e ainda deixará caracteres cortados no lado esquerdo e o lado superior. Existe uma maneira de usar "stty" para adicionar um deslocamento de "primeira coluna" e "primeira linha" ao console (ou seja, algum preenchimento de espaço em branco)? Se não com stty, com alguma outra ferramenta leve (não X windows)?
Responder1
Você pode fbset
tentar o comando.
A execução fbset -i
mostrará algumas informações sobre as configurações atuais do framebuffer, incluindo uma linha de "tempos". Para mim, todos os valores são 0-s, o que provavelmente significa que eles não são usados, mas se você encontrar alguns valores reais, poderá tentar ajustá-los.
Um trecho de 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
Observe os parâmetros -left
, -right
, -upper
, -lower
. fbset
ainda possui um -move
comando que aumenta um desses valores e diminui o valor oposto ao mesmo tempo:
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
Responder2
Se você tiver uma tela HDMI à esquerda do DP-1 e desejar um espaço à esquerda, poderá executar o script abaixo:
#!/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!"
Ele assume que a resolução original é 1920x1080 e toma como parâmetros a altura e largura do pixel de destino.
Um efeito colateral é que o preenchimento não é preto, mas repete a seção esquerda da tela à direita (DP-1).
Notas
- Resposta relacionada:Problema do Xrandr tentando evitar exibição quebrada
- Experimentar diferentes configurações é útilArandr, uma GUI para xrandr (x11-xserver-utils).
- Não sei como fazer isso no Wayland.