alterar a velocidade de rolagem do console de texto linux - sem reinicializar

1

Existe alguma maneira de mudar para a velocidade de rolagem do console de texto sem reiniciar? Atualmente usando o Fedora, mas as respostas específicas de não-distribuição são apreciadas.

link

Eu gostaria de usar o 'ywrap' nos parâmetros do kernel documentados acima para o vesafb sem precisar reiniciar o kernel para experimentá-lo.

    
por Juan 24.01.2015 / 03:12

2 respostas

0

stty é irrelevante.

A velocidade da linha de hardware definida através da disciplina de linha não tem significado para um terminal virtual se for diferente de zero. Só tem significado para "terminais" que são formados com dispositivos seriais reais, porque controla a velocidade da linha do dispositivo serial. Não há dispositivo serial envolvido no emulador de terminal integrado do kernel.

ywrap não é uma panacéia.

Exibir mecanismos de hardware como os habilitados por ywrap podem apenas ajudar um emulador de terminal com rolagem de largura total de linha (quase) de altura total.

Por razões óbvias, um emulador de terminal não pode fazer uso de tais mecanismos de hardware em todos os se ele suportar margens esquerda e direita, e assim as ações de rolagem não estão rolando a largura total da linha. O emulador de terminal embutido do kernel Linux não suporta a seqüência de controle DECSLRM ("DEC Set Left and Right Margins") (ou algo parecido) em primeiro lugar, portanto, a rolagem de linha parcial não é uma preocupação aqui. / p>

Mas a rolagem de altura parcial é. O emulador de terminal embutido do kernel Linux suporta a seqüência de controle DECSTBM ("DEC Set Top e Bottom Margins"), que permite que as aplicações definam as primeiras e últimas linhas na tela para rolagem. E essa seqüência de controle é listada corretamente como o recurso change_scroll_region na entrada linux terminfo. O uso de tais regiões de rolagem é bastante comum em aplicativos TUI de tela cheia. vim os usa ao rolar janelas com largura total, por exemplo.

O driver fbcon do kernel do Linux usa apenas o mecanismo ywrap se mais de três quartos da imagem da tela inteira estiver sendo retida e movida pela ação de rolagem. Isso ocorre porque a rolagem de altura parcial usando ywrap também envolve alguma cópia, para que as partes "não-roladas" da tela pareçam permanecer no mesmo lugar, mesmo que o hardware tenha rolado a tela inteiro . Quanto menor a região de rolagem, menos útil é o ywrap , porque quanto maior a quantidade de cópias a ser realizada, a fim de apresentar a ilusão de que algumas partes da exibição não foram roladas.

As seqüências de controle não são suportadas.

Em terminais reais, ao contrário de terminais virtuais, às vezes há seqüências de controle que permitem selecionar velocidades de rolagem. Por exemplo: A família DEC VT tem um sinalizador chamado DECSCLM ("DEC Scroll Mode", sinalizador de modo privado DEC # 4). Se reinicializar (através da sequência de controle do ECMA-48 RM), o terminal rola tão rápido quanto possível. Se definido (através da sequência de controlo ECMA-48 SM), o terminal rola mais lentamente, inserindo atrasos à medida que se desloca.

Se o emulador de terminal integrado do kernel do Linux fosse uma emulação DEC VT completa, essa seria a maneira de controlar a velocidade de rolagem. Mas não é. Embora alguns emuladores de terminal userspace, como xterm , implementem este sinalizador de modo, não conheço nenhum emulador de terminal de kernel que tenha. O emulador de terminal embutido do kernel do Linux certamente não.

    
por 27.01.2015 / 20:01
0

Você pode remover um módulo de driver framebuffer do kernel Linux sem reinicializar se disser ao subsistema VT para parar de usá-lo (veja Documentation / console / console.txt para detalhes):

# tl;dr
reload_fb() {
  echo 0 > /sys/devices/virtual/vtconsole/vtcon1/bind
  rmmod uvesafb
  modprobe uvesafb scroll=ywrap
}
reload_fb

Cuidado: Se vtcon0 for um driver simulado (por exemplo, no EFI) ou se houver erros (o BIOS do BIOS tende a ter bugs), isso pode deixá-lo sem exibição do console operacional até que você reinicie ou carregar um driver fb de trabalho. Apenas a exibição pára de funcionar; você ainda pode digitar comandos, mas não poderá ver a saída deles. O X11 parece não ser afetado. Portanto, recomendo que você faça login remotamente por SSH ou por meio de um terminal X na mesma máquina.

Observação: Se você estiver usando o driver uvesafb (como sugerido por eyoung100), você também precisará instalar o pacote v86d .

Você pode listar todos os drivers de console carregados:

[root@linflas ~]# cd /sys/devices/virtual/vtconsole
[root@linflas vtconsole]# grep -H "" vtcon*/[bn]*
vtcon0/bind:0
vtcon0/name:(S) dummy device
vtcon1/bind:1
vtcon1/name:(M) frame buffer device
    
por 16.09.2018 / 05:02