Después de aproximadamente una hora de buscar en Google esto, no puedo creer que nadie haya hecho esta pregunta antes ...
Así que tengo un script ejecutándose en TTY1. ¿Cómo hago para que ese script inicie algún programa arbitrario en TTY2?
- Encontré
tty
, que te dice en qué TTY estás actualmente. - Encontré
writevt
, que escribe una sola línea de texto en un TTY diferente. - Encontré
chvt
, que cambia qué TTY se muestra actualmente.
No quiero mostrar TTY2. Solo quiero que el script principal continúe ejecutándose normalmente, pero si cambio manualmente a TTY2 puedo interactuar con el segundo programa.
[command] > /dev/tty2
(ya debe iniciar sesión en tty2)?Respuestas:
Mientras nada más esté usando el otro TTY (
/dev/tty2
en este ejemplo), esto debería funcionar. Esto incluye ungetty
proceso que puede estar esperando que alguien inicie sesión; tener más de un proceso de lectura de su entrada desde un TTY será conducir a resultados inesperados.setsid
se encarga de iniciar el comando en una nueva sesión.Tenga en cuenta que
command
tendrá que ocuparse de configurar losstty
ajustes correctamente, p. Ej., Active el "modo cocinado" y, de esteonlcr
modo, al generar una nueva línea se agregará un retorno de carro, etc.fuente
/dev/stdin
,/dev/stdout
y/dev/stderr
.ps
muestra fácilmente quecommand
no tiene un terminal de control en absoluto en su caso.sleep 1000
y todavía no funciona aquí. Sin embargo, usé un pseudo tty (no debería hacer una diferencia, supongo).setsid sh -c 'exec sleep 1000 <>/dev/pts/4 >&0 2>&1'
en una ventana de emulador de terminal./dev/pts/4
es otra ventana del emulador de terminal (mismo usuario, conbash
ejecución).En el segundo tty normalmente habrá un programa en ejecución, ya sea algún programa de inicio de sesión o algún shell como bash. Si desea interactuar, deberá reemplazar el programa de inicio de sesión con el suyo o indicarle a un shell que ejecute el programa como si el programa se iniciara desde la línea de comandos.
Una solución más simple, IMO, sería iniciar una
tmux
sesión después de iniciar sesión en la segunda pantalla y luego usar:para iniciar el programa en la
tmux
sesión que se mostrará después de cambiar al segundo terminal.fuente
Acabo de hacer un descubrimiento:
¿Cómo puedo iniciar aplicaciones desde 2 ttys en el lanzamiento?
Uno de los comentarios menciona algo llamado
openvt
. ¡Este comando parece hacer exactamente lo que busco!http://linux.about.com/library/cmd/blcmdl1_openvt.htm
A menos que alguien sepa algo diferente, creo que esta es probablemente la forma "correcta" de hacerlo.
(Acabo de probarlo y parece funcionar bien, aunque se
getty
está ejecutando, elige el siguiente terminal no utilizado. Supongo que los VT no se "abren" hasta que cambie a uno para intentar iniciar sesión ...)fuente
Comienzo una nueva sesión gráfica en el vt5 con el siguiente comando
por ejemplo :
Si desea iniciar una aplicación gráfica en una sesión gráfica ya activa, puede hacerlo con:
fuente