Pagina 1 di 2

Splashscreen: è possibile?

Inviato: gio 18 nov 2021, 16:26
da susumella
Ciao a tutti,
scusate se vi scrivo per una totalmente inessenziale, ma ogni tanto mi prendono questi attacchi...
Tempo fa, su un altro pc (a 32 bit) ero riuscito (non senza una quantità importante di bestemmie) ad installare un bootsplash con una progressbar all'avvio della slack, al posto del log di caricamento.
A distanza di n anni (dove n>=15) oggi ho una splendida macchina a 64bit con EFI e grub2 con linux (Ubuntu, ahimé) nativo, in cui è presente il logo del produttore all'avvio. Cosa che ovviamente non avviene con slackware (dual boot) e non so come possa fare una roba del genere. E mi rode: perché se avvio Ubuntu vedo un'immagine (o il log, a mia scelta) mentre se avvio slack devo per forza vedere il log della console?
Ho ovviamente già cercato qui sul forum e su zio Google, ma non sono riuscito a trovare NULLA.
Se c'è qualcuno che riesce a darmi una mano, ne sarei grato.
Grazie
Susu

Re: Splashscreen: è possibile?

Inviato: sab 30 set 2023, 16:43
da susumella
E niente, ritorno a bomba... sto cercando sia qui che su google ma non c'è davvero nulla in merito, tolto questo https://www.slackwiki.com/Bootsplash che però mi sembra abbastanza datato (e, soprattutto, non vedo il comando "splash" in nessun pacchetto attuale). Ho letto qualcosa su plymouth, ma non capisco come si configura...

Re: Splashscreen: è possibile?

Inviato: dom 1 ott 2023, 20:01
da Rama
non so se possa servire, in lilo.conf vedo:
#bitmap = /boot/tuxlogo.bmp

Re: Splashscreen: è possibile?

Inviato: lun 2 ott 2023, 7:30
da susumella
uso grub2, ma grazie!

Re: Splashscreen: è possibile?

Inviato: lun 2 ott 2023, 16:38
da rik70
Ma parli del logo del produttore della scheda madre, o dell'hardware, che rimane a schermo fino all'avvio dell'ambiente grafico, oppure dello splash screen che usualmente utilizzano Ubuntu/Debian, etc. ?

Re: Splashscreen: è possibile?

Inviato: mar 3 ott 2023, 9:05
da susumella
A me piacerebbe uno splash screen al posto del log del kernel, fino all'avvio dell'ambiente grafico

Re: Splashscreen: è possibile?

Inviato: mar 3 ott 2023, 12:40
da Rama
non capisco, ho trovato molte guide, ad es. questa non andrebbe bene?
https://askubuntu.com/questions/79500/h ... uring-boot
però trovo più scenografico il log, specie per impressionare i windowisti dandomi arie da hacker;

EDIT
qui trovi (hack8) una dettagliata spiegazione ma si riferisce a Debian e dice che non c'è un modo semplice per la Slack, però parla di kernel 2.6 da compilare, penso che nei kernel recenti framebuffer e altro siano di serie:
https://books.google.it/books?id=_M7LH3 ... og&f=false

Re: Splashscreen: è possibile?

Inviato: mar 3 ott 2023, 17:32
da rik70
E' fattibile, però su Slackware c'è parecchio lavoro da fare.

La premessa, utilizzando gli strumenti attuali, è ottenere 'un avvio silenzioso'.
Bisogna evitare il più possibile che venga scritto "qualcosa" a schermo durante l'avvio del sistema, e su Slack non è semplice:
- bisogna modificare l'initrd e sopprimere tutte le stringhe "echo" che non siano "errori" che si trovano nell'init - /boot/intrd-tree/init;
- stessa cosa per gli script di avvio in /etc/rc.d/
- silenziare grub editando il cfg generato e passare alcuni parametri al kernel.

