Depois de uma hora pesquisando no Google, não acredito que ninguém tenha feito essa pergunta antes ...
Então, eu tenho um script em execução no TTY1. Como faço para que esse script inicie algum programa arbitrário no TTY2?
- Eu encontrei
tty
, que diz em qual TTY você está atualmente. - Eu descobri
writevt
, que escreve uma única linha de texto em um TTY diferente. - Eu encontrei
chvt
, que altera qual TTY é exibido atualmente.
Não quero exibir TTY2. Eu só quero que o script principal continue executando normalmente, mas se eu alternar manualmente para o TTY2, posso interagir com o segundo programa.
[command] > /dev/tty2
(você já deve estar logado no tty2)?Respostas:
Enquanto nada mais estiver usando o outro TTY (
/dev/tty2
neste exemplo), isso deve funcionar. Isso inclui umgetty
processo que pode estar esperando alguém entrar; ter mais de um processo lendo sua entrada a partir de um TTY irá levar a resultados inesperados.setsid
cuida de iniciar o comando em uma nova sessão.Observe que
command
será necessário definir asstty
configurações corretamente, por exemplo, ativar o "modo cozido" e,onlcr
para que a saída de uma nova linha adicione um retorno de carro, etc.fonte
/dev/stdin
,/dev/stdout
e/dev/stderr
.ps
mostra facilmente quecommand
não possui um terminal de controle no seu caso.sleep 1000
e ainda não funciona aqui. Eu usei uma pseudo-tty, no entanto (acho que não deveria fazer diferença).setsid sh -c 'exec sleep 1000 <>/dev/pts/4 >&0 2>&1'
em uma janela de emulador de terminal./dev/pts/4
é outra janela do emulador de terminal (mesmo usuário, combash
execução).No segundo tty, normalmente haverá um programa em execução, algum programa de login ou algum shell como o bash. Se você deseja interação, teria que substituir o programa de login pelo seu ou pedir ao shell para executar o programa como se o programa tivesse sido iniciado a partir da linha de comando.
Uma solução mais simples, a IMO, seria iniciar uma
tmux
sessão após fazer login na segunda tela e depois usar:para iniciar o programa na
tmux
sessão que será exibida depois que você alternar para o segundo terminal.fonte
Acabei de fazer uma descoberta:
Como posso iniciar aplicativos de 2 ttys no lançamento?
Um dos comentários menciona algo chamado
openvt
. Este comando parece fazer exatamente o que estou procurando!http://linux.about.com/library/cmd/blcmdl1_openvt.htm
A menos que alguém saiba diferente, acho que essa é provavelmente a maneira "correta" de fazer isso.
(Eu apenas tentei e parece funcionar bem - embora
getty
esteja em execução, ele escolhe o próximo terminal não utilizado. Acho que os VTs não são "abertos" até que você mude para um para tentar fazer login ...)fonte
inicio uma nova sessão gráfica no vt5 com o comando follow
por exemplo :
Se você deseja iniciar um aplicativo gráfico em uma sessão gráfica já ativa, é possível:
fonte