Dependendo do shell, o comando echo pode ou não executar a expansão de barra invertida para transformar \n em uma nova linha. Por exemplo, o bash não é por padrão, mas sim após shopt -s xpg_echo .
Mas mesmo que o echo incorporado em sh realize uma expansão de barra invertida na sua máquina, seu código não será acionado devido a como você escreveu o comando. Você está passando a string echo passw0rdnpassw0rdnn | vncpasswd para o comando su : a segunda aspas duplas terminam o literal de cadeia com aspas duplas e a terceira aspas duplas inicia um novo literal de cadeia com aspas duplas, portanto as sequências \n não estão aspas duplas no shell externo e, portanto, \n expande para n . Você quis escrever algo como
su nonrootuser -c "echo -e 'passw0rd\npassw0rd\nn' | vncpasswd"
para que as barras invertidas sejam passadas literalmente pelos dois shells e com a opção -e passada para echo para que ele execute a expansão da barra invertida.
Mas, em vez de mexer com echo de uma maneira não totalmente portátil, basta chamar printf (que é totalmente confiável) ou executar echo uma vez para cada linha:
su nonrootuser -c "{ echo 'passw0rd'; echo 'passw0rd'; echo n; } | vncpasswd"
su nonrootuser -c "printf '%s\n' 'passw0rd' 'passw0rd' n | vncpasswd"
su nonrootuser -c "
vncpasswd <<EOF
passw0rd
passw0rd
n
EOF"