Не может войти в систему в настольную среду после apt upgrade && reboot
: при вводе пароля мерцания экрана в черный экран и возвращается назад к экрану входа в систему. Вход в систему через терминал (Ctrl+Alt+F1) хорошо работает.
/var/log/Xorg.0.log
говорит:
(EE) NVIDIA: Не удалось инициализировать модуль ядра NVIDIA. Посмотрите
(EE) NVIDIA: ядро системы регистрируется для дополнительных сообщений об ошибках и
(EE) NVIDIA: консультируйтесь с README NVIDIA для деталей.
(EE) Никакие устройства обнаруживается.
$ dmesg
говорит:
Nvidia: волшебством версии '4.4.0-116-универсальный SMP mod_unload modversions' должен быть '4.4.0-116-универсальный SMP mod_unload modversions retpoline'
Попытка загрузить драйвер Nvidia вручную перестала работать:
$ sudo modprobe nvidia
modprobe: ERROR: could not insert 'nvidia': Exec format error
Похожие страницы: VirtualBox, не запускающийся после обновления ядра
Проблема с gcc версией, которая не поддерживает retpoline (Что такое retpoline и как это работает?). Посмотрите ошибку Ubuntu: 4.4.0-116 Обновление ядра на 2/21 повреждает драйверы Nvidia (на 14,04 и 16.04).
В моем случае, производя чистку ppa:ubuntu-toolchain-r/test
для установки значения по умолчанию gcc версия и восстанавливающий с DKMS, модуль Nvidia (путем переустановки 4.4.0-116 ядер) решает проблему. См. инструкции, отправленные @cjjefcoat на средстве отслеживания ошибки.
Значение по умолчанию восстановления gcc путем чистки ppa:ubuntu-toolchain-r/test
версия:
$ sudo apt-get install ppa-purge
$ sudo ppa-purge ppa:ubuntu-toolchain-r/test
версия gcc (на Ubuntu 16.04) с поддержкой retpoline:
$ gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
Переустановите ядро:
$ sudo apt-get purge linux-headers-4.4.0-116 linux-headers-4.4.0-116-generic linux-image-4.4.0-116-generic linux-image-extra-4.4.0-116-generic linux-signed-image-4.4.0-116-generic
$ sudo apt-get install linux-generic linux-signed-generic
Проверка модуль Nvidia:
$ modinfo nvidia_xxx -k 4.4.0-116-generic | grep vermagic
vermagic: 4.4.0-116-generic SMP mod_unload modversions retpoline
замена _xxx
с Вашей версией - просто нажимают TAB после modinfo nvidia
retpoline
должен быть в выводе.
После этого reboot
завершенный успешно.
Если у Вас уже есть совместимая gcc версия, Вы могли бы восстановить использование модуля Nvidia dkms
команда, не переустанавливая ядро:
# dkms remove nvidia-xxx/yyy.zzz -k 4.4.0-116-generic
# dkms install nvidia-xxx/yyy.zzz -k 4.4.0-116-generic
Я решил переустановить ядро вместо этого для обновления всех модулей, которые были восстановлены с DKMS использование несправедливости gcc версия.
Я не знаю, просят ли, чтобы Ubuntu была корректным местом для того дерьма, но — поскольку мне нужно новый g++
и все еще периодически ядро обновления — я записал сценарий удара тот (1) чистки ppa:ubuntu-toolchain-r/test
, (2) восстанавливает все DKMS-модули для выбранных ядер, (3) установки g++-7
назад — на этот ответ.
Сценарий предоставлен, "как", без гарантий любого вида.
Не используйте его, если Вы не понимаете значение каждой строки.
Это предназначается для того, чтобы сэкономить время при выполнении вещей, которые Вы можете сделать вручную (не для того, чтобы сделать "волшебство", которое Вы не понимаете).
Сценарий:
#!/bin/bash -e
for list in /etc/apt/sources.list.d/ubuntu-toolchain-r*.list; do
sudo cp -a "$list" "$list.backup"
echo "Backed up $list to $list.backup"
done
sudo ppa-purge ppa:ubuntu-toolchain-r/test
readarray -t kernels < <(ls -1 /lib/modules)
echo "Kernels: ${kernels[*]}"
for kernel in "${kernels[@]}"; do
dkms_modules=($(sudo dkms status -k "$kernel" | sed -r 's#^([^,]+), ([^,]+), .*$#\1/\2#'))
while true; do
echo
read -p "Reinstall DKMS-modules (${dkms_modules[*]}) on kernel $kernel? [Y/n] " choice
if [ "${choice^^}" = N ]; then continue 2; fi
if [ "${choice^^}" = Y ] || [ -z "$choice" ]; then break; fi
echo "Expected 'y', 'n' or '', but got '$choice'"
done
echo
for dkms_module in "${dkms_modules[@]}"; do
sudo dkms remove -k "$kernel" "$dkms_module"
sudo dkms install -k "$kernel" "$dkms_module"
done
echo
for module in /lib/modules/"$kernel"/updates/dkms/*.ko; do
vermagic="$(modinfo -F vermagic $module)"
echo -n "Vermagic for $(basename ${module%.ko}): $vermagic -- "
fgrep -q retpoline <<<"$vermagic" && echo ok || echo "'retpoline' is missing!!!"
done
done
for list in /etc/apt/sources.list.d/ubuntu-toolchain-r*.list; do
sudo mv "$list.backup" "$list"
echo "Restored $list from $list.backup"
done
sudo apt update
sudo apt install g++-7
sudo apt dist-upgrade