¿Cómo mostrar commands en una terminal diferente?

Tengo un pi de raspberry con una pantalla adjunta. Se inicia con un aviso de inicio de session. No tengo keyboard ni mouse conectado y me gustaría mantenerlo así. Procuro iniciar session a través de ssh desde la networking, pero me gustaría ver los commands que ingresé a través de ssh y su salida en la pantalla adjunta. ¿Sería esto posible?

No estoy seguro de si podría haber una solución más "directa" que solo networkingireccionara las inputs y salidas, pero logré hacer algo como esto usando la pantalla . La idea es hacer todo tu trabajo dentro de una session de screen y adjuntar dos veces a la session, una desde tu terminal SSH en funcionamiento y otra desde la pantalla adjunta.

Primero, necesitará saber el nombre de la terminal para la pantalla adjunta. No tengo un rPI para probar, pero supongo que la pantalla directamente conectada se asigna a la console de video regular de Linux, por lo que probablemente sea /dev/tty1 .

  1. Asegúrate de que la screen esté instalada
  2. Inicia session con SSH
  3. Crear una nueva session de pantalla

     screen 
  4. Adjunte a la misma session de pantalla desde la otra terminal.

    La forma en que se pretende utilizar esta function es que inicie session usando un keyboard local y escriba screen -r -x (para -r session de reanudación y -x multi-attach en una session existente) pero en este caso no lo está En realidad, ha iniciado session en la terminal desde la que desea adjuntar a la session. Así que networkingirigimos la input y la salida al terminal deseado para "convencer" a la pantalla que es el terminal desde el que queremos adjuntar. Es hackish, pero funcionó para mí.

     screen -r -x </dev/tty1 >/dev/tty1 2>&1 & disown 

Si el nombre de la terminal para la console de video del rPI no es /dev/tty1 sino otra cosa, puede averiguar qué es conectando un keyboard por una vez e iniciando session localmente y escribiendo tty en el indicador.

Interesante, también pensé en la screen -x o tmux attach como la solución de Celada, pero preferiría configurar init (en /etc/inittab o /etc/init o /etc/systemd ) o supervisor para lanzar automáticamente un getty-on- session de pantalla en el arranque.

Configuración de trabajo para el supervisor:

 [program:screen] command=bash -c 'chvt 9 && TERM=linux exec screen getty tty </dev/tty9 >/dev/tty9 2>&1' autostart=true autorestart=true 

Cambia automáticamente a /dev/tty9 y /dev/tty9 pantalla ejecutando getty para mostrar la request de inicio de session. Desde otras sesiones de ssh, puede ejecutar sudo screen -x para adjuntarlo a esta console, luego presione Ctrl + A D para desconectarse de la session.

Necesita el privilegio de root para adjuntar la session de la pantalla porque la ejecuta la raíz. Es posible que desee habilitar el modo multiusuario de la pantalla, pero necesita setuid en /usr/bin/screen que causa algunos problemas de security. Consulte el manual de la pantalla para más detalles.

Si tienes instalado xterm en el pi , debería haber incluido la luit UTF-8 del terminal luit , que es un pequeño progtwig que a menudo se usa para traducir para otros types de aplicaciones de terminal que no son compatibles con UTF-8. luit funciona asignando un pseudo-terminal, de forma similar a como lo hace la screen pero con mucho less sobrecarga.

Algo que luit puede hacer muy fácilmente es copyr la input (o salida, que puede ser diferente) a algún file especificado a medida que llega. luit embargo , la input a luit (como el maestro de terminal) significa que la salida de la session del terminal (incluso posiblemente incluye su propia salida de stty echo ) y la salida significa todo lo que escribiría en un dispositivo terminal después de procesar toda la salida de la session del terminal. Hace esto mientras copy su input stdin (que debe provenir de un terminal, y por lo tanto significa su keyboard) al progtwig que envuelve, como un shell. Sé que PTY I / O puede ser un poco extraño, pero el hecho es que puede ser un medio conveniente para duplicar la salida de una session de terminal en múltiples dispositivos de visualización en time real.

Por ejemplo:

 ssh me@machine -t 'luit -olog /dev/tty2 sh' 

Acabo de ejecutar (básicamente) el command anterior desde mi terminal de tableta Android después de cambiar de X a vt2 con CTRL + ALT + F2 en mi computadora de escritorio a un nuevo símbolo de login . El terminal de Android me indicó mi contraseña de la manera habitual, y luego estaba en mi caparazón en la tableta y todo lo que estaba escrito en el terminal de mi tableta (indicaciones, mi input, cat file , etc.) también se mostraba en la pantalla de mi computadora. Cada key que escribí (o toqué o lo que sea) en la tableta se hizo eco instantáneamente en el escritorio vt2.

Para que esto funcione, si su process de generación de tty (generalmente un getty o similar) crea los dispositivos terminales con algún nivel de permiso que su count de usuario no puede cumplir por defecto, tendrá que modificar eso. Puede ser tan simple como:

 chown me /dev/tty[num] 

… si quieres que sea. En mi sistema, mi count de usuario es miembro del grupo tty , por lo que no es un problema. Creo que en la mayoría de las distribuciones de Linux, poner una count de usuario en el grupo tty debería ser suficiente para que funcione.

 ls -l /dev/tty2 crw--w---- 1 root tty 4, 2 Jun 14 05:14 /dev/tty2 

… como puede ver, es un file de dispositivo propiedad de la raíz, pero está designado para el grupo tty .

En cualquier caso, ejecutar el command de luit anterior podría ser todo lo que necesite. Es posible que se tengan soluciones más complejas, y posiblemente deseables, con w / screen , tmux , et al., Pero si lo único que desea hacer es ver el resultado en otro dispositivo, generalmente todo lo que tiene que hacer es escribir en él.