RaspberryTV


Home Page | Commenti | Articoli | Faq | Documenti | Ricerca | Archivio | Storie dalla Sala Macchine | Contribuire | Imposta lingua:en it | Login/Register


Buon Giorno Agente Sysadmin, la sua missione, se la vuole accettare (e se non e' chiaro non e' che puoi non accettarla, e' solo un modo di dire capiscimiamia), e' di avere un numero di grossi schermi in giro per l'ufficio che possano mostare sequenze di grafici, dati statistici o altre cagate che ci possono venire in mente in un ciclo continuo. Cosi' tanto per annoiare tutti senza fornire nessuna informazione utile. Gli schermi sono gia' ordinati, sono delle 'Smart' Tv. ...Ok, adesso puoi andare, che cappero aspetti?

Raspberry PI

E con queste istruzioni incredibilmente chiare e dettagliate, fui spedito al lavoro. E dato che gli schermi erano gia' arrivati ed avrebbero dovuto essere installati nel giro di qualche giorno non e' che avessi tanto tempo da cazzeggiare.

Ci sono un paio di alternative, dato che questi cosi si suppone siano Tv "Smart", potrei semplicemente usare una applicazione come VNC Viewer sul televisore stesso per attaccarmi ad un server ed usare un browser con un plugin di 'rotazione' per mostrare le varie tab in sequenza.

Ma questo significa configurare la televisione per collegarsi alla nostra rete e non e' che la cosa mi riempia di gioia. Poi bisogna vedere quanto e' "smart" la televisione.

Una alternativa e' usare qualche cosa tipo una Raspberry PI ed usare lo schermo semplicemente come uno schermo. A questo punto si tratta di far funzionare un browser sulla Pi o Vnc di nuovo. In ogni caso pare che un server vnc mi servira', quindi cominciamo con quello.

Dato che avevo a disposizione un paio di vecchi desktop inutlizzati ma ancora funzionanti (Dell Precision credo) ne acchippai uno e ci installai sopra una distro CentOs 7.

Niente di straordinario, diedi alla macchina un IP fisso fuori dal range di DHCP e niente ambiente grafico. Dopo di che, mi misi a sistemare le cose in modo da poter far funzionare VNCServer ed un Browser.

Per cominciare, installi il Virtual Frame Buffer driver per Xorg, questo si porto' dietro tutte le librerie necessarie per una versione ridotta all'osso di X, poi installai Firefox, Xfwm4, Vncserver ed X11Vnc per le sue librerie. Xfwm4 e' necessario perche' altrimenti non esiste uno "schermo" e Firefox non sa come gestire ne' le sue 'tab' ne' come funzionare 'a tutto schermo'.

In sostanza quello che feci fu:

yum install -y xorg-x11-drv-fbdev
yum install -y firefox
yum install -y xfwm4
yum install -y vncserver
yum install -y x11vnc

(ovviamente se usate una distribuzione diversa da CentOS dovrete aggiustare i comandi in modo acconcio alla vostra distribuzione)

Dopo di che si tratta di configurare il tutto. Cominciamo con Xvfb, il Virtual Frame Buffer che simula lo 'schermo'. E' progettato per funzionare su macchine senza monitor ed anche senza schede grafiche di sorta, che e' esattemente quello che volevo perche' io non volevo nessun monitor attaccato a questa macchina. Xvfb richiede un paio di parametri per poter simulare lo schermo:

/bin/Xvfb $DISPLAY -screen 0 1920x1080x16

Il parametro '$DISPLAY' specifica quale display (numerico) deve essere gestito, dato che questo parametro deve essere ripetuto parecchie volte, la cosa migliore e' di dichiarare una variabile e poi usare sempre quella.

export DISPLAY=:0

La risoluzione di 1920x1080x16 specifica HD con 16bit di colore, che dovrebbe essere piu' che sufficiente per quello che devo fare.

Ora si tratta di configurare il Window Manager ed attaccarlo allo 'schermo':

/bin/xfwm4 --display $DISPLAY --daemon

E con questo, posso avviare firefox e VNC sullo stesso 'schermo'.

/bin/firefox --display $DISPLAY &
/bin/x11vnc -bg -shared -forever -display $DISPLAY -noipv6 -rfbport 5901 -passwdfile /home/vncserver/.vnc/passfile

Il file di password e' usato per specificare quali utenti possono "vedere" lo schermo e quali possono anche interagire. Il file e' un comunissimo file di testo che puo' essere modificato con un qualunque editor di testo. I parametri "shared" e "forever" specificano che il server e' accessibile da piu' client contemporaneamente ed anche quando tutti i client si disconnettono deve continuare a girare.

Adesso si tratta di fare avviare il tutto automaticamente al boot e possibilmente tenerlo in funzione. Per evitare guai ho deciso di creare un utente apposito e far girare il tutto come tale utente, quindi niente processi di root o permessi particolari. Per avviare il tutto nell'ordine giusto ho messo a punto un semplice script:

#!/bin/bash
# start X and a VNC session
 
DISPLAY=:0
export DISPLAY=$DISPLAY
 
# start X with a virtual display 1920x1080 16 colours (HD)
x=`/bin/ps -aux | /bin/grep -c Xvfb`
if [ $x -lt 2 ] ; then
        echo "starting xvfg"
        /bin/Xvfb $DISPLAY -screen 0 1920x1080x16 &
else
        echo "Xvfb already running ($x)"
fi
 
# start fwm4 on top of the display
x=`/bin/ps -aux | /bin/grep -c xfwm4`
if [ $x -lt 2 ] ; then
        echo "starting xfwm4"
        /bin/xfwm4 --display $DISPLAY --daemon
else
        echo "Xfwm4 already running ($x)"
fi
 
# start Firefox
x=`/bin/ps -aux | /bin/grep -c firefox`
if [ $x -lt 2 ] ; then
        echo "starting firefox"
        /bin/firefox --display $DISPLAY &
else
        echo "Firefox already running ($x)"
fi
 
# start vnc
x=`/bin/ps -aux | /bin/grep -c x11vnc`
if [ $x -lt 2 ] ; then
        echo "starting vnc"
        /bin/x11vnc -bg -shared -forever -display $DISPLAY -noipv6 -rfbport 5901 -passwdfile /home/vncserver/.vnc/passfile
else
        echo "x11vnc already running ($x)"
fi
 
exit 0

Questo e' stato aggiunto in cron ogni 5 minuti, se uno dei servizi e' morto, lo script cerca di riavviarlo. Scrive anche un file di log per informare se qualche cosa e' sbagliato.

Una volta fatto questo ho potuto collegarmi usando vncviewer dalla mia macchina ed installare i necesari plugin in Firefox.

In Firefox ho installato TabRotator per gestire la 'rotazione' delle varie tab ed ho creato una lista di "preferiti" con tutti gli URL che avrebbero dovuto essere mostrati. In questo modo, anche se Firefox viene chiuso, al momento di ripartire basta cliccare su "apri tutti gli url" e riavviare il TabRotator.

A questo punto il server era fondamentalmente pronto all'uso. L'unico problema erano i clients. Gli schermi erano stati consegnati ed installati ed era il momento di vedere che facevano.

Quello che scoprii fu che l'unico vncviewer disponibile sul loro 'Android' OS era una schifezza che non solo non funzionava, ma richiedeva anche una licenza per farlo. Onde per cui lasciai perdere quella roba e mi misi a preparare un paio di Raspberry.

Un paio di test mi dissero che il browser disponibile in Raspbian era... carente in termini di plugins, il che significa vnc all the way. Prima di tutto, io voglio che questi cosi si avviini immediatamente e partano con la rete e vncviewer, pertanto devono collegarsi al wifi.

In /etc/wpa_supplicant/wpa_supplicant.conf ho aggiunto il seguente pezzo di configurazione:

network={
 ssid="TheSSIDofTheNetwork"
 psk="##the_password##"
 scan_ssid=1
}

Oh notato che la rete era estremamente lenta ad avviarsi, percui ho deciso di aggiungere un ritardo alla partenza di vncviewer. Per avviare il tutto ho preparato un piccolo script:

sleep 60
/usr/bin/vncviewer -config /home/pi/vncserver.vnc

E adesso e' solo una questione di metterlo in autostart. In /home/pi/.config/lxsession/LXDE-pi/ c'e' un file chiamato 'autostart', in quel file per prima cosa ho rimosso tutti i riferimento ad xscreensaver e poi ho aggiunto:

@sh /home/pi/vncviewer.sh

Ed anche:

@xset s noblank
@xset s off 
@xset -dpms

Queste ultime 3 righe sono per disattivare ogni tipo di screensaver.

Dopo di che in /etc/xdg/autostart ho rimosso il file pprompt.desktop, altrimenti la Pi continua ad informarmi che SSH e' attivo.

Ora e' il momento di creare il file di configurazione per vncviewer. Per farlo ci sono due modi: manuale o automatico. Il modo "automatico" (che proprio automatico non e') e' di avviare vncviewer, collegarsi al server mettendo la spunta in "salva la password" e poi esportare la configurazione in /home/pi/vncserver.vnc (stesso file specificato nello script di startup).

