Seu script não verifica se o X já está em execução.
Solução alternativa:
if [ -e /tmp/.X0-lock ]; then
XPID=$(cat /tmp/.X0-lock)
if ps -p $XPID >/dev/null; then
echo "X already running"
else
rm /tmp/.X0-lock
startx
fi
fi
cd /home/user1/Documents/ProgramFile
./myProgram.sh
No entanto, eu faria algo assim:
# /etc/inittab
3:2345:respawn:/bin/login -f username tty3 < /dev/tty3 > /dev/tty3 2>&1
e
# /home/username/.bashrc
if [ -z "$DISPLAY" ] && [ $(tty) == /dev/tty3 ]; then
startx -- :0 -quiet -logverbose 11
cd /mydir
./myprog
fi
Então você gera automaticamente um shell no tty3. Supondo que o bash é o seu shell atual, o bash verifica se ele é executado no tty3 e, em seguida, executa suas coisas.