Existe uma maneira de adicionar margem, borda, deslocamento ou preenchimento ao console de texto do buffer de quadro do Linux para compensar o overscan HDMI?

3

Eu tenho uma tela LCD TFT de 8 polegadas recentemente comprada que está "cortando as bordas" de todos os lados (ou seja, não mostrando todos os pixels). Eu vim a entender que isso é devido a "overscan", que parece afligir principalmente TVs usando entrada HDMI.

Meu kernel é inicializado pela primeira vez no efifb e depois passa para o inteldrmfb - ambos os drivers de buffer de quadro exibem o problema. Eu não estou usando o X Window e nunca vou querer usar o X neste pequeno display. Tudo o que eu quero fazer é usar o console de texto do Linux. Então, qualquer solução usando "xrandr" está fora.

Eu tentei tudo para encontrar configurações de buffer de quadro 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 "video" e ajustes as configurações de tempo pós-inicialização com o fbset, mas não importa o que eu faça com o fbset, ele parece ser ignorado.

Portanto, minha pergunta é a seguinte: Existe uma maneira, talvez de nível mais alto do que no nível do driver de buffer de quadro, que eu possa adicionar margem ao redor do console do buffer de quadros?

Eu sei que posso usar "stty" para diminuir 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á os caracteres cortados no lado esquerdo e o lado superior. Existe uma maneira de usar "stty" para adicionar uma "primeira coluna" e "primeira linha" offset para o console (ou seja, alguns preenchimento de espaço em branco)? Se não com stty, com alguma outra ferramenta leve (não X windows)?

    
por acker9 25.11.2017 / 18:21

1 resposta

1

Você pode experimentar o comando fbset .

A execução de fbset -i mostrará algumas informações sobre suas configurações atuais de framebuffer, incluindo uma linha de "intervalos". Para mim, todos os valores são 0-s, o que provavelmente significa que eles não são usados, mas se você vir alguns valores reais, pode tentar modificá-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

Tenha em atenção os parâmetros -left , -right , -upper , -lower . fbset tem um comando -move que aumenta um desses valores e diminui o inverso 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
    
por 16.12.2017 / 09:22