Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: [HOWTO] Создание простенького USplash  (Прочитано 6355 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн keepiledar

  • Автор темы
  • Любитель
  • *
  • Сообщений: 92
  • I'am the LameR
    • Просмотр профиля
[HOWTO] Создание простенького USplash
« : 12 Марта 2009, 21:04:32 »
Все пользователи Ubuntu знают, что такое USplash. Но не все знают, как его создать самому на свой же вкус.
Просьба - я еще ламер, поэтому некоторые вещи буду объяснять своими, "ламерскими" словами, а более продвинутые пользователи Ubuntu меня поправят при желании... :)
У Вас должен быть установлен gcc, у кого нет, установить.
sudo apt-get install gccЕще понадобится StartUp-Manager
sudo apt-get install startupmanagerИ пакет pcf2bdf
sudo apt-get install pcf2bdf
Примечание. Если вы хотите создать простой USplash, с заменой изображения, прогрессбара и изменения шрифта текста, изменения положения всех составляющих - этой информации Вам хватит. Если хотите чего-то большего - Google в помощь и изучение английского языка вкупе с изучением программирования на C. Картинок думаю не понадобится :)

Первые шаги.
Создаем папку с любым именем в вашей домашней директории (так будет удобнее, для примера пусть она будет называться usplash-compile), это и будет директория для файлов будущей заставки. В ней создайте сразу два файла: Makefile и usplash-source.c
Что понадобится? Собственно, фоновая картинка, изображение прогрессбара (линейки загрузки) и шрифт.
Картинка должна быть в палитре 256 цветов, иметь нужное разрешение (оно должно соответствовать разрешению при загрузке компьютера (когда появляется USplash). Узнать его можно, открыв StartUp-Manager. Как только окно открылось, в секции Монитор смотрим это самое разрешение монитора) и быть в формате PNG. Начинающим: как это сделать? Просто откройте нужную картинку в GIMP'e, смените ее разрешение (меню Изображение => Размер изображения...; в секции Размер изображения вписать уже известное вам разрешение, нажать ОК), установите палитру в 256 цветов (меню Изображение => Режим => Индексированное...; выбрать Создать оптимальную палитру и ввести в поле ниже 255), и сохранить ее в формате PNG (Файл => Сохранить как; и в поле, где показано имя файла-картинки, вместо расширения .jpg или какое там у вас будет вписать .png). Жмем Сохранить. В появившемся диалоге достаточно нажать ОК.

Примечание. Сохраните как usplash_image.png

Еще понадобится картинка throbber'a (прогрессбар по-русски :)), и не одна, а две :) Размер - любой (в пределах разумного конечно), палитра должна быть тоже в 256 цветов. Одна картинка будет "фоном прогрессбара", а вторая собственно прогрессбаром. Суть в том, что вторая картинка будет заполнять собой первую, фоновую (прогрессбар движется :))

Примечание. Сохраните оба файла как throbber_back.png (фон прогрессбара) и throbber_fore.png (сам прогрессбар)

Теперь о шрифте. Взять любой можно из /usr/share/fonts/x11. Там полно шрифтов с расширениями pcf.gz, однако для создания заставки нужен шрифт bdf. Делаем так:
1. Копируем нужный нам шрифт в папку с вашей заставкой
2. Открываем терминал, переходим в папку с будущим USplash'eм (cd /home/%username%/usplash-compile) (для особо умных поясняю, вместо %username% вписать ваше имя пользователя) и убираем .gz у шрифта:
gzip -d font.pcf <= естественно здесь пишем имя файла шрифта вместо font.pcfДалее набираем:
pcf2bdf -v -o font1.bdf font.pcf <= и здесь заменить не забываемВ папке появится еще один файл с именем font1.bdf. Это и есть шрифт, пригодный для использования в USplash.

Фуф, гемор с подготовкой вроде закончился. Приступаем непосредственно к созданию USplash'a.
Созданный нами usplash-source.c - исходник на языке C, в этом файле будет проще говоря весь будущий USplash. Я программирования не знаю и объясню все лишь на том уровне, чтобы создать USplash, а не учить Вас программированию :)

