Aguarde o processo forked abrir uma janela

3

Estou tentando criar um script como o seguinte:

st -n dropdown &
pid=$(xdotool search --classname dropdown)

st é um emulador de terminal

Estou tentando executar alguns comandos na st criada usando o xdotool. Infelizmente, os comandos após st -n dropdown & são executados antes que o terminal st real seja iniciado, portanto, não há pid. Eu posso sempre colocar sleep 0.1 depois, mas há instâncias (em máquinas mais antigas, por exemplo), onde levará mais de 0,1 segundos para o terminal começar. Existe uma maneira de esperar o terminal iniciar antes de executar o restante do script?

O comando wait não funciona porque aguarda o processo terminar, o que no caso de st é quando é eliminado, o que não é o que eu quero.

    
por Kalq 28.02.2017 / 20:09

1 resposta

3

xtoolwait é um utilitário que inicia um aplicativo X e aguarda até que ele tenha mapeado sua janela. Em seguida, ele retorna o controle para a sessão original do shell.

Geralmente é usado a partir do arquivo .xinitrc ou .xsession .

Você pode usá-lo no seu script da seguinte forma:

xtoolwait st -n dropdown
pid=$(xdotool search --classname dropdown)

O segundo comando não iniciará a execução até que xtoolwait detecte que st mapeou sua janela. Observe a falta de & na primeira linha (não é necessário). Isso pode oferecer um atraso suficiente para o segundo comando encontrar o PID corretamente.

    
por 28.02.2017 / 22:31