Java has Rectangle class to capture screenshots, so I am using it to capture the screen which occurs in front of me as desktop. I think most probably we will be using it for screenshot of an X session.
Pode haver várias sessões X (ou nenhuma) e, em qualquer caso, o seu processo não está associado a nenhuma delas, por isso é difícil dizer como pode ser considerado ter alguma tela capturar. Só porque está sendo executado em um sistema que possui um monitor físico conectado, não significa que o processo esteja sendo executado no monitor. Está rodando em segundo plano do sistema.
Se você tem um meio de garantir que o processo está sendo executado em uma sessão X, você deve explicar o que é isso - isso não acontece automaticamente. Além disso:
# Required-Start: $remote_fs $syslog $local_fs $network
Nada disso inclui nada sobre o X, e muito provavelmente este serviço será iniciado antes de qualquer GUI rodando (tendo em mente que uma tela inicial é apenas uma imagem, não uma GUI). Sendo esse o caso, as partes dele que exigem essa interface falharão.
Supondo que você esteja usando um gerenciador de exibição, você vai querer ver como o sistema init agendou seu processo em relação a isso e definir seus pré-requisitos para que ele seja iniciado após o DM.