arranque plymouth - guadalinex-archive/guadalinex-v7 GitHub Wiki

¿Qué es Plymouth?

Plymouth es un programa que se carga en el inicio del sistema, MUY MUY al inicio del sistema, incluso antes del montaje del sistema de ficheros, su objetivo es proporcionar una animación gráfica en el proceso de arranque mientras este se ejecuta en segundo plano.

En los sistemas con DRM (Direct Rendering Manager, módulo del kernel que dá acceso directo a las funcionalidades gráficas, otro día podremos hablar largo y tendido sobre esto…) se intentará que se establezca su modo nativo lo antes posible, plymouth se encarga de lanzarlo y mantenerlo en ejecución durante todo el proceso de arranque, incluso una vez que ya se hayan lanzado las X. En caso de sistemas sin drivers DRM, plymouth se ejecutará en modo texto.

En cualquiera de los casos, los mensajes durante el proceso de arranque no se encuentran visibles, tras el montaje del sistema de ficheros raiz, los mensajes se guardaran en /var/log/boot.log. En cualquier caso, es posible acceder a los mensajes pulsando la tecla escape durante el proceso de arranque.

Plymouth trabaja con dos binarios:

plymouthd: Es el que se encarga del trabajo pesado. Se encarga del sistema de logs de la sesión y de mostrar la ventana “splash”

plymouth: Es la interfaz de control para plymouthd y es la que se encarga de comandos como

plymouth –show-splash

o

plymouth –ask-for-password 

que tienen su accion asociada correspondiente en plymouthd

Comenzando con Plymouth. Comandos útiles

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

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: <a href=“http://www.freedesktop.org/wiki/Software/Plymouth/Scripts ”>Wiki Plymouth</a>

⚠️ **GitHub.com Fallback** ⚠️