Итак, на обзор - самый простой исходник.

#include <usplash-theme.h>
#include <usplash_backend.h>
extern struct usplash_pixmap pixmap_usplash_image; # здесь перечисляются все файлы, которые в дальнейшем будут
extern struct usplash_pixmap pixmap_throbber_back; # использоваться в USplash. Можно заметить, что имена файлов
extern struct usplash_pixmap pixmap_throbber_fore; # без расширений должны совпадать с названиями после слова
extern struct usplash_font font_font1;             # pixmap_

void t_init(struct usplash_theme* theme);
void t_clear_progressbar(struct usplash_theme* theme);
void t_draw_progressbar(struct usplash_theme* theme, int percentage);
void t_animate_step(struct usplash_theme* theme, int pulsating);

struct usplash_theme usplash_theme;

struct usplash_theme usplash_theme = {
.version = THEME_VERSION,
    .next = NULL,
    .ratio = USPLASH_4_3,

.pixmap = &pixmap_usplash_image,
.font   = &font_font1,

.background             = 0x0,
   .progressbar_background = 0x7,
   .progressbar_foreground = 0x156,
.text_background        = 0x15,
.text_foreground        = 0x31,
.text_success           = 0x171,
.text_failure           = 0x156,

   .progressbar_x      = 404, # позиция прогрессбара на экране. Координата Х
   .progressbar_y      = 475, # Координата по Y
   .progressbar_width  = 216, # Ширина прогрессбара, должна совпадать с шириной изображения прогрессбара
   .progressbar_height = 8,   # Высота прогрессбара

   .text_x      = 322, # Положение текста, который отображает состояние загрузки ОС Ubuntu
   .text_y      = 525, # Параметры text_x text_y определяют положение текста, (координаты по осям х и y (по горизонтали и вертикали))
   .text_width  = 380, # ширину и высоту "невидимого прямоугольника", в который текст будет помещен
   .text_height = 100, #

   .line_height  = 15,
   .line_length  = 32,
   .status_width = 35,

    .init = t_init,
    .clear_progressbar = t_clear_progressbar,
    .draw_progressbar = t_draw_progressbar,
    .animate_step = t_animate_step,
};


void t_init(struct usplash_theme *theme) {
    int x, y;
    usplash_getdimensions(&x, &y);
    theme->progressbar_x = (x - theme->pixmap->width)/2 + theme->progressbar_x;
    theme->progressbar_y = (y - theme->pixmap->height)/2 + theme->progressbar_y;
}

void t_clear_progressbar(struct usplash_theme *theme) {
    t_draw_progressbar(theme, 0);
}


void t_draw_progressbar(struct usplash_theme *theme, int percentage) {
    int w = (pixmap_throbber_back.width * percentage / 100);
    usplash_put(theme->progressbar_x, theme->progressbar_y, &pixmap_throbber_back);
    if(percentage == 0)
        return;
    if(percentage < 0)
        usplash_put_part(theme->progressbar_x - w, theme->progressbar_y, pixmap_throbber_back.width + w,
                         pixmap_throbber_back.height, &pixmap_throbber_fore, -w, 0);
    else
        usplash_put_part(theme->progressbar_x, theme->progressbar_y, w, pixmap_throbber_back.height,
                         &pixmap_throbber_fore, 0, 0);
}


void t_animate_step(struct usplash_theme* theme, int pulsating) {

    static int pulsate_step = 0;
    static int pulse_width = 56;
    static int step_width = 2;
    static int num_steps = 0;
    int x1;
    num_steps = (pixmap_throbber_fore.width - pulse_width)/2;

    if (pulsating) {
        t_draw_progressbar(theme, 0);
    
        if(pulsate_step < num_steps/2+1)
       x1 = 2 * step_width * pulsate_step;
        else
       x1 = pixmap_throbber_fore.width - pulse_width - 2 * step_width * (pulsate_step - num_steps/2+1);

        usplash_put_part(theme->progressbar_x + x1, theme->progressbar_y, pulse_width,
                         pixmap_throbber_fore.height, &pixmap_throbber_fore, x1, 0);

        pulsate_step = (pulsate_step + 1) % num_steps;
    }
}

