Eu tenho um aplicativo de web cam no Linux. Quando inicia, inicializa a webcam e a imagem é exibida ao vivo em uma nova janela dentro do startx. Alguns cálculos serão realizados também e o resultado será exibido na janela. Existem também alguns botões na janela para o usuário ajustar as configurações.
Agora eu gostaria que o programa fosse iniciado automaticamente (começando a web cam) toda vez que o Linux fosse iniciado. O problema é que, se eu colocar o programa em scripts como /etc/rc.local e executar como plano de fundo, o programa não poderá ser executado, pois a exibição X não existe. Além disso, gostaria de permitir que os usuários vissem a imagem ao vivo e processassem os resultados sob demanda. Agora chego a algumas soluções possíveis:
(1) Use algum método (como VNCserver) para iniciar o servidor X sem exibi-lo na tela e, em seguida, redirecione a exibição para o servidor e execute o programa. Quando o usuário deseja ver a imagem ao vivo e os resultados processados, eles iniciam o cliente VNC para visualizá-lo.
(2) Use algum método para redirecionar a exibição para um servidor X fictício, para que o programa possa ser iniciado sem erros. Mas, então, é necessário que haja algum método para o usuário invocar o programa, herdar as informações do processo de execução, para ver a imagem ao vivo e os resultados processados sob demanda.
(3) Modifique o programa para que, se a exibição não suportar janelas X, a parte de exibição seja ignorada. O mesmo que (2), deve haver algum método para o usuário invocar o programa, herdar as informações do processo de execução, de modo a ver a imagem ao vivo e os resultados processados sob demanda.
(4) Modifique o programa e divida-o em dois programas, para que o que roda automaticamente lide com a inicialização da webcam, receba os dados da imagem e realize o cálculo, enquanto o outro programa obtém os dados da imagem e os resultados processados (via Memória compartilhada IPC, por exemplo), e quando invocado pelo usuário, ele exibe o resultado em uma janela no X.
Embora eu acredite que (1) e (4) são viáveis, que tal (2) e (3)? E entre as soluções possíveis, qual será a melhor?