miércoles, febrero 27, 2008

Un poco de eyecandy parte 2: fbcondecor y fbsplash

Luego de tener un grub gráfico, otro de los caprichoso que tenemos los usuarios es ocultar al usuario todos los mensajes del inicio mediante el uso de un bonito splash animado. Para realizar esta labor hay diferentes alternativas, en este artículo mostraré dos formas, pero explicaré como utilizar sólo una de ellas.

La primera es splashy, el cual trabaja en espacio de usuario utilizando el framebuffer. Este es el enfoque utilizado por la gran mayoría de las distribuciones, debido a que no requiere parchar el kernel. No es mi preferido, ni es el método que explicaré en esta oportunidad, de cualquier modo, los usuarios de archlinux pueden encontrar la explicación de como instalarlo. Además de la ventaja ya mencionada, otra que posee es que también muestra una pantalla al momento de apagar el sistema. Como desventaja tenemos que se configura mediante xml, lo que puede resultar algo engorroso crear temas para un ser humano no entrenado en el uso de etiquetas.

Otra opción es fbsplash, el cual a partir de las últimas versiones tampoco requiere parchar el kernel. Cuando el proyecto era conocido como gensplash, este si necesitaba modificar el kernel. Esto causaba muchos inconvenientes a los desarrolladores, motivo por el que se dividió el sistema en 2 partes. Una llamada fbsplash, que se encarga de dibujar el splash en si, y fbcondecor parche que provee la funcionalidad de mostrar una imagen de fondo en las consolas del sistema. Esta última característica es la que le da un valor agregado, y es la que me convenció de darme la molestia de parchar un kernel. La combinación fbcondecor+fbsplash es la que explicaré en este artículo.


Primer paso: Instalación de fbsplash y splash-utils Para archlinux hay que compilar fbsplash, este se encuentra en aur. por lo que la manera mas simple es utilizando la herramienta yaourt, la que mencioné en el artículo pasado. Así, basta con

yaourt -S fbsplash (leer la advertencia antes de ejecutar este comando)

o bien, es posible crear el paquete mediante el PKGBUILD desde aur, y luego instalarlo con pacman.

importante: al instalar el paquete initscripts-splash (instalado como dependencia) éste sobreescribe los archivos de configuración /etc/rc.conf, /etc/rc.local y /etc/inittab, creando respaldos en con extensión .pacsave. Se recomienda respaldar estos archivos antes, y luego complementar los nuevos archivos con las opciones anteriores.


Segundo paso: Configuración de fbsplash
Para especificar un tema, basta con editar el archivo /etc/fbsplash.conf y agregar
el nombre del tema en la opción THEMES. Para el tema que yo utilizo llamado jotape (sí, lo hice yo, y además soy muy original con los nombres.) Debo mencionar que mi tema posee la limitación de solo funcionar en la resolución 1024x768.

El paquete fbsplash trae un tema por defecto llamado darch. Es muy bonito, pero posee los logos antiguos de archlinux. Con mi tema (descomprimirlo con tar zxvf jotape.splash.tar.gz -C / ) , la línea quedaría así:

THEMES="jotape"

Luego de configurado el tema, es necesario especificar en el archivo rc.conf las opciones de SPLASH, y agregar al arreglo DAEMONS el servicio fbsplash, de preferencia al inicio. quedando así:


DAEMONS=(fbsplash ... )
SPLASH="fbsplash"

Hasta este punto ya es posible utilizar el splash, solo basta configurar grub para tal labor. Pero el eye-candy está en la consola con background, por lo que recomiendo realizar el paso 3.

Para lograr que la imagen de fondo sea visible desde que seleccionamos el sistema operativo en grub, además es necesario agregar el hook a initcpio. Para ello editamos el archivo /etc/mkinitcpio.conf y agregamos al inicio de los HOOKS v86d y fbsplash.

HOOKS="v86d fbsplash ..."

Al crear una imagen de initcpio, automáticamente se verificará el tema configurado y se agregará a la imagen, por ello es necesario tener en cuenta que si se hace algún cambio en los temas, será necesario volver a crear dicha imagen.


Tercer paso: Parchado y compilación del kernel
Antes era necesario bajar el PKGBUILD del kernel, agregar el parche, y configurar las opciones. Sin embargo había una alternativa fácil: un patchset llamado fallen, que incluía gensplash entre otros parches. Lamentablemente dicho paquete para archlinux dejó de existir cuando su desarrollador encontró novia, hecho que coincidió también con el retiro de con kolivas del desarrollo del famoso parche ck. Afortunadamente para los usuarios de archlinux, producto de una discusión en el bbs de archlinux, el usuario DonGiovanni decidió crear los scripts para fbsplash, y para la compilación de fbcondecor.

Además de los guiones, DonGiovanni creó un nuevo sabor del kernel para archlinux, y lo bautizó como "kernel26fbcondecor". Dicho paquete es relativamente nuevo, y consiste en un kernel vanilla más el parche fbcondecor, es necesario mencionar que faltan algunos paquetes de módulos, pero con un poco de trabajo verificando los PKGBUILD de los módulos del kernel oficial de archlinux, es posible crear paquetes para este nuevo sabor. De hecho, ante esa necesidad, y como uno de los primeros usuarios de este paquete, creé los PKGBUILD para los módulos que utilizo, desde entonces estoy manteniendo los paquetes para los drivers catalyst, de madwifi y de los módulos de virtualbox para el kernel26fbcondecor.

Luego de la larga explicación, para crear dicho paquete, optaré por el camino rápido, donde se requiere algo de paciencia, primero por la descarga de casi 50MB del kernel, y luego por lo que tarda en compilarse:

yaourt -S kernel26fbcondecor

Luego de instalado, para que funcione, es necesario especificar el nuevo kernel en grub, lo que se verá en el siguiente paso.


Cuarto 4: Configuración de grub
Para especificar que el framebuffer con una resolución de 1024x768, el tema jotape, y que inicie con el splash mostrando una barra de progreso sin mensajes, las línea a agregar al kernel sería lo marcado en negro. En el caso del kernel26fbcondecor, se deben agregar todas las líneas, cuidando que los parámetros root coincidan con los de la ubicación de su sistema.

# (0) Arch Linux
title Arch Linux kernel26fbcondecor 2.6.24

root (hd0,0)

kernel /boot/vmlinuz26fbcondecor root=/dev/sda1 ro video=uvesafb:1024x768-32@75,ywrap,mtrr:3 vga=792 splash=silent,theme:jotape quiet console=tty1

initrd /boot/kernel26fbcondecor.img

Una vez configurado, basta con reiniciar y comprobar los resultados. Al iniciar se debiera ver algo como la imagen de la izquierda, acompañada de una barra de progreso.
Al terminar la secuencia de booteo, la terminal pasará a tener el fondo especificado para el modo verbose.








Algunos datos para crear tus propios temas

Para crear los temas, lo primero que se debe conocer, es la diferencia entre los modos verbose y silent. El primero es el tradicional con mensajes de texto, pero con una bonita decoración de fondo, además de la posibilidad de dibujar texto en ciertas coordenadas. El segundo es la barra de progreso, con diversas posibilidades.

Los archivos de configuración deben estar en un subdirectorio en /etc/splash/ , el que no debe llevar espacios en blancos en su nombre. Las configuraciones deben estar dentro de dicho directorio, y deben llevar por nombre la resolución a utilizar con extensión cfg, como ejemplo, mi tema para 1024x768 lleva por nombre /etc/splash/jotape/1024x768.cfg


Para el modo verbose (solo fbcondecor), las opciones son las siguientes
pic=ruta
Identifica la ruta de la imagen (en formato PNG) que se utilizará de fondo.

tx=n, ty=n, tw=n, th=n
Las siguientes opciones identifican las coordenadas donde se posicionará el texto de la consola,
tx indica la coordenada horizontal, ty la coordenada vertical. (Por lo tanto (tx, ty) sería el vértice superior izquierdo)). tw indica el ancho a utilizar, y th la altura.
Estos valores son números enteros, y cada unidad representa un pixel.

Para el modo silent, las opciones son muy similares
silentpic=ruta
Identifica la ruta de la imagen (en formato PNG) que se utilizará de fondo.

text_x=n, text_y=n
Especifica las coordenadas donde mostrar los mensajes de estado, siendo x la coordenada horizontal, e y la vertical. Los valores representan pixeles.

box [flags] x0 y0 x1 y1 color1 [color2 color3 color4]
Dibuja una caja. Las coordenadas se especifican con los vértices superior-izquierdo (x0, y0), y con el inferior-derecho (x1, y1).
Los colores poseen el siguiente formato : #rrggbb, o bien #rrggbbaa. Cada color es una combinación de los valores en hexadecimal r, g, b (rojo, verde y azul), y la a representa el grado de transparencia, los cuales van desde 00 (translucido) hasta ff (color sólido).

Para las barras de progreso de utiliza la opción box. La configuración puede ser algo confusa, así que la explicaré con el siguiente ejemplo.

box silent inter 0 262 0 337 #22222c #191920 #383849 #2e2e3d
box silent 0 262 799 337 #22222c #191920 #383849 #2e2e3d

Donde la clave es entender que la barra movil es una caja que empieza y termina en la misma coordenada x, y que va acompañada con el flag inter. Dichas cajas son dibujadas en secuencia, por lo que es posible agregar mas cajas para crear efectos especiales. En el ejemplo, primero se especifica la animación, y luego se indica la caja que usará dicha animación, la cual avanzará en forma horizontal desde la coordenada 0 hasta la 799.

Existen muchas mas opciones, las cuales pueden ser encontradas en la documentación del formato. Existe la posibilidad de agregar gráficos y animaciones, lamentablemente en archlinux no logré conseguir que funcionan.

Ya con el nuevo tema creado, para agregar dicho tema, es necesario especificar el tema en el paso anterior, y crear la imagen con mkinicpio -p kernel26fbcondecor.


Enláces útiles:
repositorio de temas de fbsplash: Principalmente posee temas para gentoo, pero puede servir como base para crear temas propios.
jotape 2008.2: tema creado por mí para archlinux (sólo 1024x768)
Documentación acerca de los temas de fbsplash

2 comentarios:

  1. Hello. This post is likeable, and your blog is very interesting, congratulations :-). I will add in my blogroll =). If possible gives a last there on my blog, it is about the Celular, I hope you enjoy. The address is http://telefone-celular-brasil.blogspot.com. A hug.

    ResponderEliminar
  2. Bastante bien el artículo, solo he echado en falta que explicaras un poco de historia sobre ellos, como que gensplash se origino como fork de bootsplash ya que este dejo de realizarse, pero funcionaba cojonudamente, yo lo tenia en mdk 8.0 e igual 7.0, splashy se ha originado como fork de usplash el splash de ubuntu y es el más elegante por ahora. También el comentar por encima aplicaciones gráficas para la creación de temas, aunque no son muy eficientes, o lo eran cuando vi una de ellas.

    El hecho de que la mayoría de los temas existentes sean de gentoo es debido a que lo desarrolla spock un dev de gentoo.

    Ahí te dejo mi consola como se veía en 2004.

    ResponderEliminar

Su comentario es bienvenido y agradecido