Il modo "manuale" consiste nello scrivere lo stesso vncserver.vnc file che contiene qualche cosa del tipo:

ClientCutText=0
ConnTime=2018-02-28T11:06:13.703Z
EnableChat=0
FriendlyName=vncserver
FullScreen=1
Host=:
Password=
Quality=High
RelativePtr=0
SendKeyEvents=0
SendPointerEvents=0
ServerCutText=0
ShareFiles=0
Uuid=9ad542a9-8b9e-4def-58dd-92b1614dee9b

L'unico problema e' la password che e' ottenibile usando crypt. Ho notato pero' che la versione di crypt in rasbpian ha qualche problema, percui ho usato il modo 'automatico' per ottenere la password hash e poi ho proceduto con un bel copia-ed-incolla.

Facendo alcuni test ho notato che la Pi andava ugualmente in screensaver, percui ho modificato /etc/lightdm/lightdm.conf e nella sezione [Seat:*] ho decommentato e modificato la linea xserver-command=X mettendoci:

xserver-command=X -s 0 -dpms

Un altro problema riscontare e' che la Pi non e' brava a capire a quale risoluzione funziona lo schermo, percui in /boot/config.txt ho messo:

hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=82

Per forzare la Pi ad andare in full-screen ed a risoluzione massima.