Теперь осталось только скопировать этот код, вставить его в usplash-source.c Естественно, отредактируйте его на свой вкус. (комментарии даны:)) Исходник готов. Уберите комменты мои на всякий случай из исходника :)

Почти конец. Если вы создавали файлы с рекомендованными именами, то просто вставьте этот текст в созданный когда-то Makefile

CC=gcc
CFLAGS=-g -Wall -fPIC
LDFLAGS=
INCLUDES=

COMPILE = $(CC) $(INCLUDES) $(CFLAGS)
LINK = $(CC) $(CFLAGS) $(LDFLAGS)

INSTALL = /usr/bin/install -c
INSTALL_DATA = $(INSTALL) -m 644
INSTALL_PROGRAM = $(INSTALL) -m 755

usplash-theme-ubuntu.so: throbber_back.png.c.o \
                         throbber_fore.png.c.o \
        usplash_image.png.c.o \
usplash-source.c.o

$(COMPILE) -shared -o $@ $^

%.png.c: %.png
pngtousplash $< > $@

%.bdf.c: %.bdf
bdftousplash $< > $@

%.c.o: %.c
$(COMPILE) -o $@ -c $<

install:
$(INSTALL) -d $(DESTDIR)/usr/lib/usplash
$(INSTALL_PROGRAM) usplash-theme-ubuntu.so $(DESTDIR)/usr/lib/usplash/usplash-theme-ubuntu.so
clean:
rm -f *.png.c *.bdf.c *.c.o

У Вас еще должен там остаться на фоне запущенным терминал :) Если вы все еще в директории с USplash, то просто наберите команду
makeИ ждите, пока операция закончится.
В папке должен появится usplash-theme-ubuntu.so
Теперь открываем StartUp-Manager, переходим на вкладку Внешний вид, кнопка Manage Usplash Themes, и в появившемся окне Добавить, после чего выбираем файл usplash-theme-ubuntu.so (ищите, где вы все создавали :)) и не забудьте после добавления выбрать ваш USplash в том же окне StartUp-Manager.
Все! :)
Если есть ошибки в How-To или он выглядит не так, как должен выглядеть нормальный How-To, пишите здесь, исправлю.
« Последнее редактирование: 10 Октября 2010, 01:03:36 от stmc »

Villain

  • Гость
Re: How-To -Создание простенького USplash
« Ответ #1 : 12 Марта 2009, 21:26:15 »
Хорошая статья. +1 ;)

PS. Жаль, что USplash не использую (люблю видеть лог загрузки, да и кириллица иначе в консоли не работает)

Оффлайн KTATTOO

  • Активист
  • *
  • Сообщений: 263
    • Просмотр профиля
    • Студия художественной  татуировки в г.Каменске-Уральском
Re: How-To -Создание простенького USplash
« Ответ #2 : 12 Марта 2009, 21:42:10 »
Огромное спасибо! Попробую!  ;)
Бью по попам вгоняя краску

Оффлайн keepiledar

  • Автор темы
  • Любитель
  • *
  • Сообщений: 92
  • I'am the LameR
    • Просмотр профиля
Re: How-To -Создание простенького USplash
« Ответ #3 : 12 Марта 2009, 21:44:14 »
KTATTOO, отпишись обязательно, ибо чувствую, что ошибок скорее всего у меня тут море, и "непонятностей" тоже :)

Оффлайн vadim-nsk

  • Старожил
  • *
  • Сообщений: 1318
  • Жить надо так, как горит пламя!
    • Просмотр профиля
    • Linux в Новосибирске