Fatto questo - se mai fosse realmente possibile "zittire" tutto - hai 2 modi per ottenere uno splash al boot:
- se usi UEFI, devi ricompilare il kernel stock abilitando l'opzione

Codice: Seleziona tutto

CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y
Il risultato è che durante il boot vedi il logo del produttore dell'hardware sino a un certo punto - login grafico o su tty.
- utilizzare plymouth. E qui son dolori: teoricamente bisognerebbe "caricarlo" nell'initrd e qui si aprirebbe un capitolo a parte e complesso.
- o infine una combinazione dei due metodi.

Ho realizzato un video del boot di Slackware su macchina virtuale utilizzando la terza opzione.
Non so però dove caricarlo: qui non me lo consente, anche se è meno di 1MB ed è in formato gzip.
E' un accrocchio abbastanza penoso - plymouth viene gestito non dall'initrd, ma da rc.S. rc.M, rc.6 - ma il risultato dimostra che si potrebbero fare le cose per bene.

Re: Splashscreen: è possibile?

Inviato: mar 3 ott 2023, 20:25
da ponce
si, giustamente se non lo integra Pat (non dico che secondo me sarebbe il caso che lo facesse, eh, anzi) la strada e' tutta in salita e non la vedo assolutamente di facile manutenibilita': sulla sua homepage
Plymouth isn't really designed to be built from source by end users. For it to work correctly, it needs integration with the distribution. Because it starts so early, it needs to be packed into the distribution's initial ram disk, and the distribution needs to poke plymouth to tell it how boot is progressing.

Re: Splashscreen: è possibile?

Inviato: mer 4 ott 2023, 10:19
da susumella
Rama ha scritto:
mar 3 ott 2023, 12:40
non capisco, ho trovato molte guide, ad es. questa non andrebbe bene?
https://askubuntu.com/questions/79500/h ... uring-boot
però trovo più scenografico il log, specie per impressionare i windowisti dandomi arie da hacker;

EDIT
qui trovi (hack8) una dettagliata spiegazione ma si riferisce a Debian e dice che non c'è un modo semplice per la Slack, però parla di kernel 2.6 da compilare, penso che nei kernel recenti framebuffer e altro siano di serie:
https://books.google.it/books?id=_M7LH3 ... og&f=false
Sì, è proprio questo il problema... qualcosa magari si trova anche, ma risale al tardo medioevo, per cui non so se sono guide ancora affidabili (ne dubito) per i kernel più recenti.

Re: Splashscreen: è possibile?

Inviato: mer 4 ott 2023, 10:27
da susumella
ponce ha scritto:
mar 3 ott 2023, 20:25
si, giustamente se non lo integra Pat (non dico che secondo me sarebbe il caso che lo facesse, eh, anzi) la strada e' tutta in salita e non la vedo assolutamente di facile manutenibilita': sulla sua homepage
Plymouth isn't really designed to be built from source by end users. For it to work correctly, it needs integration with the distribution. Because it starts so early, it needs to be packed into the distribution's initial ram disk, and the distribution needs to poke plymouth to tell it how boot is progressing.
Ed invece secondo me dovrebbe... so bene che la filosofia slack è diversa da quella delle altre distro, ma mi ostino a non capire perché dobbiamo sempre limitarci. Di certo uno splash screen non ti cambia la vita, ma sembra in generale che l'estetica sia quasi un'eresia in questa distro. La uso dai primi anni 2000, l'ho abbandonata un paio di volte per altre esigenze, e quando sono tornato l'ho sempre trovata ferma a dove l'avevo lasciata. In 24 anni, dalla 9.0 (se non sbaglio è la prima che ho utilizzato, o forse la 7.qualcosa) ad oggi è cambiato davvero poco (rispetto a molte altre distro): ricordo ancora la guerra per far sì che HAL riconoscesse le chiavette usb (anche se i duri e puri sostenevano che bisognasse montare tutto a mano), o la ricompilazione dei kernel per trovare la configurazione più corretta della mia macchina dell'epoca. Oggi, per fortuna, questi problemi sono superati, ma ho sempre la sensazione di rimanere indietro su qualche punto. Me ne farò una ragione...
Grazie a tutti!

