Equipo Distros 5/04/10
Continuando con el anterior post sobre plymouth, vamos a seguir descubriendo cómo funciona este programa y qué podemos hacer para personalizarlo, creando nuestros propios temas ("Themes")
Comenzando con Plymouth. Comandos utiles
El primer paso que debemos realizar es ejecutar manualmente plymouth para visualizar un tema:
sudo plymouthd
Una vez ejecutado, ya puedes controlarlo usando el comando plymouth. Para ver el arranque:
plymouth –show-splash
Detener la ejecución:
plymouth quit
Mejorar la ejecución del programa podemos correr:
plymouthd; plymouth --show-splash ; for ((I=0; I<10; I++)); do plymouth --update=test$I ; sleep 1; done; plymouth quit
Ver los temas que se encuentran instalados en el sistema:
plymouth-set-default-theme --list
Para elegir alguno de esos temas:
plymouth-set-default-theme
Edición de temas
Es importante diferenciar entre un tema y un plugin. Un tema usa un plugin y decide alguno de los parámetros que usa el plugin. Esta información se guarda en el directorio bajo /usr/share/plymouth/themes/
Cada uno de los directorios contiene un archivo .plymouth que describe el tema.
Para crear un nuevo tema, tan solo copia el directorio con un nuevo nombre.
Para estudiar de una manera practica la creación de temas vamos realizar uno de ejemplo:
En un primer paso, creamos una carpeta con el nombre del tema que queramos crear, en el que guardaremos los diferentes recursos que vayamos a necesitar.
mkdir guadalinex
Dentro nos encontraremos tres tipos de ficheros:
- Ficheros de imágenes: Que nos servirán de recursos para realizar el tema
- Ficheros .plymouth: Describe el tema, nombre, descripción y recursos
[Plymouth Theme]
Name=Guadalinex
Description=Guadalines test
ModuleName=script
[script]
ImageDir=/lib/plymouth/themes/guadalinex
ScriptFile=/lib/plymouth/themes/guadalinex/guadalinex.script
- Archivos .script: Definen las acciones que queramos que lleve a cabo nuestro Tema, un ejemplo simple:
guadalinex_image = Image("guadalinex_logo.png");
guadalinex_sprite = Sprite(guadalinex_image);
guadalinex_sprite.SetX(200);
guadalinex_sprite.SetY(200);
pinguino_image = Image ( "start-here.png");
pinguino_sprite = Sprite ( pinguino_image);
progress = 0;
fun refresh_callback ()
{
progress++;
pinguino_sprite.SetX(progress);
}
Plymouth.SetRefreshFunction (refresh_callback);
El ejemplo carga los dos recursos proporcionados en el archivo .plymouth y que se encuentran en el directorio correspondiente al tema, guarda cada imagen cargada (guadalinex_logo.png y start-here.png) en una variable para posteriormente convertirla a Sprite (una imagen con una posición en pantalla) mediante la función correspondiente.
Otras dos funciones a las que se hace referencia en el código del script son SetX y SetRefreshFunction.
SetX y SetY establece la posición de un sprite en pantalla:
Ejemplo:
flower_image = Image("flower.png");
flower_sprite = Sprite(flower_image);
Para establecerlo en la coordenada (100,0)
flower_sprite.SetX(100);
También podemos bajarlo si queremos:
flower_sprite.SetY(400);
No hay ningún problema con establecer cualquier valor, ya sea, sobrepasando los limites de la ventana, sobreponiendo varias imágenes o incluso números negativos, por ejemplo:
other_flower_sprite = Sprite(flower_image);
other_flower_sprite.SetX(-100);
other_flower_sprite.SetY(200);
Para sobreponer imágenes, se puede jugar con el valor de la coordenada Z:
flower_sprite.SetZ(10);
La otra función, SetRefreshFunction, establece la una función para el refresco de pantalla que hayamos definido previamente.
En este caso, fun refresh_callback ()
que realiza un desplazamiento lateral del sprite.
Ejemplos con otras funciones relevantes para programación de Scripts:
Obtener las dimensiones de pantalla:
Window.GetWidth()
Window.GetHeight()
Funciones Matemáticas:
Math.Sin(theta)
Math.Cos(theta)
Escalado de imágenes:
screen_width = Window.GetWidth();
screen_height = Window.GetHeight();
resized_flower_image = flower_image.Scale(screen_width, screen_height);
Opacidad de imágenes:
other_flower_sprite.SetOpacity(0);
Ejemplo de rotación de sprites:
butterfly_sprite.SetImage(butterfly_images[Math.Int(progress / 5) % 4].Rotate(theta));
Mas información sobre la programación de Scripts para Plymouth:
Wiki Plymouth

Comentarios
rcmorano:
Muy útil la docu compadre :D!!