Dopo un paio di reboot ho controllato che tutto funzionasse e la Pi si connetteva automaticamente al mio server vnc senza domandare nulla.

A questo punto ho fatto una copia della scheda SD e l'ho clonata per ogni Pi che mi serviva.

Ho anche deciso di fare in modo di spegnere le Pi automaticamente alle 5 di sera, in modo da fargli fare uno shutdown "pulito". Le Pi sono collegate all'USB del televisore, quindi all'accensione del televisore si accendono anche loro.

Per spegnere le Pi ho copiato le chiavi per avere accesso ssh ed ho fatto un semplice script che si collega ad ogni Pi ed esegue un bel sudo /sbin/shutdown -h now e l'ho messo in cronjob sul vnc server.

E con questo ho finito, un'altra missione felicemente conclusa.


I commenti sono aggiunti quando e soprattutto se ho il tempo di guardarli e dopo aver eliminato le cagate, spam, tentativi di phishing et similia. Quindi non trattenete il respiro.

11 messaggi this document does not accept new posts

Anonymous coward

Di Anonymous coward postato il 08/03/2019 11:01

Davide, scusa la domanda stupida (chiaramente mancano molti dettagli per poter capire bene tutto) ma quale è il vantaggio di aprire una sessione vnc per poter usare un firefox su uno schermo "emulato" piuttosto che installare firefox con i relativi plugin sulle singole raspberry ? Letta così sembra che il vncserver sia li solo per permettere di usare un firefox... 

-- Anonymous coward

Davide Bianchi

@ Anonymous coward Di Davide Bianchi postato il 11/03/2019 08:38

installare firefox con i relativi plugin sulle singole raspberry ?

Come detto nell'articolo, la versione di firefox disponibile in Raspbian e' a dir poco "mutilata" e nessuno dei plugin che mi servivano era disponibile o sembrava voler funzionare in modo accettabile. Ecco perche' sono passato alla soluzione VNC.

 

-- Davide Bianchi

Anonymous coward

@ Davide Bianchi Di Anonymous coward postato il 08/04/2019 14:37

Ecco, a proposito della versione di firefox mutilata, e' verissimo. Quello che non capisco e' il perche'. Ormai gli ultimi PI hanno buoni livelli prestazionali.

-- Anonymous coward

Anonymous coward

@ Anonymous coward Di Anonymous coward postato il 12/03/2019 22:53

 

Davide, scusa la domanda stupida (chiaramente mancano molti dettagli per poter capire bene tutto) ma quale è il vantaggio di aprire una sessione vnc per poter usare un firefox su uno schermo "emulato" piuttosto che installare firefox con i relativi plugin sulle singole raspberry ? Letta così sembra che il vncserver sia li solo per permettere di usare un firefox... 

Credo che un vantaggio sia che se si fa una modifica sul server (nuove tab o similari) questa si propaghi a tutti i monitor senza dover riconfigurare tutti i raspberry a manina, sia che siano 2 o 20, ricordiamoci della “pigrizia” degli informatici ;-\)

Marco

 

 

-- Anonymous coward

Davide Bianchi

@ Anonymous coward Di Davide Bianchi postato il 13/03/2019 09:34