Re: Splashscreen: è possibile?

Inviato: mer 4 ott 2023, 10:39
da rik70
ponce ha scritto:
mar 3 ott 2023, 20:25
Plymouth isn't really designed to be built from source by end users. For it to work correctly, it needs integration with the distribution. Because it starts so early, it needs to be packed into the distribution's initial ram disk, and the distribution needs to poke plymouth to tell it how boot is progressing.
Che poi alla fine anche sulla Slack non sarebbe così difficile.
Fermo restando quanto detto sul "silenziamento", a partire dall'initrd, una volta installato plymouth:

Codice: Seleziona tutto

mkdir -pv /boot/initrd-tree/usr/share/plymouth/themes
cp -av /usr/share/plymouth/themes/spinner /boot/initrd-tree/usr/share/plymouth/themes
cp -av /usr/share/plymouth/plymouthd.defaults /boot/initrd-tree/usr/share/plymouth
cp -av /usr/sbin/plymouthd /usr/bin/plymouth /boot/initrd-tree/bin/
Poi, in /boot/initrd-tree/init

Codice: Seleziona tutto

[...]
# If udevd is available, use it to generate block devices
# else use mdev to read sysfs and generate the needed devices 
if [ -x /sbin/udevd -a -x /sbin/udevadm ]; then
  /sbin/udevd --daemon --resolve-names=never
  /sbin/udevadm trigger --subsystem-match=block --action=add
  /sbin/udevadm settle --timeout=10
else
  [ "$DEVTMPFS" != "1" ] && mdev -s
fi

#plymouth
[[ "$RUNLEVEL" != "1" ]] && /bin/plymouthd

Codice: Seleziona tutto

[...]
# Load kernel modules (ideally this was already done by udev):
if [ ! -d /lib/modules/$(uname -r) ]; then
  echo "No kernel modules found for Linux $(uname -r)."
elif [ -x ./load_kernel_modules ]; then # use load_kernel_modules script:
#  echo "${INITRD}:  Loading kernel modules from initrd image:"
  . ./load_kernel_modules
