Se o seu aplicativo não for interativo, você poderá iniciar um servidor X11 virtual e definir a variável DISPLAY para o seu aplicativo para usá-lo.
Possíveis servidores X11 que podem ser usados dessa maneira são:
O último permite que você se conecte mais tarde para ver e interagir com a tela com um cliente VNC (vncviewer).
Se o seu Raspberry pi (ou similar) estiver configurado para login automático no usuário pi
em um ambiente gráfico, você poderá iniciar seu aplicativo como o usuário pi
e usar a exibição :0
. Tenha em atenção que tem de se certificar de que o X11 concluiu a sua inicialização antes de o fazer.
Edit: Parece que sua configuração está iniciando um servidor Xvnc primeiro, pois o usuário pi
está iniciando o servidor X principal do buffer de quadros como o usuário root
. Nesse caso, como você descobriu, seu aplicativo deve ser iniciado como root
e usando :1
como exibição.
Como alternativa, se o que você realmente deseja é não iniciar o aplicativo uma vez no momento da inicialização, mas sempre que um usuário (normalmente pi
) efetua login em um ambiente gráfico, inclua-o no arquivo rc aplicável a esse ambiente gráfico. Por exemplo, /etc/xdg/lxsession/LXDE-pi/autostart
.