Credo che un vantaggio sia che se si fa una modifica sul server (nuove tab o similari) questa si propaghi a tutti i monitor senza dover riconfigurare tutti i raspberry a manina, sia che siano 2 o 20, ricordiamoci della “pigrizia” degli informatici ;-\)

Anche.

 

 

-- Davide Bianchi

Anonymous coward

Di Anonymous coward postato il 08/04/2019 14:28

Mi stupisce una cosa: tu dici che i PI attaccati all' USB del televisore si accendono insieme a quello tuttavia se non erro i PI si aspettano 5V e 3A, di solito le TV ne forniscono di meno, il meno possibile. Sbaglio? Bellissima comunque l' idea di usare i PI.

-- Anonymous coward

Davide Bianchi

@ Anonymous coward Di Davide Bianchi postato il 09/04/2019 08:10

se non erro i PI si aspettano 5V e 3A, di solito le TV ne forniscono di meno, il meno possibile.

Non ho idea di cosa si aspetti la Raspberry, ma si accendevano tranquillamente e funzionavano uguale quindi...

-- Davide Bianchi

Massimo M.

@ Davide Bianchi Di Massimo M. postato il 20/05/2019 11:30

> Non ho idea di cosa si aspetti la Raspberry, ma si accendevano tranquillamente e funzionavano uguale quindi...

 

Per quanto ne so leggiucchiando in rete (io avevo il raspberry 1B), il raspi e' piuttosto pretenzioso sugli alimentatori, chiede almeno 2.5A per andare al 100% di cpu.

Un consiglio che posso darti e' questo: il primo modello aveva la spiacevole tendenza a corrompere fisicamente le sd (mi e' capitato 3 volte, con sd di marche diverse, e sotto ups, quindi era trattato con i guanti), e molti riportano la stessa cosa anche sul 3. Alcuni avevano risolto usando sd industriali, ma mi sembra eccessivo.

Io ho risolto mettendo su sd solo la partizione di boot, con la root su usb, e, appena possibile, la partizione di boot veniva smontata, in modo da usare il meno possibile la sd. In questa maniera non ho mai piu' avuto problemi.

-- Massimo M.

Manuel

Di Manuel postato il 11/04/2019 21:40

Beh, 5V sicuro, e di solito fra 1 e 2A. Magari non sono dei PI3B, ma dei modelli più economici.

 

-- ::: meksONE :::

Anonymous paranoid

Di Anonymous paranoid postato il 15/04/2019 19:04

Molto interessante. Avendo fatto un progetto simile (raspberry che mostra una pagina web) avrei un piccolo suggerimento: è meglio disattivare il logging per evitare di ritrovarsi con la scheda SD formato groviera dopo qualche mese. Io avevo creato una partizione tmpfs in cui riversavo tutta la robaccia. Purtroppo non ricordo esattamente tutti i dettagli ma se ti interessa sradico il pannello e vedo che cosa ho fatto.

-- Anonymous paranoid

Davide Bianchi

@ Anonymous paranoid Di Davide Bianchi postato il 16/04/2019 08:14

Molto interessante. Avendo fatto un progetto simile (raspberry che mostra una pagina web) avrei un piccolo suggerimento: è meglio disattivare il logging per evitare di ritrovarsi con la scheda SD formato groviera

Hai ragione: non ho citato il logging. Quello che ho fatto io e' stato configurare rsyslog per mandare tutto al nostro server di logging remoto. Solo che non l'ho scritto perche' non e' "strettamente" relativo al progetto.

 

-- Davide Bianchi

11 messaggi this document does not accept new posts

Precedente Successivo

Davide Bianchi, lavora come Unix/Linux System Administrator presso una societa' di Hosting in Olanda.

Volete contribuire? Leggete come!.
 
 

Il presente sito e' frutto del sudore della mia fronte (e delle mie dita), se siete interessati a ripubblicare uno degli articoli, documenti o qualunque altra cosa presente in questo sito per cortesia datemene comunicazione (o all'autore dell'articolo se non sono io), cosi' il giorno che faccio delle aggiunte potro' avvisarvi e magari mandarvi il testo aggiornato.


Questo sito era composto con VIM, ora e' composto con VIM ed il famosissimo CMS FdT.

Questo sito non e' ottimizzato per la visione con nessun browser particolare, ne' richiede l'uso di font particolari o risoluzioni speciali. Siete liberi di vederlo come vi pare e piace, o come disse qualcuno: "Finalmente uno dei POCHI siti che ancora funzionano con IE5 dentro Windows 3.1".

Web Interoperability Pleadge Support This Project
Powered By Gojira