Necesito conectarme a la salida del terminal que se está ejecutando actualmente (tty1) desde el terminal virtual y capturarlo (ejecutar el servidor X).
Necesito conectarme a la salida del terminal que se está ejecutando actualmente (tty1) desde el terminal virtual y capturarlo (ejecutar el servidor X).
Respuestas:
Me encontré con esta herramienta llamada ttylog
. Es un programa Perl disponible en CPAN aquí . Tiene un par de advertencias, una de ellas es que solo pude descubrir cómo conectarme a una terminal que fue creada como parte de alguien que entra en mi caja. El otro es que debe ejecutarlo con privilegios elevados (es decir, root o sudo).
¡Pero funciona!
Primero ssh en su caja en el TÉRMINO # 1:
TERM#1% ssh saml@grinchy
Tenga en cuenta este nuevo terminal tty:
TERM#1% tty
/dev/pts/3
Ahora en otra terminal (TERM # 2) ejecuta 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]
Ahora regrese al TÉRMINO # 1 y escriba cosas, aparecerá en el TÉRMINO # 2.
Todos los comandos que probé (top, ls, etc.) funcionaron sin incidentes ttylog
.
gdb
fue la primera opción con la que me encontré, la he usado yo mismo en el pasado, pero al menos para mí es hacky. ¡Me alegra que esto te haya ayudado!
De hecho, es. Los dispositivos / dev / vcs * y / dev / vcsa * corresponden a los dispositivos / dev / tty * (los terminales virtuales). F1 = tty1 = vcs1 / vcsa1 y así sucesivamente. El vcs / vcsa es como tty para el terminal virtual "actual".
Como root, puede simplemente conectar estos dispositivos (p. Ej. Cat / dev / vcs2) y ver qué hay en el VT correspondiente (p. Ej. / Dev / tty2 el encendido en F2) como tomar una instantánea. vcsa * difiere de vcs * en que incluyen información sobre las dimensiones del terminal (la pantalla). Eso sí, es solo una instantánea de los personajes tal como se muestran en la pantalla, reunidos de la memoria asignada al terminal, por lo que no esperes una salida agradable y fácil de analizar.
El inconveniente es que si la información pasa demasiado rápido, puede ser difícil capturarla. ¿Quizás tail -f / dev / vcs1 funcionará si necesita seguir varios screenfulls (no lo he probado)? Puede ser más fácil simplemente redirigirlo primero a un archivo. También puede ser una buena idea usar un VT (F1-F6) para verlo, ya que los terminales tendrán las mismas dimensiones. En mi experiencia, es mejor usar los dispositivos vcs *, no vcsa *.
Si eso no funciona, quizás funcione uno de los paquetes de "gran hermandad" que permite que un administrador vigile la actividad en un terminal.
PD: Olvidé preguntar qué sistema operativo usas. Esto es para Linux, aunque probablemente también existan dispositivos similares en otros sistemas operativos. Intente buscar "memoria de consola virtual" entre las páginas de manual para dispositivos.
wlan0
, en realidad tengo una situación de atrapar 22 tratando de depurar dónde falla este script. Supongamos que no puedo usar un hub usb ... ¿hay alguna forma de canalizar caracteres en / dev / tty1 de alguna manera?
/dev/tty1
como root, pero todo esto es mostrar los caracteres en la pantalla, no ingresarlos
Use el tty
comando en cada terminal para identificarlos:
$ tty
/dev/pts/0
$ tty
/dev/pts/1
Suponiendo estos TTY, para redirigir el stdout del primero al segundo, ejecute esto en el primer terminal:
exec 1>/dev/pts/1
Nota: Ahora cada salida de comando se mostrará en pts / 1
Para restaurar el comportamiento predeterminado stdout de pts / 0:
exec 1>/dev/pts/0
Vea este video para una demostración.
Esto funcionó para mí:
Usando un teclado en la computadora "A" (es decir, la computadora física que se va a controlar), ejecute: screen -q
Conéctese ssh
desde la computadora "B" a la computadora "A".
En la sesión ssh, escriba: screen -ls
para obtener una identificación de sesión para conectarse (4 dígitos en la fila que contiene tty ).
Conéctese a la sesión anterior con: screen -x <session id>
... utilizando el número de identificación de sesión recibido del screen -ls
comando anterior.
Todo lo que se escriba en cualquiera de las "sesiones" ocurrirá en ambas "sesiones", por lo que, por ejemplo, al escribir screen -d
se cerrarán AMBAS sesiones.
Otro enfoque es utilizar la screen
utilidad gnu en su máquina local. Invoque con la -L
opción, o comience sin esa opción y use la ^aH
secuencia de comandos. Cualquiera de los dos enfoques hace que todas las entradas y salidas se registren en un archivo llamado screenlog.x
donde x es el número de pantalla.
Esto es útil porque no es necesario instalar nada adicional en la máquina remota.
Como no comencé tty1 con la pantalla, este script ayudó:
Utilicé la respuesta de Baard Kopperud arriba. "128" es 1 línea de mi tty1. El sueño se puede establecer en un número apropiado.
#!/bin/bash
while true
do
sudo tail -c 128 /dev/vcs1 && echo ""
sleep 10
done
Usé esto en terminador y dimensioné la columna para que el desplazamiento sea una línea de texto.
Abrir dos terminales. Escriba tty
cada uno y obtendrá su identificación como/dev/pts/nº
Luego, en el primero escribes script -f /dev/pts/nºofSecondTerminal
y en el segundo haces lo contrario script -f /dev/pts/nºofFirstTerminal
para que se vinculen
Felicidades! Ambas terminales emiten y reciben las mismas cosas. ¿Necesitas un tercero? Bueno, ¿has estudiado combinaciones? Necesitarás 6 script -f
comandos. ¿Aún más tty? Pronto...
screen
otmux
antes de comenzar un comando al que desee acceder desde otro terminal .