Проблема была в кратце такова, что при нормальной загрузке Ubuntu моментально подвисала, как только показывалось графическое окно login. В то же время, если сначала загрузиться в recovery mode, а потом запустить графическую оболочку (startx), то всё работало нормально.
Напрашивается вывод, что при recovery mode Ubuntu не загружает некоторые модули, которые возможно конфликтуют с gdm. Как это выяснить?
Прежде всего загружаемся в recovery mode и из-под roota выполняем команду
sysvconfig
Там весь список загружаемых модулей. Убираем на время gdm. Сохраняем, выходим. Теперь при нормальной загрузке, компьютер не будет виснуть и мы сможем посмотреть какие модули им загружены.
Теперь всё в той же root консоли набираем
dmesg > /home/[ваш username]/failsafe.log
что сохранит лог загрузки в файл.
Также устанавливаем хороший diff'ер
apt-get install meld
Теперь можем спокойно перезагрузиться в нормальном режиме.
Так как мы в самом начале отключили загрузку gdm, то после перезагрузки мы снова в консоли. Нужно залогиниться и выполнить аналогичную команду, чтоб записать лог загрузки.
dmesg > /home/[ваш username]/normal.log
Осталось только сравнить эти два лога. Я использовал удобство gdm,- загрузился туда через recovery mode, сравнил через meld эти 2 файла (!! meld сравнивает посимвольно а не построчно, поэтому различия в начале строк, которые являются временем загрузки не сильно волновали !!). В файлах явно читались названия модулей подгружаемых при обычном старте и игнорируемых в recovery mode. У меня это были bluetooth и powernowd. Поэтому, снова запустив sysvconfig, отключил bluetooth, powernowd и powernowd.early, не забыл включить gdm и перезагрузился в нормальном режиме.
Теперь всё работает.