Como posso mostrar a saída do comando durante o prompt de login do texto do terminal?

1

Eu tenho um servidor praticamente sem head rodando Debian sem nenhum ambiente gráfico xorg / instalado. Na inicialização, ele simplesmente mostra um prompt de login no modo de texto.

Eu estou querendo saber como eu poderia mostrar a saída de um comando antes de qualquer usuário ter logado (na tela de login do meu terminal)? O comando seria exibido exatamente como com o comando watch , atualizando a cada 2 segundos ou mais e não precisa ser interativo.

NOTA: Estou ciente de que na maioria dos cenários, basta executar uma sessão SSH na máquina e executar um watch , ou instalar um servidor da Web que poderia fornecer o que eu preciso em um navegador seria muito melhor . No entanto, ambos são por razões diferentes e não práticas no meu cenário. Também como um puro apagamento da minha curiosidade, gostaria de saber como responder a esta pergunta.

    
por Lennart Rolland 20.11.2015 / 23:31

3 respostas

1

Por cima da minha cabeça, você poderia fazer algo como:

  1. Escreva um script para fazer o que você precisa (talvez apenas watch somecommand , talvez mais complexo)
  2. Crie uma conta de usuário e defina esse script para seu shell de login
  3. Ajuste seu getty para fazer o login automático desse usuário

Isso pode interromper a capacidade de fazer login normalmente; levaria algumas experiências para descobrir isso.

O mecanismo normal para mostrar informações de tempo de login, é claro, é /etc/issue . No entanto, olhando para isso, não parece adequado, devido a 1. nenhum mecanismo para executar comandos arbitrários e produzir aqueles, 2. nenhum mecanismo para atualizar a saída continuamente, em vez de imprimir uma vez.

    
por 20.11.2015 / 23:37
0

Como observado, /etc/issue é mostrado no lugar certo, mas é uma mensagem estática.

Você poderia script /etc/issue forçando a reinicialização dos processos getty ocasionalmente, embora um intervalo de 2 segundos interfira no logon. Um intervalo mais prático seria cerca de um minuto.

Com o Debian, você provavelmente está usando agetty (veja página de manual ). Ele pode ser reiniciado enviando um SIGHUP para ele (como root , é claro, já que getty é executado como root ).

Para leitura relacionada:

por 21.11.2015 / 02:02
0

em vez de executar login imediatamente na inicialização do tty, execute um script como o seguinte:

#!/bin/sh
(   trap '' TTOU
    while   clear
    do      #gen your output
            sleep 2
    done
) & stty -icanon
    dd    count=1 >/dev/null 2>&1
    stty  icanon
    exec  login

... executará o que você colocar no seu loop até que pelo menos um único byte seja lido no tty, quando login será chamado. login sempre começa com HUP em seu controle tty, e assim o processo em background escrevendo sua saída para o terminal irá morrer assim que o fizer, mas até alguém pressionar uma tecla ele continuará a rodar produzindo qualquer saída você deseja. Mesmo que ele possa gravar a saída para seu controle tty a partir do segundo plano, não importa o que seu loop em segundo plano tente fazer, no entanto, ele nunca terá sucesso em ler qualquer entrada dele.

    
por 21.11.2015 / 01:39