Είχα την ανάγκη να εμφανίσω ένα ταμπλό με παρακολούθηση σε πολλές οθόνες στο γραφείο. Υπάρχουν πολλά παλιά Raspberry Pi Model B + και ένας hypervisor με σχεδόν απεριόριστο αριθμό πόρων.
Προφανώς το Raspberry Pi Model B+ δεν έχει αρκετή τυχαιότητα για να διατηρεί το πρόγραμμα περιήγησης σε συνεχή λειτουργία και να αποδίδει πολλά γραφικά σε αυτό, εξαιτίας του οποίου συμβαίνει η σελίδα να είναι εν μέρει bugged και συχνά κολλάει.
Υπήρχε μια αρκετά απλή και κομψή λύση, την οποία θέλω να μοιραστώ μαζί σας.
Όπως γνωρίζετε, όλα τα Raspberries διαθέτουν έναν αρκετά ισχυρό επεξεργαστή βίντεο, ο οποίος είναι εξαιρετικός για αποκωδικοποίηση βίντεο υλικού. Έτσι προέκυψε η ιδέα να εκκινήσουμε ένα πρόγραμμα περιήγησης με πίνακα ελέγχου κάπου αλλού και να μεταφέρουμε μια έτοιμη ροή με μια rendered εικόνα στο raspberry.
Επιπλέον, αυτό θα πρέπει να έχει απλοποιημένη διαχείριση, καθώς σε αυτήν την περίπτωση όλες οι ρυθμίσεις παραμέτρων θα εκτελούνται σε μία εικονική μηχανή, η οποία είναι ευκολότερη η ενημέρωση και η δημιουργία αντιγράφων ασφαλείας.
Όχι νωρίτερα.
Μέρος διακομιστή
Χρησιμοποιούμε έτοιμο
Αναπτύσσουμε μια νέα εικονική μηχανή και πρώτα από όλα την εγκαθιστούμε σε αυτήν
apt-get update
apt-get install -y xserver-xorg nodm fluxbox
sed -i 's/^NODM_USER=.*/NODM_USER=ubuntu/' /etc/default/nodm
Θα χρησιμοποιήσουμε επίσης τη διαμόρφωση για το Xorg, ευγενικά
cat > /etc/X11/xorg.conf <<EOT
Section "Device"
Identifier "device"
Driver "vesa"
EndSection
Section "Screen"
Identifier "screen"
Device "device"
Monitor "monitor"
DefaultDepth 16
SubSection "Display"
Modes "1920x1080" "1280x1024" "1024x768" "800x600"
EndSubSection
EndSection
Section "Monitor"
Identifier "monitor"
HorizSync 20.0 - 50.0
VertRefresh 40.0 - 80.0
Option "DPMS"
EndSection
Section "ServerLayout"
Identifier "layout"
Screen "screen"
EndSection
EOT
systemctl restart nodm
Τώρα θα εγκαταστήσουμε τον Firefox, θα τον τρέξουμε ως υπηρεσία συστήματος, οπότε για ένα πράγμα θα γράψουμε ένα αρχείο μονάδας για αυτόν:
apt-get install -y firefox xdotool
cat > /etc/systemd/system/firefox.service <<EOT
[Unit]
Description=Firefox
After=network.target
[Service]
Restart=always
User=ubuntu
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/ubuntu/.Xauthority"
ExecStart=/usr/bin/firefox -url 'http://example.org/mydashboard'
ExecStartPost=/usr/bin/xdotool search --sync --onlyvisible --class "Firefox" windowactivate key F11
[Install]
WantedBy=graphical.target
EOT
systemctl enable firefox
systemctl start firefox
Χρειαζόμαστε το Xdotool για να τρέξουμε το firefox αμέσως σε λειτουργία πλήρους οθόνης.
Χρήση παραμέτρου -url
μπορείτε να καθορίσετε οποιαδήποτε σελίδα έτσι ώστε να ανοίγει αυτόματα κατά την εκκίνηση του προγράμματος περιήγησης.
Σε αυτό το στάδιο, το περίπτερο μας είναι έτοιμο, αλλά τώρα πρέπει να εξάγουμε την εικόνα μέσω του δικτύου σε άλλες οθόνες και συσκευές. Για να το κάνουμε αυτό, θα χρησιμοποιήσουμε τις δυνατότητες
Για αυτό χρειαζόμαστε δύο πράγματα:
apt-get install -y make gcc ffmpeg
cd /tmp/
wget https://github.com/ccrisan/streameye/archive/master.tar.gz
tar xvf master.tar.gz
cd streameye-master/
make
make install
cat > /etc/systemd/system/streameye.service <<EOT
[Unit]
Description=streamEye
After=network.target
[Service]
Restart=always
User=ubuntu
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/ubuntu/.Xauthority"
ExecStart=/bin/sh -c 'ffmpeg -f x11grab -s 1920x1080 -i :0 -r 1 -f mjpeg -q:v 5 - 2>/dev/null | streameye'
[Install]
WantedBy=graphical.target
EOT
systemctl enable streameye
systemctl start streameye
Επειδή η εικόνα μας δεν απαιτεί γρήγορη ενημέρωση, καθόρισα τον ρυθμό ανανέωσης: 1 καρέ ανά δευτερόλεπτο (παράμετρος -r 1
) και ποιότητα συμπίεσης: 5 (παράμετρος -q:v 5
)
Τώρα ας προσπαθήσουμε να πάμε στο
Τμήμα πελάτη
Είναι ακόμα πιο εύκολο εδώ, όπως είπα, θα χρησιμοποιήσουμε το Raspberry Pi Model B +.
Πρώτα απ 'όλα, ας το εγκαταστήσουμε
Θα χρειαστεί επίσης να διαθέσουμε περισσότερη μνήμη για το τσιπ βίντεο μας, για αυτό θα επεξεργαστούμε /boot/config.txt
gpu_mem=128
Ας εκκινήσουμε το νέο μας σύστημα και μην ξεχάσουμε να αρχικοποιήσουμε το μπρελόκ pacman, εγκαταστήστε
pacman -Sy omxplayer
Είναι αξιοσημείωτο ότι το OMXPlayer μπορεί να λειτουργήσει χωρίς x, οπότε το μόνο που χρειαζόμαστε είναι να γράψουμε ένα αρχείο μονάδας για αυτό και να εκτελέσουμε:
cat > /etc/systemd/system/omxplayer.service <<EOT
[Unit]
Description=OMXPlayer
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
Restart=always
ExecStart=/usr/bin/omxplayer -r --live -b http://your-vm:8080/ --aspect-mode full
[Install]
WantedBy=multi-user.target
EOT
systemctl enable omxplayer
systemctl start omxplayer
Ως παράμετρος -b http://your-vm:8080/
περνάμε το url από τον διακομιστή μας.
Αυτό είναι όλο, μια εικόνα από τον διακομιστή μας θα πρέπει να εμφανιστεί αμέσως στη συνδεδεμένη οθόνη. Σε περίπτωση προβλημάτων, η ροή θα επανεκκινηθεί αυτόματα και οι πελάτες θα συνδεθούν ξανά σε αυτήν.
Ως μπόνους, μπορείτε να εγκαταστήσετε την εικόνα που προκύπτει ως προφύλαξη οθόνης σε όλους τους υπολογιστές του γραφείου. Για αυτό θα χρειαστείτε
mode: one
selected: 0
programs:
"Monitoring Screen" mpv --really-quiet --no-audio --fs
--loop=inf --no-stop-screensaver
--wid=$XSCREENSAVER_WINDOW
http://your-vm:8080/ n
maze -root n
electricsheep --root 1 n
Τώρα οι συνάδελφοί σας θα είναι πολύ χαρούμενοι 🙂
Πηγή: www.habr.com