Cómo hacer que Plymouth muestre un mensaje durante el apagado, cambiar de modo y hacer que pkcon funcione

Cómo hacer que Plymouth muestre un mensaje durante el apagado, cambiar de modo y hacer que pkcon funcione

Estoy intentando escribir un script que realice a) la actualización del sistema antes de apagarlo (no al reiniciar) y muestre el progreso al usuario en Plymouth.

Hasta ahora, bueno, logré que iniciara el script (¿a veces?) al apagar, pero también se inicia al reiniciar (por arreglar).

[Unit]
Description=Update on Shutdown
Before=poweroff.target halt.target shutdown.target
After=network-online.target multi-user.target

[Service]
Type=oneshot
ExecStart=/bin/true
RemainAfterExit=true
ExecStop=/usr/share/services/shutdown_update
TimeoutSec=infinity

[Install]
WantedBy=poweroff.target halt.target shutdown.target

El guión real es este:

#!/bin/sh

fun_update() {

    plymouth display-message --text "Aktualisierungen werden installiert..."
    plymouth change-mode --updates
    pkcon update -p -y > /tmp/update_status.txt
    update=0
    plymouth change-mode --boot-up
    plymouth display-message --text "Aufräumen..."
    apt-get autoclean
    apt-get autoremove
    plymouth change-mode --shutdown
}

fun_plymouth() {
    while [ "$update" = 1 ]
    do
        plymouth system-update --progress $(cat /tmp/update_status.txt | grep -oP "(?<=Percentage:  ).*" | tail -1)
        plymouth display-message --text "$(cat /tmp/update_status.txt | grep -oP "(?<=Percentage:   ).*" | tail -1)%"
        sleep 1
    done
}
if echo systemctl list-jobs | egrep -q 'reboot.target.*start';
then
exit 0
fi
plymouth change-mode --boot-up
update=0
plymouth display-message --text 'Aktualisierung wird vorbereitet...'
plymouth display-message --text "Es wird nach Aktualisierungen gesucht..."
pkcon refresh
update_list=$(pkcon get-updates)
echo $update_list
if ! echo "$update_list" | grep -q "There are no updates available at this time."; then
update=1
fun_update & fun_plymouth & wait
else
plymouth display-message --text "Keine Aktualisierungen gefunden!"
sleep 3
fi
plymouth display-message --text ""

Lo que hacen estas funciones (o lo que quiero que hagan) es a) informar al usuario que su sistema se va a actualizar, b) iniciar la actualización usando pkcon y c) mostrar la presentación de actualización fuera de línea de Plymouth (la presentación que es se muestra cuando se instalan actualizaciones sin conexión) y obtener el progreso de pkcon para mostrárselo al usuario (es por eso que grep y tail -1, para obtener solo la última coincidencia).

Pero por alguna razón, logro iniciar el script, pero no se muestran mensajes de Plymouth y pkcon no se inicia o, cuando lo hace, falla. Probablemente haya muchos problemas en este script, no logré depurarlo, ya que plymouth y systemd no son realmente útiles.

¡Todos los consejos son bienvenidos! ¡Muchas gracias!

EDITAR: instalé plymouth-x11 para probar mi script; Curiosamente, los comandos enviados por el script también se ignoran aquí cuando se ejecutan (incluso en un shell raíz), pero estos comandos exactos ingresados ​​manualmente en el shell raíz funcionan. También agregué esta línea para verificar si Plymouth se está ejecutando:

plymouth --ping && echo plymouth is running || echo plymouth NOT running

y vuelve que está funcionando. Esto no tiene sentido

EDITAR2: Con plymouth-x11 descubrí que al eliminar (eliminar las líneas de) las funciones update() y plymouth(), plymouth muestra el mensaje. Volver a agregar las funciones lo rompe nuevamente. Además, colocar el comando plymouth encima de las declaraciones de funciones hace que vuelvan a funcionar.

EDITAR3: eliminé las funciones y coloqué el código en un archivo adicional. Ahora funciona como se esperaba (al menos en mi entorno de prueba). Entonces la pregunta es: ¿Por qué mi script se rompe cuando agrego las funciones?

EDITAR4: No nombre sus funciones como un comando al que desea llamar -_-

EDITAR 5: Entonces, el script ya no debería funcionar cuando reinicio, pero aún así: Plymouth no muestra ningún mensaje y parece que el script no se llama al apagar. Estos son los problemas que conozco en este momento; probar un script que no se llama es bastante difícil. El script funciona cuando inicio plymouthd manualmente con plymouth-x11.

Estoy ejecutando Ubuntu 21.04

información relacionada