else # load modules (if any) in order:
  if ls /lib/modules/$(uname -r)/*.*o 1> /dev/null 2> /dev/null ; then
#    echo "${INITRD}:  Loading kernel modules from initrd image:"
    for module in /lib/modules/$(uname -r)/*.*o ; do
      /sbin/modprobe $module
    done
    unset module
  fi
fi

#plymouth
/bin/plymouth --show-splash

Codice: Seleziona tutto

[...]
unset ERR
mount -o move /proc /mnt/proc
mount -o move /sys /mnt/sys
mount -o move /run /mnt/run

[ "$DEVTMPFS" = "1" ] && mount -o move /dev /mnt/dev
# echo "${INITRD}:  exiting"
#plymouth
/bin/plymouth --newroot=/mnt
exec switch_root /mnt $INIT $RUNLEVEL
Si rigenera l'initrd senza -il flag '-c' e ora plymouth parte dall'initramfs come deve.

Poi bisogna gestirlo sui diversi run level, come fanno le distribuzione che lo utilizzano.
In rc.M ad esempio bisognerebbe "chiuderlo"; l'accrocchio mio è questo

Codice: Seleziona tutto

[...]
# Start the local setup procedure.
if [ -x /etc/rc.d/rc.local ]; then
  /etc/rc.d/rc.local
fi

# All done.
# plymouth
(sleep 5 && /usr/bin/plymouth quit && clear) &
e fa parecchio pena.
Poi occorre farlo ripartire in rc.6

Codice: Seleziona tutto

[...]
# Set the path.
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin
## plymouth
sleep 3
/usr/sbin/plymouthd
#sleep 5
sleep 3
/usr/bin/plymouth --show-splash
sleep 3
## end plymouth
Funziona ma.... ne vale pena?
Boh... a seconda dei gusti.
C'è un unico problema quando fa lo "switch" del filesystem in /mnt - vedi parte finale di /boot/initrd-tree/init:
a schermo compare per un attimo qualcosa tipo "INIT <VERSIONE> Booting" che da un leggero "tremolio".
Non credo si possa silenziare - non ho trovato nulla negli script di init.

Comunque, tutto questo per dire: la Slack è la Slack e può fare anche queste cose ^^

** Se riesco a non sparpagliare dati personali a destra e a manca posto il video del boot.

Re: Splashscreen: è possibile?

Inviato: mer 4 ott 2023, 11:02
da susumella
rik70 ha scritto:
mer 4 ott 2023, 10:39
ponce ha scritto:
mar 3 ott 2023, 20:25
Plymouth isn't really designed to be built from source by end users. For it to work correctly, it needs integration with the distribution. Because it starts so early, it needs to be packed into the distribution's initial ram disk, and the distribution needs to poke plymouth to tell it how boot is progressing.
Che poi alla fine anche sulla Slack non sarebbe così difficile.
Fermo restando quanto detto sul "silenziamento", a partire dall'initrd, una volta installato plymouth:

Codice: Seleziona tutto

mkdir -pv /boot/initrd-tree/usr/share/plymouth/themes
cp -av /usr/share/plymouth/themes/spinner /boot/initrd-tree/usr/share/plymouth/themes
cp -av /usr/share/plymouth/plymouthd.defaults /boot/initrd-tree/usr/share/plymouth
cp -av /usr/sbin/plymouthd /usr/bin/plymouth /boot/initrd-tree/bin/
Poi, in /boot/initrd-tree/init

Codice: Seleziona tutto

[...]
# If udevd is available, use it to generate block devices
# else use mdev to read sysfs and generate the needed devices 
if [ -x /sbin/udevd -a -x /sbin/udevadm ]; then
  /sbin/udevd --daemon --resolve-names=never
  /sbin/udevadm trigger --subsystem-match=block --action=add
  /sbin/udevadm settle --timeout=10
else
  [ "$DEVTMPFS" != "1" ] && mdev -s
fi

#plymouth
[[ "$RUNLEVEL" != "1" ]] && /bin/plymouthd

Codice: Seleziona tutto

[...]
# Load kernel modules (ideally this was already done by udev):
if [ ! -d /lib/modules/$(uname -r) ]; then
  echo "No kernel modules found for Linux $(uname -r)."
elif [ -x ./load_kernel_modules ]; then # use load_kernel_modules script:
#  echo "${INITRD}:  Loading kernel modules from initrd image:"
  . ./load_kernel_modules
else # load modules (if any) in order:
  if ls /lib/modules/$(uname -r)/*.*o 1> /dev/null 2> /dev/null ; then
#    echo "${INITRD}:  Loading kernel modules from initrd image:"
    for module in /lib/modules/$(uname -r)/*.*o ; do
      /sbin/modprobe $module
    done
    unset module
  fi
fi

#plymouth
/bin/plymouth --show-splash

Codice: Seleziona tutto

[...]
unset ERR
mount -o move /proc /mnt/proc
mount -o move /sys /mnt/sys
mount -o move /run /mnt/run

[ "$DEVTMPFS" = "1" ] && mount -o move /dev /mnt/dev
# echo "${INITRD}:  exiting"
#plymouth
/bin/plymouth --newroot=/mnt
exec switch_root /mnt $INIT $RUNLEVEL
Si rigenera l'initrd senza -il flag '-c' e ora plymouth parte dall'initramfs come deve.

Poi bisogna gestirlo sui diversi run level, come fanno le distribuzione che lo utilizzano.
In rc.M ad esempio bisognerebbe "chiuderlo"; l'accrocchio mio è questo

Codice: Seleziona tutto

[...]
# Start the local setup procedure.
if [ -x /etc/rc.d/rc.local ]; then
  /etc/rc.d/rc.local
fi

# All done.
# plymouth
(sleep 5 && /usr/bin/plymouth quit && clear) &
e fa parecchio pena.
Poi occorre farlo ripartire in rc.6

Codice: Seleziona tutto

[...]
# Set the path.
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin
## plymouth
sleep 3
/usr/sbin/plymouthd
#sleep 5
sleep 3
/usr/bin/plymouth --show-splash
sleep 3
## end plymouth
Funziona ma.... ne vale pena?
Boh... a seconda dei gusti.
C'è un unico problema quando fa lo "switch" del filesystem in /mnt - vedi parte finale di /boot/initrd-tree/init:
a schermo compare per un attimo qualcosa tipo "INIT <VERSIONE> Booting" che da un leggero "tremolio".
Non credo si possa silenziare - non ho trovato nulla negli script di init.

Comunque, tutto questo per dire: la Slack è la Slack e può fare anche queste cose ^^

** Se riesco a non sparpagliare dati personali a destra e a manca posto il video del boot.
Grazie mille!

Re: Splashscreen: è possibile?

Inviato: mer 4 ott 2023, 11:52
da rik70
rik70 ha scritto:
mer 4 ott 2023, 10:39
C'è un unico problema quando fa lo "switch" del filesystem in /mnt - vedi parte finale di /boot/initrd-tree/init:
a schermo compare per un attimo qualcosa tipo "INIT <VERSIONE> Booting" che da un leggero "tremolio".
Spetta, ho trovato: non c'è bisogno di silenziare nulla, nemmeno l'initrd.
Plymouth ha bisogno di /dev/pts e alcuni flags per "oscurare" i messaggi durante il boot.
Quindi in /boot/initrd-init/init

Codice: Seleziona tutto

#plymouth
[[ "$RUNLEVEL" != "1" ]] && /bin/plymouthd
va sostituito con

Codice: Seleziona tutto

#plymouth
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts -o nosuid,noexec,gid=5,mode=620
[[ "$RUNLEVEL" != "1" ]] && /bin/plymouthd --mode=boot --attach-to-session
Non c'è più bisogno di fare "clear" di sorta.
Quindi in /etc/rc.M, alla fine del file:

Codice: Seleziona tutto

[...]
# All done.

# plymouth
(sleep 5 && /usr/bin/plymouth quit) &
Riscritto anche /etc/rc.d/rc.6:

Codice: Seleziona tutto

[...]
# Set the path.
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin

## plymouth
/usr/sbin/plymouthd --attach-to-session --mode=shutdown
/usr/bin/plymouth --show-splash
Non c'è più bisogno di "sleep" di sorta.

Il boot è perfetto ora, completamente silenzioso.
Se poi uno si vuole vedere i log, preme il classico ESC.

Re: Splashscreen: è possibile?

Inviato: mer 4 ott 2023, 12:54
da susumella
rik70 ha scritto:
mer 4 ott 2023, 10:39
ponce ha scritto:
mar 3 ott 2023, 20:25
Plymouth isn't really designed to be built from source by end users. For it to work correctly, it needs integration with the distribution. Because it starts so early, it needs to be packed into the distribution's initial ram disk, and the distribution needs to poke plymouth to tell it how boot is progressing.
Che poi alla fine anche sulla Slack non sarebbe così difficile.
Fermo restando quanto detto sul "silenziamento", a partire dall'initrd, una volta installato plymouth:

Codice: Seleziona tutto

mkdir -pv /boot/initrd-tree/usr/share/plymouth/themes
cp -av /usr/share/plymouth/themes/spinner /boot/initrd-tree/usr/share/plymouth/themes
cp -av /usr/share/plymouth/plymouthd.defaults /boot/initrd-tree/usr/share/plymouth
cp -av /usr/sbin/plymouthd /usr/bin/plymouth /boot/initrd-tree/bin/
Poi, in /boot/initrd-tree/init

Codice: Seleziona tutto

[...]
# If udevd is available, use it to generate block devices
# else use mdev to read sysfs and generate the needed devices 
if [ -x /sbin/udevd -a -x /sbin/udevadm ]; then
  /sbin/udevd --daemon --resolve-names=never
  /sbin/udevadm trigger --subsystem-match=block --action=add
  /sbin/udevadm settle --timeout=10
else
  [ "$DEVTMPFS" != "1" ] && mdev -s
fi

#plymouth
[[ "$RUNLEVEL" != "1" ]] && /bin/plymouthd

Codice: Seleziona tutto

[...]
# Load kernel modules (ideally this was already done by udev):
if [ ! -d /lib/modules/$(uname -r) ]; then
  echo "No kernel modules found for Linux $(uname -r)."
elif [ -x ./load_kernel_modules ]; then # use load_kernel_modules script:
#  echo "${INITRD}:  Loading kernel modules from initrd image:"
  . ./load_kernel_modules
else # load modules (if any) in order:
  if ls /lib/modules/$(uname -r)/*.*o 1> /dev/null 2> /dev/null ; then
#    echo "${INITRD}:  Loading kernel modules from initrd image:"
    for module in /lib/modules/$(uname -r)/*.*o ; do
      /sbin/modprobe $module
    done
    unset module
  fi
fi

#plymouth
/bin/plymouth --show-splash

Codice: Seleziona tutto

[...]
unset ERR
mount -o move /proc /mnt/proc
mount -o move /sys /mnt/sys
mount -o move /run /mnt/run

[ "$DEVTMPFS" = "1" ] && mount -o move /dev /mnt/dev
# echo "${INITRD}:  exiting"
#plymouth
/bin/plymouth --newroot=/mnt
exec switch_root /mnt $INIT $RUNLEVEL
Si rigenera l'initrd senza -il flag '-c' e ora plymouth parte dall'initramfs come deve.

Poi bisogna gestirlo sui diversi run level, come fanno le distribuzione che lo utilizzano.
In rc.M ad esempio bisognerebbe "chiuderlo"; l'accrocchio mio è questo

Codice: Seleziona tutto

[...]
# Start the local setup procedure.
if [ -x /etc/rc.d/rc.local ]; then
  /etc/rc.d/rc.local
fi

# All done.
# plymouth
(sleep 5 && /usr/bin/plymouth quit && clear) &
e fa parecchio pena.
Poi occorre farlo ripartire in rc.6

Codice: Seleziona tutto

[...]
# Set the path.
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin
## plymouth
sleep 3
/usr/sbin/plymouthd
#sleep 5
sleep 3
/usr/bin/plymouth --show-splash
sleep 3
## end plymouth
Funziona ma.... ne vale pena?
Boh... a seconda dei gusti.
C'è un unico problema quando fa lo "switch" del filesystem in /mnt - vedi parte finale di /boot/initrd-tree/init:
a schermo compare per un attimo qualcosa tipo "INIT <VERSIONE> Booting" che da un leggero "tremolio".
Non credo si possa silenziare - non ho trovato nulla negli script di init.

Comunque, tutto questo per dire: la Slack è la Slack e può fare anche queste cose ^^

** Se riesco a non sparpagliare dati personali a destra e a manca posto il video del boot.
Allora... c'ho provato e ci sono riuscito a metà :D!
Lo spinner appare solo in fase di spegnimento e non di accensione, il che mi fa dire che la configurazione è corretta, ma che l'initrd generato è sbagliato. Sapresti dirmi come generi l'initrd?