Splashscreen: è possibile?
Moderatore: Staff
1) Citare sempre la versione di Slackware64 usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware64, se l'argomento è Slackware32 o generale usate rispettivamente il forum Slackware o Gnu/Linux in genere.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Splashscreen: è possibile?
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?
- Rama
- Linux 3.x
- Messaggi: 552
- Iscritto il: sab 29 mar 2008, 12:18
- Slackware: 15.0 x86_64
- Kernel: 5.15.117
- Desktop: KDE 5.23
- Distribuzione: linuxmint-21.1-xfce
- Località: Novara, provincia
Re: Splashscreen: è possibile?
#bitmap = /boot/tuxlogo.bmp
Re: Splashscreen: è possibile?
-
- Iper Master
- Messaggi: 2483
- Iscritto il: gio 10 mar 2011, 9:21
- Slackware: 15.0
- Kernel: 5.15.x-generic
- Desktop: Sway
- Distribuzione: Arch Linux
Re: Splashscreen: è possibile?
Re: Splashscreen: è possibile?
- Rama
- Linux 3.x
- Messaggi: 552
- Iscritto il: sab 29 mar 2008, 12:18
- Slackware: 15.0 x86_64
- Kernel: 5.15.117
- Desktop: KDE 5.23
- Distribuzione: linuxmint-21.1-xfce
- Località: Novara, provincia
Re: Splashscreen: è possibile?
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
-
- Iper Master
- Messaggi: 2483
- Iscritto il: gio 10 mar 2011, 9:21
- Slackware: 15.0
- Kernel: 5.15.x-generic
- Desktop: Sway
- Distribuzione: Arch Linux
Re: Splashscreen: è possibile?
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
- 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.
- ponce
- Iper Master
- Messaggi: 2991
- Iscritto il: mer 5 mar 2008, 16:45
- Nome Cognome: Matteo Bernardini
- Slackware: slackware64-current
- Kernel: 6.5.3
- Desktop: lxde
- Località: Pisa
- Contatta:
Re: Splashscreen: è possibile?
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?
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.Rama ha scritto: ↑mar 3 ott 2023, 12:40non 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?
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...ponce ha scritto: ↑mar 3 ott 2023, 20:25si, 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 homepagePlymouth 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.
Grazie a tutti!
-
- Iper Master
- Messaggi: 2483
- Iscritto il: gio 10 mar 2011, 9:21
- Slackware: 15.0
- Kernel: 5.15.x-generic
- Desktop: Sway
- Distribuzione: Arch Linux
Re: Splashscreen: è possibile?
Che poi alla fine anche sulla Slack non sarebbe così difficile.ponce ha scritto: ↑mar 3 ott 2023, 20:25Plymouth 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.
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/
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
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) &
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
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?
Grazie mille!rik70 ha scritto: ↑mer 4 ott 2023, 10:39Che poi alla fine anche sulla Slack non sarebbe così difficile.ponce ha scritto: ↑mar 3 ott 2023, 20:25Plymouth 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.
Fermo restando quanto detto sul "silenziamento", a partire dall'initrd, una volta installato plymouth:Poi, in /boot/initrd-tree/initCodice: 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/
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
Si rigenera l'initrd senza -il flag '-c' e ora plymouth parte dall'initramfs come deve.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
Poi bisogna gestirlo sui diversi run level, come fanno le distribuzione che lo utilizzano.
In rc.M ad esempio bisognerebbe "chiuderlo"; l'accrocchio mio è questoe fa parecchio pena.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) &
Poi occorre farlo ripartire in rc.6Funziona ma.... ne vale pena?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
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.
-
- Iper Master
- Messaggi: 2483
- Iscritto il: gio 10 mar 2011, 9:21
- Slackware: 15.0
- Kernel: 5.15.x-generic
- Desktop: Sway
- Distribuzione: Arch Linux
Re: Splashscreen: è possibile?
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
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
Quindi in /etc/rc.M, alla fine del file:
Codice: Seleziona tutto
[...]
# All done.
# plymouth
(sleep 5 && /usr/bin/plymouth quit) &
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
Il boot è perfetto ora, completamente silenzioso.
Se poi uno si vuole vedere i log, preme il classico ESC.
Re: Splashscreen: è possibile?
Allora... c'ho provato e ci sono riuscito a metàrik70 ha scritto: ↑mer 4 ott 2023, 10:39Che poi alla fine anche sulla Slack non sarebbe così difficile.ponce ha scritto: ↑mar 3 ott 2023, 20:25Plymouth 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.
Fermo restando quanto detto sul "silenziamento", a partire dall'initrd, una volta installato plymouth:Poi, in /boot/initrd-tree/initCodice: 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/
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
Si rigenera l'initrd senza -il flag '-c' e ora plymouth parte dall'initramfs come deve.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
Poi bisogna gestirlo sui diversi run level, come fanno le distribuzione che lo utilizzano.
In rc.M ad esempio bisognerebbe "chiuderlo"; l'accrocchio mio è questoe fa parecchio pena.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) &
Poi occorre farlo ripartire in rc.6Funziona ma.... ne vale pena?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
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.

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?