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!!

 

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.