Arranque:_Plymouth [Guadalinex V7] - 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: Wiki Plymouth

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