Чиним Plymouth в Debian 8 (а возможно и еще где-то)
TL; DR Захотелось поставить на старый нетбук Debian 8, сказано — сделано. В целом все работает, но вот вместо красивой заставки при загрузке — бегущие строки загрузки ядра и сервисов. Не красиво. В чем же проблема? Будем разбираться.
Итак, лежит у меня старый (уже) нетбук ASUS 1201N. В принципе он и ранее использовался для чего-нибудь типа поправить из консоли конфиг или посмотреть видосик в поездке. Но современный софт не оставляет шансов — работать на нем ныне уже практически невыносимо. Ну или если у вас ну очень спокойный темперамент, то может и пойдет. Установка SSD помогла не особо.
И тут типичный гик скажет: так поставь на него Linux, все залетает! (нет)
Формально если у вас под виндой тормозит Firefox или Chrome, то в Linux будет картина плюс-минус та же самая. К этому добавляется то, что на моем нетбуке свежие KDE и Gnome ведут себя еще менее отзывчиво чем винда, с секундными лагами интерфейса «нажал-нажалось». В общем, наш удел MATE desktop, консоль, vim, музычка, иногда видосики, какие потянут. Но суть не в этом.
В чем же проблема?
Итак, установлен Debian 8, закрытый драйвер nVidia, душа просит дальнейшей эстетики, установлен plymouth. Но вместо симпатичной загрузочной анимации в лучшем случае видим три текстовые точки и ползущий снизу прогрессбар,
в худшем сообщение
error : unexpectedly disconnected from boot status deamon
Первый подход
Первым делом в wiki дебиана подсказывают, что это все из-за закрытых драйвер, нету там framebuffer адекватного, поэтому поставь uvesafb.
Расписывать не буду, так как подробная инструкция приведена здесь: wiki.debian.org/ru/Plymouth
Идея в целом понятна, способ в частности позволяет поставить более высокое разрешение в системной консоли и т.д.
Но вот незадача, plymouth в Debian 8 версии 0.9.0 по прежнему отказывается работать. Либо текстовая тема, либо ошибка. Я перелопатил с десяток статей по настройке правильных параметров для uvesafb, но увы.
Второй подход
Следующий этап, надо дебажить. В общем благодаря дебагу и гуглению удалось напороться на следующий тред: www.linux.org.ru/forum/desktop/12848541
Если вкратце, проблема в связке plymouth и uvesafb. Последнюю вполне можно использовать с ним, но она не ставит своему устройству флаг boot_vga — т.е. первичный экран, с которого происходит загрузка. Plymouth же очень хочет видеть этот флаг и не найдя его обламывается с той самой ошибкой.
Дальнейшее гугление позволило найти также чуть более адекватный патч:
Index: plymouth-0.9.0/src/libply-splash-core/ply-device-manager.c
===================================================================
--- plymouth-0.9.0.orig/src/libply-splash-core/ply-device-manager.c
+++ plymouth-0.9.0/src/libply-splash-core/ply-device-manager.c
@@ -101,12 +101,13 @@ device_is_for_local_console (ply_device_
* card the kernel is using for its console. */
device_path = udev_device_get_syspath (device);
asprintf (&bus_device_path, "%s/device", device_path);
+ ply_trace ("Testing device path %s\n", bus_device_path);
bus_device = udev_device_new_from_syspath (manager->udev_context, bus_device_path);
boot_vga = udev_device_get_sysattr_value (bus_device, "boot_vga");
free (bus_device_path);
- if (boot_vga != NULL && strcmp (boot_vga, "1") == 0)
+ if (boot_vga == NULL /* framebuffer case */ || strcmp (boot_vga, "1") == 0)
for_local_console = true;
else
for_local_console = false;
Дело за малым — пересобрать пакет.
Решение
Первым делом нам понадобятся devscripts и build-essential
$ apt install devscripts build-essential
Далее собственно сорцы plymouth:
$ apt-get source plymouth
$ cd plymouth-0.9.0
Тут нам надо добавить новую запись в debian/changelog или просто поправить самую последнюю, чтобы номер версии отличался от официального, иначе при следующем обновлении системы к вам опять вернется родной пакет без патча. Например 0.9.0–9+fbfix.
Далее кладем патч в папку debian/patches под любым именем, например fix-bootvga-for-uvesafb.patch, не забываем также добавить его в файл debian/patches/series.
Далее все как обычно, выполняем:
$ dpkg-buildpackage -us -uc -nc -b
Ставим полученные deb, ставим понравившуюся тему.
$ sudo plymouth-set-default-theme -R spacefun
$ sudo update-grub2
$ sudo update-initramfs -u
Радуемся красивым сплэшам при загрузке и выключении компьютера.
Да, если вы не обратили внимание, фикс должен также помочь починить plymouth для raspberry pi и возможно других миниатюрных машинок.