Eu preciso conectar na saída do terminal atualmente em execução (tty1) do terminal virtual e capturá-lo (executando o servidor X).
Eu preciso conectar na saída do terminal atualmente em execução (tty1) do terminal virtual e capturá-lo (executando o servidor X).
Respostas:
Me deparei com essa ferramenta chamada ttylog. É um programa Perl disponível no CPAN aqui . Ele tem algumas ressalvas, uma delas que eu só conseguia descobrir como conectar a um terminal que foi criado como parte de alguém que está entrando na minha caixa. O outro é que você precisa executá-lo com privilégios elevados (ou seja, root ou sudo).
Mas funciona!
Primeiro ssh em sua caixa no TERMO 1:
TERM#1% ssh saml@grinchy
Observe o tty deste novo terminal:
TERM#1% tty
/dev/pts/3
Agora em outro terminal (TERM # 2), execute este comando:
TERM#2% ttylog pts/3
DEBUG: Scanning for psuedo terminal pts/3
DEBUG: Psuedo terminal [pts/3] found.
DEBUG: Found parent sshd pid [13789] for user [saml]
Agora volte para o TERM # 1 e digite material, ele aparecerá no TERM # 2.

Todos os comandos que tentei (top, sl, etc.) funcionaram sem incidentes ttylog.
gdbfoi a primeira opção que me deparei, eu a usei no passado, mas é hacky, pelo menos para mim. Fico feliz que isso ajudou você!
De fato é. Os dispositivos / dev / vcs * e / dev / vcsa * correspondem aos dispositivos / dev / tty * (os terminais virtuais). F1 = tty1 = vcs1 / vcsa1 e assim por diante. O vcs / vcsa é como tty para o terminal virtual "atual".
Como root, você pode simplesmente catear esses dispositivos (por exemplo, cat / dev / vcs2) e ver o que está no VT correspondente (por exemplo, / dev / tty2 ou o F2) como tirar uma foto instantânea. vcsa * difere de vcs * por incluir informações sobre as dimensões do terminal (a tela). Lembre-se, é apenas um instantâneo bruto dos personagens, como eles aparecem na tela - coletados a partir da memória alocada no terminal -, portanto, não espere resultados agradáveis e facilmente analisáveis.
A desvantagem é que, se as informações passarem rápido demais, pode ser difícil capturá-las. Talvez tail -f / dev / vcs1 funcione, se você precisar seguir vários screenfulls (ainda não tentei)? Pode ser mais fácil simplesmente redirecioná-lo para um arquivo primeiro. Também pode ser uma boa ideia usar um VT (F1-F6) para examiná-lo, pois os terminais terão as mesmas dimensões. Na minha experiência, é melhor usar os dispositivos vcs * - não os vcsa * -.
Se isso não funcionar, talvez um dos pacotes "big brotherish" que permite que um administrador fique de olho na atividade em um terminal possa funcionar.
PS: Esqueci de perguntar qual sistema operacional você usa. Isso é para Linux, embora dispositivos semelhantes provavelmente existam em outros sistemas operacionais também. Tente pesquisar por "memória do console virtual" entre as páginas de manual dos dispositivos.
wlan0, na verdade, tenho uma situação catch-22 tentando depurar onde esse script está falhando. Suponha que eu não possa usar um hub usb ... existe uma maneira de canalizar caracteres para / dev / tty1 de alguma forma?
/dev/tty1como root, mas tudo isso faz é exibir os caracteres para a tela, não inseri-los
Use o ttycomando em cada terminal para identificá-los:
$ tty
/dev/pts/0
$ tty
/dev/pts/1
Supondo que esses TTYs, para redirecionar o stdout do primeiro para o segundo, execute isso no primeiro terminal:
exec 1>/dev/pts/1
Nota: Agora toda saída de comando será exibida em pts / 1
Para restaurar o comportamento padrão stdout de pts / 0:
exec 1>/dev/pts/0
Veja este vídeo para uma demonstração.
Isso funcionou para mim:
Usando um teclado no computador "A" (ou seja, o computador físico a ser controlado), execute: screen -q
Conecte-se sshdo computador "B" ao computador "A".
Na sessão ssh, digite: screen -lspara obter um ID de sessão ao qual se conectar (4 dígitos na linha que contém tty ).
Conecte-se à sessão acima com: screen -x <session id>... usando o número de identificação da sessão recebido do screen -lscomando acima.
Qualquer coisa digitada em qualquer "sessão" acontecerá nas duas "sessões"; portanto, por exemplo, a digitação screen -dencerrará AMBAS as sessões.
Outra abordagem é usar o screenutilitário gnu na sua máquina local. Chame-o com a -Lopção ou inicie sem essa opção e use a ^aHsequência de comandos. Qualquer uma das abordagens faz com que todas as entradas e saídas sejam registradas em um arquivo chamado screenlog.xonde x é o número da tela.
Isso é útil, pois nada mais precisa ser instalado na máquina remota.
Como não iniciei o tty1 com tela, este script ajudou:
Eu usei a resposta de Baard Kopperud acima. "128" é uma linha do meu tty1. O sono pode ser definido como um número apropriado.
#!/bin/bash
while true
do
sudo tail -c 128 /dev/vcs1 && echo ""
sleep 10
done
Eu usei isso no terminador e dimensionei a coluna para que o pergaminho seja uma linha de texto.
Abra dois terminais. Digite ttycada um e você obterá o ID como/dev/pts/nº
Então no primeiro você digita script -f /dev/pts/nºofSecondTerminale no segundo você faz o oposto script -f /dev/pts/nºofFirstTerminalpara que eles fiquem ligados
Parabéns! Ambos os terminais emitem e recebem o mesmo material. Precisa de um terço? Bem, você estudou combinações? Você precisará de 6 script -fcomandos. Ainda mais tty? Em breve...
screenoutmuxantes de iniciar um comando que você possa acessar de outro terminal .