Zombando de um pseudo tty (pts)

4

Gostaríamos de executar alguns aplicativos baseados em curses em segundo plano.

Esses aplicativos usam curses e obtêm o nome atual tty port a ser usado internamente para mapear arquivos de log e outras associações de terminal de contexto.

Em alguns testes, apenas redirecionando a entrada de curses aplicativos que não lêem o teclado para um pts conhecido, funcionou. E assim eles podem ser executados em segundo plano, desde que eu reserve um tty (ou pseudo tty) para isso.

É possível zombar de um tty ou ter um pts reservado para alguns propósitos de execução automática, como esse? Nós planeamos lançá-los através de crontab .

    
por Luciano 08.07.2015 / 23:10

1 resposta

2

Um histórico de conjuntos de ferramentas

O mais antigo instrumento para esse tipo de coisa foi o pacote "pty", de Daniel J. Bernstein, descrito por Rich Salz como "faca Ginsu", que ele escreveu na virada da década de 1990 para trapacear em nethack (sic !) A versão 4 do pacote "pty" foi publicada em 1992 para comp.sources.unix (volume 25, edições 127 a 135). Ainda é localizável na World Wide Web. Paul Vixie descreveu na época:

What can I say? It slices, it dices, it washes dishes, it walks the dog. It "just works", meaning that if you follow the directions you'll get a working package without any pulling of hair or gnashing of teeth or other standard porting activities.

Mais tarde, Bernstein atualizou isso, em algum momento antes ou antes de 1999-04-07, com um pacote "ptyget", que ele anunciou:

I've put together a new pseudo-tty allocator, ptyget. An alpha version is at ftp://koobera.math.uic.edu/pub/software/ptyget-0.50.tar.gz. There's a ptyget mailing list; to join, send an empty message to [email protected]. I designed ptyget's interface from scratch. It's much more modular than pty; the basic pty interface has now been split into three pieces:

  • ptyget: a tiny, low-level program — the only setuid program in the package — that allocates a new pseudo-tty and passes it to the program of your choice
  • ptyspawn: another small program that runs a child process under a pseudo-tty, waiting for it to exit and watching for stops
  • ptyio: another, only slightly larger, program that moves data back and forth

The old Ginsu knife pty is now spelled ptybandage, which is a synonym for ptyget ptyio -t ptyspawn; pty -d, for attaching network programs to pseudo-ttys, is now spelled ptyrun, which is a synonym for ptyget ptyio ptyspawn; and nobuf is a synonym for ptyget ptyio -r ptyspawn -23x. I've split off the session management features into a separate package.

Esse pacote separado era o pacote "sess".

"ptyget" é, incidentemente, notável por exemplificar uma versão muito antiga, e um dos poucos exemplos publicados do próprio sistema de construção "refazer" nunca publicado de Berstein. dependon é um precursor claro para redo-ifchange .

Conjunto de ferramentas disponíveis

Dru Nelson publica a versão "pty" 4 e "ptyget".

Paul Jarc publica uma versão fixa do ptyget, que tenta lidar com o dispositivo pseudo-terminal específico do sistema operacional ioctls no original que os sistemas operacionais atualmente não fornecem mais.

O pacote de código nosh vem com os scripts ptybandange e ptyrun , que usam a ferramenta execline do Laurent Bercot e os comandos de gerenciamento do pseudo-terminal do próprio pacote.

Alguns exemplos usam

Jurjgen Oskam usando ptybandage no AIX para alimentar entrada de um documento aqui para um programa que explicitamente abre e lê seu terminal de controle para um prompt de senha:

$ ptybandage dsmadmc <<EOF >uit.txt
joskam
password
query session
query process
quit
EOF

Andy Bradford usando ptyrun no OpenBSD sob o daemontools e o ucspi-tcp para Torne o programa de controle de roteador interativo bgplgsh acessível através da rede, fazendo com que ele pense que está falando com um terminal:

#!/bin/sh
exec 2>&1
exec envuidgid rviews tcpserver -vDRHl0 0 23 ptyrun /usr/bin/bgplgsh

Leitura adicional

por 10.07.2015 / 12:24