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 .