Difference between revisions of "Web Kiosk CentOS 7"

From Michael's Information Zone
Jump to navigation Jump to search
(Created page with "==Purpose== Powers that be wanted a TV mounted in a lobby, with content playing on it for visitors to ignore. At first I was told to install a flash drive and play images with...")
 
 
(73 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
==Purpose==
 
==Purpose==
Powers that be wanted a TV mounted in a lobby, with content playing on it for visitors to ignore. At first I was told to install a flash drive and play images with the flush mount TV. Instead I thought it would be a good idea to have a NUC installed behind the TV running a web browser in full screen mode, displaying a WordPress site that my boss could manage (He really likes wordpress).
+
Boot into Chrome Kiosk mode and display a web page for digital signage.
==Hardware==
+
 
Intel BOXNUC6CAYH
 
-2GB DDR3 RAM (I had laying around, should be enough to display a single web page and run the background tasks)
 
-Intel(R) Celeron(R) CPU J3455 @ 1.50GHz (Came with the NUC. Just enough to display a web page and run WordPress)
 
-KingDian S100 16GB SSD (This was dirt cheap, and will probably die with the lack of RAM installed.)
 
<br>
 
<br>
 
This is connected to the wifi since there is no ethernet installed behind the TV. But since the site is on the unit I can live with broken connections. A simple script later on should take care of this.
 
 
==Setup==
 
==Setup==
A fresh install of CentOS 7, and the usual basics.
+
===Packages===
 +
A fresh install of CentOS 7 minimal. Please note the following
 +
*x11 server did not install with the group install of Xfce, so it was installed separately.
 +
*<ref>https://bbs.archlinux.org/viewtopic.php?id=225780</ref>Keyboard and mouse did not work out the box, and I had to install the evdev drivers.
 +
====Base Packages====
 
<pre>
 
<pre>
 
yum -y update
 
yum -y update
 
yum -y install epel-release
 
yum -y install epel-release
 
yum makecache
 
yum makecache
 +
yum -y install chromium  wget zstd xorg-x11-xinit NetworkManager-wifi
 +
</pre>
 +
 +
====XFCE====
 +
<pre>
 +
yum -y group install Xfce
 +
yum -y install xorg-x11-drv-evdev xorg-x11-server-Xorg
 +
</pre>
 +
 +
====OpenBox (Preferred)====
 +
<ref>http://xinerama.blogspot.com/2018/09/installing-openbox-on-centos-75.html</ref>
 +
<pre>
 +
yum install -y openbox xorg-x11-drv-libinput xorg-x11-server-utils xorg-x11-xinit libev
 +
</pre>
 +
 +
====Unclutter====
 +
*Install unclutter<ref>https://www.archlinux.org/packages/community/x86_64/unclutter/</ref><ref>https://stackoverflow.com/questions/660613/how-do-you-hide-the-mouse-pointer-under-linux-x11</ref>, this is useful for getting rid of the mouse pointer when not in use.
 +
*NOTE: I ran into issues downloading from archlinux, quick and dirty google search had me run across a git repo.<ref>https://ostechnix.com/auto-hide-mouse-pointer-using-unclutter-after-a-certain-time/#:~:text=Auto%20Hide%20Mouse%20Pointer%20Using%20Unclutter%20After%20A%20Certain%20Time%20In%20Linux&text=If%20the%20mouse%20cursor%20has,after%205%20seconds%20by%20default.</ref>
 +
=====Repo method=====
 +
This has not been fully tested and may contain bad code.
 +
<pre>
 +
yum install -y git libev-devel libX11-devel libXt-devel libXi-devel asciidoc
 +
yum groupinstall "Development Tools"
 +
git clone https://github.com/Airblader/unclutter-xfixes && cd unclutter-xfixes
 +
mkdir /usr/share/licenses/unclutter/
 +
make
 +
make install
 +
</pre>
 +
=====Arch method=====
 +
<pre>
 +
wget -O unclutter.tar.zst --content-disposition --max-redirect=5 https://www.archlinux.org/packages/community/x86_64/unclutter/download/
 +
zstd -d unclutter.tar.zst -o unclutter.tar
 +
tar -xf unclutter.tar
 +
mv usr/bin/unclutter /usr/bin/unclutter
 +
rm -rf usr
 
</pre>
 
</pre>
 +
 +
===TTY1 Autologin===
 +
====TTY Config====
 
Now create the auto-login process.
 
Now create the auto-login process.
 
<pre>
 
<pre>
Line 33: Line 68:
 
fi
 
fi
 
EOF
 
EOF
 +
</pre>
 +
====Auto Start Window Manager====
 +
*Choose which one you want, startxfce4 or openbox-session.
 +
<pre>
 +
cat << EOF>>/home/publicuser/.xinitrc
 +
exec openbox-session
 +
EOF
 +
</pre>
 +
Reboot and you should see the desktop start up. If it does not troubleshoot.
 +
 +
===Configure Chromium Auto-Start===
 +
====XFCE====
 +
<ref>https://www.danpurdy.co.uk/web-development/raspberry-pi-kiosk-screen-tutorial/</ref><ref>https://superuser.com/questions/461035/disable-google-chrome-session-restore-functionality</ref>
 +
<pre>
 +
cat << EOF>>/etc/xdg/autostart/kiosk.desktop
 +
[Desktop Entry]
 +
Encoding=UTF-8
 +
Name=Kiosk
 +
GenericName=program
 +
Comment=LobbyKiosk
 +
Exec=chromium-browser --noerrdialogs --kiosk http://siteurl.tld
 +
Icon=/usr/share/pixmaps/program.jpg
 +
Terminal=false
 +
Type=Application
 +
Categories=
 +
OnlyShowIn=XFCE;
 +
EOF
 +
</pre>
 +
 +
====OpenBox====
 +
<pre>
 +
mkdir -p /home/publicuser/.config/openbox
 +
 +
cat << EOF > /home/publicuser/.config/openbox/autostart
 +
/usr/bin/xset -dpms s off s noblank &
 +
/usr/bin/chromium-browser --user-data-dir=/home/publicuser --noerrdialogs --kiosk https://site.tld/webpage &
 +
/usr/bin/unclutter &
 +
EOF
 +
</pre>
  
cat << EOF>>/hom/publicuser/.xinitrc
+
===Configure Power Settings and Disable Mouse Pointer===
exec startxfce4
+
*<b>NOTE :</b> This is configured for xfce. Another set of instructions will follow for openbox.
 +
We want to prevent the system from going to sleep, blanking the screen, loading the screen saver<ref>https://superuser.com/questions/644804/disable-screensaver-screen-blank-via-command-line</ref>, or showing the pointer on the screen.
 +
<br>
 +
One issue I am having is understanding the best method for exporting the display. I am too used to working in bash and not with a gui. The following export does not work, but the display settings appear to still work.
 +
<br>
 +
Initially the xset commands were getting ignored by xfce power management. In order to get around this I had to use xfconf-query<ref>https://askubuntu.com/questions/407287/change-xfce4-power-manager-option-from-terminal</ref> to make things stick
 +
*Create the script
 +
<pre>
 +
cat << EOF>>/home/publicuser/power.sh
 +
#!/bin/sh
 +
sleep 10
 +
export DISPLAY=$(who | grep -E "publicuser pts\/[0-9]" | grep -Eo "\(:[0-9][.]?[0-9]?\)" | sed 's/(//; s/)//')
 +
xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/dpms-enabled -s false
 +
/usr/bin/unclutter -grab
 
EOF
 
EOF
  
 +
chmod +x /home/publicuser/power.sh
 +
sed -i 's/<\/property>/\ \ <property\ name=\"blank-on-ac\"\ type=\"int\"\ value=\"0\"\/>\n&/g' /home/publicuser/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-power-manager.xml
 +
</pre>
 +
*Create the auto-launch of the script.
 +
<pre>
 +
cat << EOF>>/etc/xdg/autostart/power.desktop
 +
[Desktop Entry]
 +
Encoding=UTF-8
 +
Name=powersettings
 +
GenericName=program3
 +
Comment=DisablePower
 +
Exec=/home/publicuser/power.sh
 +
Icon=/usr/share/pixmaps/program.jpg
 +
Terminal=false
 +
Type=Application
 +
Categories=
 +
OnlyShowIn=XFCE;
 +
EOF
 +
</pre>
 +
===Reload Chromium via CRON===
 +
Ran into an issue with flaky wifi and Chromium not reloading the page during a gateway timeout. Add a cron job for publicuser with the following
 +
<pre>
 +
@hourly DISPLAY=:0 /home/publicuser/restart.sh
 
</pre>
 
</pre>
At this point we can install the desktop interface. Something I do not do a lot of which required some googling<ref>https://www.centos.org/forums/viewtopic.php?t=48288</ref>.
+
Create the restart script at /home/publicuser/restart.sh
 
<pre>
 
<pre>
yum -y install htop nano xorg-x11-server-Xorg smartmontools
+
#!/bin/bash
yum -y group install Xfce
+
killall chromium-browser
reboot
+
sleep 1
 +
/usr/bin/chromium-browser --user-data-dir=/home/publicuser --noerrdialogs --kiosk https://site.tld/webpage &
 +
</pre>
 +
Mark executable
 +
<pre>
 +
chmod u+x /home/publicuser/restart.sh
 
</pre>
 
</pre>
After the reboot, you should see the desktop start up. If it does not troublshoot.
 

Latest revision as of 12:43, 18 May 2022

Purpose

Boot into Chrome Kiosk mode and display a web page for digital signage.

Setup

Packages

A fresh install of CentOS 7 minimal. Please note the following

  • x11 server did not install with the group install of Xfce, so it was installed separately.
  • [1]Keyboard and mouse did not work out the box, and I had to install the evdev drivers.

Base Packages

yum -y update
yum -y install epel-release
yum makecache
yum -y install chromium  wget zstd xorg-x11-xinit NetworkManager-wifi

XFCE

yum -y group install Xfce
yum -y install xorg-x11-drv-evdev xorg-x11-server-Xorg

OpenBox (Preferred)

[2]

yum install -y openbox xorg-x11-drv-libinput xorg-x11-server-utils xorg-x11-xinit libev

Unclutter

  • Install unclutter[3][4], this is useful for getting rid of the mouse pointer when not in use.
  • NOTE: I ran into issues downloading from archlinux, quick and dirty google search had me run across a git repo.[5]
Repo method

This has not been fully tested and may contain bad code.

yum install -y git libev-devel libX11-devel libXt-devel libXi-devel asciidoc 
yum groupinstall "Development Tools"
git clone https://github.com/Airblader/unclutter-xfixes && cd unclutter-xfixes
mkdir /usr/share/licenses/unclutter/
make
make install
Arch method
wget -O unclutter.tar.zst --content-disposition --max-redirect=5 https://www.archlinux.org/packages/community/x86_64/unclutter/download/
zstd -d unclutter.tar.zst -o unclutter.tar
tar -xf unclutter.tar
mv usr/bin/unclutter /usr/bin/unclutter
rm -rf usr

TTY1 Autologin

TTY Config

Now create the auto-login process.

useradd publicuser
rm /etc/systemd/system/getty.target.wants/getty@tty1.service
cp /lib/systemd/system/getty@.service /etc/systemd/system/getty@tty1.service
sed -i -e "s/\/sbin\/agetty/\0 --autologin publicuser/" /etc/systemd/system/getty@tty1.service
ln -s /etc/systemd/system/getty@tty1.service /etc/systemd/system/getty.target.wants/getty@tty1.service

cat << EOF >>/home/publicuser/.bash_profile
if [[ -z \$DISPLAY ]] && [[ \$(tty) = /dev/tty1 ]]; then # Check if we have a display and we're on TTY1
startx
else
echo "Please contact the help desk and provide the following"
echo "IP : "
echo "Hostname : $hostname"
fi
EOF

Auto Start Window Manager

  • Choose which one you want, startxfce4 or openbox-session.
cat << EOF>>/home/publicuser/.xinitrc
exec openbox-session
EOF

Reboot and you should see the desktop start up. If it does not troubleshoot.

Configure Chromium Auto-Start

XFCE

[6][7]

cat << EOF>>/etc/xdg/autostart/kiosk.desktop
[Desktop Entry]
Encoding=UTF-8
Name=Kiosk
GenericName=program
Comment=LobbyKiosk
Exec=chromium-browser --noerrdialogs --kiosk http://siteurl.tld
Icon=/usr/share/pixmaps/program.jpg
Terminal=false
Type=Application
Categories=
OnlyShowIn=XFCE;
EOF

OpenBox

mkdir -p /home/publicuser/.config/openbox

cat << EOF > /home/publicuser/.config/openbox/autostart
/usr/bin/xset -dpms s off s noblank &
/usr/bin/chromium-browser --user-data-dir=/home/publicuser --noerrdialogs --kiosk https://site.tld/webpage &
/usr/bin/unclutter &
EOF

Configure Power Settings and Disable Mouse Pointer

  • NOTE : This is configured for xfce. Another set of instructions will follow for openbox.

We want to prevent the system from going to sleep, blanking the screen, loading the screen saver[8], or showing the pointer on the screen.
One issue I am having is understanding the best method for exporting the display. I am too used to working in bash and not with a gui. The following export does not work, but the display settings appear to still work.
Initially the xset commands were getting ignored by xfce power management. In order to get around this I had to use xfconf-query[9] to make things stick

  • Create the script
cat << EOF>>/home/publicuser/power.sh
#!/bin/sh
sleep 10
export DISPLAY=$(who | grep -E "publicuser pts\/[0-9]" | grep -Eo "\(:[0-9][.]?[0-9]?\)" | sed 's/(//; s/)//')
xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/dpms-enabled -s false
/usr/bin/unclutter -grab
EOF

chmod +x /home/publicuser/power.sh
sed -i 's/<\/property>/\ \ <property\ name=\"blank-on-ac\"\ type=\"int\"\ value=\"0\"\/>\n&/g' /home/publicuser/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-power-manager.xml
  • Create the auto-launch of the script.
cat << EOF>>/etc/xdg/autostart/power.desktop
[Desktop Entry]
Encoding=UTF-8
Name=powersettings
GenericName=program3
Comment=DisablePower
Exec=/home/publicuser/power.sh
Icon=/usr/share/pixmaps/program.jpg
Terminal=false
Type=Application
Categories=
OnlyShowIn=XFCE;
EOF

Reload Chromium via CRON

Ran into an issue with flaky wifi and Chromium not reloading the page during a gateway timeout. Add a cron job for publicuser with the following

@hourly DISPLAY=:0 /home/publicuser/restart.sh

Create the restart script at /home/publicuser/restart.sh

#!/bin/bash
killall chromium-browser
sleep 1
/usr/bin/chromium-browser --user-data-dir=/home/publicuser --noerrdialogs --kiosk https://site.tld/webpage &

Mark executable

chmod u+x /home/publicuser/restart.sh