Inicia um processo em um tty diferente

30

Após cerca de uma hora pesquisando sobre isso, não consigo acreditar que ninguém tenha feito essa pergunta antes ...

Portanto, tenho um script em execução no TTY1. Como faço esse script lançar algum programa arbitrário no TTY2?

  • Encontrei tty , que informa em qual TTY você está no momento.
  • Encontrei writevt , que escreve uma única linha de texto em um TTY diferente.
  • Encontrei chvt , que altera qual TTY está sendo exibido atualmente.

Eu não quero exibir TTY2. Eu só quero que o script principal continue sendo executado normalmente, mas se eu alternar manualmente para o TTY2, eu posso interagir com o segundo programa.

    
por MathematicalOrchid 26.11.2014 / 14:34

5 respostas

29
setsid sh -c 'exec command <> /dev/tty2 >&0 2>&1'

Contanto que nada mais esteja usando o outro TTY ( /dev/tty2 neste exemplo), isso deve funcionar. Isso inclui um processo getty que pode estar aguardando que alguém faça o login; ter mais de um processo lendo sua entrada de um TTY irá levar a resultados inesperados.

setsid cuida de iniciar o comando em uma nova sessão.

Observe que command terá que configurar corretamente as configurações de stty , por exemplo, ative o "modo cozido" e onlcr para que a saída de uma nova linha adicione um retorno de carro, etc.

    
por 26.11.2014 / 15:30
6

No segundo tty, normalmente haverá um programa em execução, algum programa de login ou algum shell como o bash. Se você quer interação, você teria que substituir o programa de login pelo seu, ou dizer ao shell para rodar o programa como se o programa tivesse sido iniciado a partir da linha de comando.

Uma solução mais simples, IMO, seria iniciar uma sessão tmux depois de fazer o login na segunda tela e depois usar:

tmux send yourcommand ENTER

para iniciar o programa na sessão tmux , que será exibida depois que você alternar para o segundo terminal.

    
por 26.11.2014 / 15:07
2

Acabei de fazer uma descoberta:

Como posso iniciar aplicativos a partir de 2 ttys no lançamento?

Um dos comentários menciona algo chamado openvt . Este comando parece fazer exatamente o que eu estou procurando!

link

A menos que alguém saiba diferente, acho que isso é provavelmente a maneira "correta" de fazer isso.

(Eu apenas tentei, e parece funcionar bem - mesmo que getty esteja rodando, ele escolhe o próximo terminal não usado. Eu acho que os VTs não são "abertos" até que você mude para um para tentar logar em ...)

    
por 27.11.2014 / 10:21
0

Eu inicio uma nova sessão gráfica no vt5 com o seguinte comando

xinit "/usr/bin/<binary_executable>" -- :1 vt5

por exemplo:

xinit "/usr/bin/playonlinux" -- :1 vt5

Se você deseja iniciar um aplicativo gráfico na sessão gráfica já ativa, você pode fazer com:

DISPLAY=:0 "/usr/bin/playonlinux"
    
por 10.08.2017 / 05:22
0

Se você quiser fazer isso em um serviço systemd, consulte o link e / ou link

    
por 11.04.2018 / 15:02

Tags