Frequentemente estou dirigindo algum programa infantil, enquanto trabalho. Para fazer isso, preciso estender a tela para a tv, alterar o coletor de áudio, etc. E mover a janela do mplayer da tela principal para a desejada + tornar essa janela fixa. Eu sei como fazer tudo isso e posso escrever esse roteiro. Mas para fazer tudo isso, preciso do PID para o MPlayer que acabou de ser executado. No entanto, se eu executar o MPlayer de dentro do script bash mplayer ... &
, posso obter o PID $!
, mas perco a capacidade de controlar o mplayer quando o script termina. Eu sei sobre a possibilidade de executar o mplayer via -slave
opção, mas gostaria de controlá-lo da mesma maneira como se você iniciasse o MPlayer normalmente.
Alguém sabe como invocar o MPlayer no script bash, ser capaz de obter seu PID e controlar o MPlayer por meio da interação normal do console do MPlayer quando o script termina?
Também estou aberto a outras soluções, mas essencialmente preciso iniciar o mplayer de alguma forma primeiro e, em seguida, obter seu PID para poder executar os comandos pacmd e wmctrl, e tudo isso sem alterar o comportamento do mplayer executado.
O script abaixo executa o seguinte procedimento:
/dev/null
, para que nenhum processo (incluindo filhos futuros) use o original por padrão. Observe que os processos que acessam/dev/tty
diretamente (por exemplo ,sudo
solicitando uma senha) ainda podem interferir.mplayer
em segundo plano com stdin redirecionado para o original. Desta forma, é o único processo que o utiliza. Os argumentos da linha de comando são passados como estão.mplayer
sair.Se
mplayer
sair prematuramente, o script nunca passará de "esperar pela janela certa". Portanto, é bom executar algumas etapas em um subshell em segundo plano. Aomplayer
sair, o script principal não deve permitir que o subshell sobreviva.O script se comportará mal se o controle de trabalho estiver ativado, portanto, não o obtenha de um shell com controle de trabalho. Se originado, também pode
kill
mais do que você espera. Você deve executar o script como um executável autônomo.