Quando acontecer novamente, vá ao modo texto CTRL+ALT+F*¹, e digite:
echo $DISPLAY
Com o número que retornar, você aplica este comando.
export DISPLAY=:N²;gnome-shell --replace&
Depois volte para o modo gráfico CTRL+ALT+F*¹
¹ - A dica serve para qualquer distribuiçao, por isto não estou colocando CTRL+ALT+F1, no Fedora 19 por exemplo para acessar o modo texto
usa-se CTRL+ALT+F2, e o modo gráfico CTRL+ALT+F1, no ubuntu teoricamente texto=CTRL+ALT+F1 e gráfico=CTRL+ALT+F7.
² - N = Número do display retornado com o comando echo.
Boa sorte fica de referência para o futuro, lembrando que este procedimento é para eventuais falhas e após o salvamento do trabalho é bom reiniciar o gdm, pois por este método você não conseguira desligar nem reiniciar o computador pela interface tendo que fazer isto pelo console de onde executou o comando ou abrindo um terminal e digitando como superusuário shutdown -r now, os comandos para reiniciar o gdm são /etc/init.d/gdm restart, invoke.rc.d gdm restart, service gdm restart e caso esteja utilizando systemd, systemctl restart gdm, em algumas distribuições
Ubuntu normal por exemplo substitua gdm por lightdm ou gdm3 no caso do Debian.
PS:Quando seu gnome-shell travar, pegue o log da sessão .xsession-errors e verifique se ocorreu algo de estranho, não sei a quantas anda o suporte do gnome-shell no ubuntu 12.04 pois não cheguei a utilizá-lo por mais de 1 mês, mas na época que usei não tive travamentos constantes como você está tendo, muito pelo contrário era muito estável, mas como sigo o desenvolvimento do gnome sempre utilizo a versão mais recente.