Resposta para a questão principal:
Este script simples é executado na inicialização da sessão, em seguida, inicia o servidor vnc, que inicia uma nova sessão e, nessa sessão, o upstart inicia esse script novamente. Tantas instâncias do Xvnc chamadas recursivamente. Eu fiz algumas adições ao script:
start on startup
script
if [ -z "$(ps -e | grep Xvnc)" ]; then
/usr/bin/vncserver
fi
end script
agora funciona bem e traz apenas uma sessão.
O erro de segfaultainda existe, mas o problema principal está resolvido.