Re: How-To -Создание простенького USplash
« Ответ #4 : 13 Марта 2009, 06:15:39 »
Вопросов несколько.
1. У вас написано, что в палитре png должно быть 256 цветов, на практике использую всегда не более 16, как у вас получается обойти данное ограничение?
2. Второе в вашем руководстве нет пункта включающего sudo dpkg-reconfigure linux-image-$(uname -r), либо sudo update-initramfs -u , отсюда вопрос, каким образом у вас в выделенной области под сообщения они видны?
3. Мне кажется, что вы взяли неудачный пример по созданию usplash. Почему бы вам в качестве примера не разобрать сот такой:

(Нажмите, чтобы показать/скрыть)
Ведь если человек если потратит свои силы на создания usplash ему захочется поделиться им с другими, а а других может быть совершенно другое разрешение и никто не увидит сделанную им ляпоту. Собственно вопрос почему вы взяли в качестве примера именно ваш вариант?
4. Надо более подробнее прокомментировать код, вам не кажется? Например, цвет текста в текстовой области и его фон и т.п. , а также в комментах указывать лучше что допустим обозначает pixmap_usplash_image и т.д.
С уважением и пожеланием дальнейших успехов.
PS Пока не забыл, еще ничего не сказанно про grub!
PS/PS Вот еще настоятельно рекомендую ознакомится со скриптом http://forumubuntusoftware.info/viewtopic.php?f=23&t=60&sid=da00d24c6ca005016ee558cb038ff69d его просто можно натравливать на картинку. Т.е. после го помещения в  ~/.gnome2/nautilus-scripts/ у вас в контекстном меню появится пункт Сценарии->MakeUsplash. После завершения у вас в папке с картинкой появляется готовый *.so. Почитаете поймете. Не слежу за новостями появилвсь уже новая версия http://forumubuntusoftware.info/viewtopic.php?f=23&t=1767
« Последнее редактирование: 13 Марта 2009, 07:06:28 от vadimka »

Оффлайн keepiledar

  • Автор темы
  • Любитель
  • *
  • Сообщений: 92
  • I'am the LameR
    • Просмотр профиля
Re: How-To -Создание простенького USplash
« Ответ #5 : 13 Марта 2009, 13:12:34 »
Vadimka
1. Никогда о таком не слышал... даже картинки вытащенные со скачанных USplash с gnome-look.org имеют палитру в 256 цветов!
3. Конечно, в вашем коде под несколько разрешений, и там больше функций можно описать, и он универсален, но я ведь сказал - простенький USplash...
4. Уже сказал наверху... без всяких объяснений, цель Хау-Ту собрать работающий USplash. Но если надо будет - то сделаю подробное описание кода :)
2. Предупреждал что я ламер. Вопрос этот о чем?...
PS. А в скрипте этом можно сделать только картинку, у меня тут вроде чуть побольше функций описано :) С этим скриптом для самых ленивых. Его кстати пробовал в первую очередь но мне он не понравился, и решил разобраться подробней.

Оффлайн Melon

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: How-To -Создание простенького USplash
« Ответ #6 : 08 Сентября 2009, 01:30:49 »
Попробывал данный способ, выдает ошибку  :(

Пользователь решил продолжить мысль 08 Сентября 2009, 01:32:13:
Способ описанный здесь http://forumubuntusoftware.info/viewtopic.php?f=23&t=1767 работает, но при загрузке появляется черный прямоугольник поверх изображения, никто не сталкивался?

Оффлайн Landgraf13

  • Любитель
  • *
  • Сообщений: 64
    • Просмотр профиля
Re: How-To -Создание простенького USplash
« Ответ #7 : 09 Октября 2010, 20:42:45 »
Появляется такая ошибка. С чем связана? Вроде бы все делал правильно.


make: Циклическая зависимость throbber_back.png <- throbber_back.png.c пропущена.
pngtousplash throbber_back.png > throbber_back.png.c
/bin/sh: pngtousplash: not found
make: *** [throbber_back.png.c] Ошибка 127
rm throbber_back.png.c

 

Страница сгенерирована за 0.085 секунд. Запросов: 25.