Ao usar o console serial do meu sistema, sempre acabo com $COLUMNS=80
e $LINES=24
.
Embora eu possa alterar essas variáveis manualmente, é um pouco chato fazer isso a qualquer momento quando a janela do terminal do lado do cliente foi redimensionada.
Normalmente, estou me conectando ao console usando screen /dev/mytty baudrate
.
Alterar a $TERM
variável de ambiente para "tela" ou "xterm" não ajuda.
Preciso ligar getty
com alguns deles em vez do vt100?
Escusado será dizer que tudo isso funciona bem, quando eu me conecto à mesma máquina usando ssh.
fonte
[[ $(tty) == /dev/ttyS0 ]] && trap res2 DEBUG
a uma das configurações em seu perfil shell (por exemplo,/etc/profile
,~/.bash_profile
). Isso fará com que seja executado após cada comando (o que seria bom se você estiver redimensionando janelas / painéis com screen / tmux / emulador de terminal).res
eres2
são muito lentos para qualquer coisa, exceto para o primeiro login. Nas minhas máquinas, ambos estão demorando 0,5 segundo para terminar ... fazendo com que todos os meus comandos pareçam lentos (quando usados com a armadilha DEBUG). Ops! Não pode ter isso. Acho que vou instalarxterm
.resize
é muito mais rápido - geralmente 0,002seg.busybox
es parecia ser tão lento para mim.resize
não é uma opção.Apenas para constar, aqui está a resposta para este problema (Usenet venceu):
Os aplicativos de console em execução dentro dos aplicativos de terminal virtual (
xterm
,rxvt
e amigos) serão recebidosSIGWINCH
após a operação de redimensionamento. Assim, o aplicativo poderá redesenhar a janela etc. no manipulador de sinal correspondente.Infelizmente, ao usar um console serial, não existe esse mecanismo.
No entanto, é possível que o aplicativo solicite ativamente o tamanho atual da janela do console. Portanto, a segunda melhor coisa é fazer isso toda vez que um prompt de comando é impresso pelo shell.
Isso pode ser conseguido primeiro compilando um executável de redimensionamento especial e, em seguida, usando o seguinte em
bashrc
:Obviamente, isso não alterará as configurações de tamanho do console em um aplicativo de console durante o tempo de execução.
fonte
resize
instalada no seu sistema.Os terminais "redimensionáveis", como tais, são o resultado do NAWS (
Negotiate About Window Size
da opção de tamanho de janela Telnet RFC 1073 ).Se você estiver conectado diretamente ao computador usando uma porta serial, não há negociação envolvida e o computador não tem conhecimento direto do tamanho da tela do seu terminal.
Se um terminal puder negociar o tamanho, o computador enviará
SIGWINCH
para aplicativos em execução no terminal, solicitando que eles atualizem sua noção do tamanho da tela.Quando o computador não conhece o tamanho da tela, normalmente define o tamanho mostrado por
stty -a
(linhas e colunas) como zero. Para uso interativo, isso é um pouco hostil, e alguns sistemas usam variáveis de ambienteLINES
eCOLUMNS
para ajudar. Os valores atribuídos podem ser derivados da descrição do terminal; mais frequentemente, eles são simplesmente codificados. A convenção para essas variáveis exige que elas entrem em vigor, a menos que sejam explicitamente suprimidas, por exemplo, nause_env
função de aplicações malditas . No lado positivo, essas variáveis podem ser úteis quando nenhuma informação confiável estiver disponível. No lado negativo, não existe um método conveniente para alterar essas variáveis.O
resize
programa (um utilitário fornecido comxterm
) pode usar a sequência de escape do relatório de posição do cursor no estilo VT100 para determinar o tamanho da tela. Isso pode ser executado na linha de comando; não há (novamente) nenhuma maneira conveniente de fazer isso automaticamente. Como efeito colateral,resize
atualiza as informações nas linhas / colunas vistas porstty
. Seu uso para fornecer variáveis de ambiente atualizadas é útil principalmente para casos como este, ondeLINES
eCOLUMNS
são definidos, e deve ser atualizado.fonte
Aqui está outra solução que funcionou muito bem para mim no meu sistema Linux incorporado (Overo executando o Angstrom). Acabei de executá-lo no meu arquivo .bashrc. Eu não queria usar o redimensionamento porque isso requer a instalação de alguns pacotes X e não queria isso.
Dizendo ao seu Raspberry Pi que seu terminal é maior que 24 linhas | Blog de pensamentos superficiais
fonte
Caso você possa usar o FreeBSD, existe o comando resizewin (1) , que faz exatamente o que você deseja.
fonte
Ao executar uma sessão shell através de uma linha serial, basta chamar o
resize
comando dentro dessa sessão - após estabelecer a conexão e após a alteração geométrica de cada terminal.O
resize
comando faz parte do xterm, mas não depende do X11. Por exemplo, no Fedora, ele é empacotado separadamente comoxterm-resize
.Como funciona: o comando redimensionar mede a altura / largura através de alguns movimentos do cursor e envia esses valores ao terminal através de seqüências de escape.
Com um shell como o zsh, isso também atualiza automaticamente as variáveis
LINES
eCOLUMNS
(como alternativa, é possível avaliar as instruções de exportação que os comandos imprimem no stdout).Por que isso é necessário: com uma sessão local ou ssh, o terminal pode sinalizar a sessão sobre alterações na geometria (consulte SIGWINCH). Esse mecanismo não funciona em uma conexão serial.
fonte
Aqui está uma função de redimensionamento simples e rápida que funciona apenas para o bash. Ele é modificado a partir do res2 do phk, usando o bash's
read -d delim
para evitar que o tempo limite termine a leitura.fonte