Чиним Plymouth в Debian 8 (а возможно и еще где-то)

TL; DR Захотелось поставить на старый нетбук Debian 8, сказано — сделано. В целом все работает, но вот вместо красивой заставки при загрузке — бегущие строки загрузки ядра и сервисов. Не красиво. В чем же проблема? Будем разбираться.
c88f91a0615c4352a44c0877235bf495.png

Итак, лежит у меня старый (уже) нетбук ASUS 1201N. В принципе он и ранее использовался для чего-нибудь типа поправить из консоли конфиг или посмотреть видосик в поездке. Но современный софт не оставляет шансов — работать на нем ныне уже практически невыносимо. Ну или если у вас ну очень спокойный темперамент, то может и пойдет. Установка SSD помогла не особо.

И тут типичный гик скажет: так поставь на него Linux, все залетает! (нет)
Формально если у вас под виндой тормозит Firefox или Chrome, то в Linux будет картина плюс-минус та же самая. К этому добавляется то, что на моем нетбуке свежие KDE и Gnome ведут себя еще менее отзывчиво чем винда, с секундными лагами интерфейса «нажал-нажалось». В общем, наш удел MATE desktop, консоль, vim, музычка, иногда видосики, какие потянут. Но суть не в этом.

В чем же проблема?

Итак, установлен Debian 8, закрытый драйвер nVidia, душа просит дальнейшей эстетики, установлен plymouth. Но вместо симпатичной загрузочной анимации в лучшем случае видим три текстовые точки и ползущий снизу прогрессбар,
4eab5fcab0734516af1afb246759cdd8.png
в худшем сообщение

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

Радуемся красивым сплэшам при загрузке и выключении компьютера.

75becf9e453d44868c07614add779420.png

Да, если вы не обратили внимание, фикс должен также помочь починить plymouth для raspberry pi и возможно других миниатюрных машинок.

© Geektimes