KEMBAR78
Surfing on an Interactive Kiosk | PDF
Surfing on an Interactive Kiosk
Leon Anavi
Konsulko Group
leon.anavi@konsulko.com
leon@anavi.org
Yocto Project Summit 2021
Yocto Project Summit 2021, Leon Anavi, Surfing on an Interactive Kiosk
Konsulko Group
 Services company specializing in Embedded Linux and Open Source Software
 Hardware/software build, design, development, and training services
 Based in San Jose, CA with an engineering presence worldwide
 http://konsulko.com/
Yocto Project Summit 2021, Leon Anavi, Surfing on an Interactive Kiosk
Agenda
 Using web browsers for an interactive kiosk
 Openbox and Surf
 Building an image
 Conclusions
 Q&A
Yocto Project Summit 2021, Leon Anavi, Surfing on an Interactive Kiosk
Web Browser Market Share
Yocto Project Summit 2021, Leon Anavi, Surfing on an Interactive Kiosk
Yocto/OE Layer for Mainstream Web Browsers
 meta-browser
https://github.com/OSSystems/meta-browser
 Available in GitHub under MIT license
 Sub-layer with recipes for Chromium
 Sub-layer with recipes for Firefox
Yocto Project Summit 2021, Leon Anavi, Surfing on an Interactive Kiosk
Surf Web Browser
 Minimalist web browser
 No graphical control elements
 Controlled via keyboard shortcuts or external tools
 Based on WebKit2/GTK+
 Developed by suckless.org
 Initial release in 2009
 Available under MIT License
Yocto Project Summit 2021, Leon Anavi, Surfing on an Interactive Kiosk
Surf in meta-openembedded/meta-oe
Yocto Project Summit 2021, Leon Anavi, Surfing on an Interactive Kiosk
Surf Web Browser
Requirements:
 Requires X11 and OpenGL
 Depends on WebKitGTK, GTK+ 3, glib-2.0 and gcr
 WebKitGTK is a full-featured port of the WebKit2 rendering engine
Yocto Project Summit 2021, Leon Anavi, Surfing on an Interactive Kiosk
Openbox
 Highly configurable stacking window manager for X11
 Written in C and XML for configurations, licensed under GPLv2
 rc.xml - main configuration file of the overall session
 menu.xml - configuration file for the desktop menu, accessible by
right-clicking the background
 autostart – automatically starts applications
 Recipe in meta-oe
 http://openbox.org/
Yocto Project Summit 2021, Leon Anavi, Surfing on an Interactive Kiosk
Openbox Screenshot
 Openbox
 xterm
 pcmanfm
 gedit
 surf
 stalonetray
Yocto Project Summit 2021, Leon Anavi, Surfing on an Interactive Kiosk
Layers
 Poky
 meta-raspberrypi
 meta-openembedded/meta-oe
 meta-openembedded/meta-python
 meta-openembedded/meta-networking
Yocto Project Summit 2021, Leon Anavi, Surfing on an Interactive Kiosk
Create a New Layer
 Set up build environment:
source oe-init-build-env
 Create a new layer:
bitbake-layers create-layer ../meta-my-kiosk
 Add the new layer:
bitbake-layers add-layer ../meta-my-kiosk
 Add other required layers
Yocto Project Summit 2021, Leon Anavi, Surfing on an Interactive Kiosk
Systemd Service for Surf
 surf.service:
[Unit]
Description=Surf
After=display-manager.service
[Service]
Type=simple
EnvironmentFile=/etc/default/xserver-nodm
ExecStart=/usr/bin/surf https://www.yoctoproject.org/
TimeoutStartSec=120
Restart=on-failure
RestartSec=3
[Install]
WantedBy=graphical.target
Yocto Project Summit 2021, Leon Anavi, Surfing on an Interactive Kiosk
Systemd Service for Surf
 surf_%.bbappend in meta-my-kiosk:
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += "file://surf.service"
inherit systemd
do_install_append() {
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
install -d ${D}${systemd_unitdir}/system
install -m 644 ${WORKDIR}/surf.service ${D}${systemd_unitdir}/system
fi
}
FILES_${PN} += "${systemd_unitdir}/scripts/"
SYSTEMD_SERVICE_${PN} = "surf.service"
Yocto Project Summit 2021, Leon Anavi, Surfing on an Interactive Kiosk
My Kiosk Image
 core-image-kiosk
SUMMARY = "Interactive kiosk with X11, openbox and surf"
IMAGE_FEATURES += "splash package-management x11-base"
LICENSE = "MIT"
inherit core-image features_check
REQUIRED_DISTRO_FEATURES = "x11"
QB_MEM = '${@bb.utils.contains("DISTRO_FEATURES", "opengl", "-m 512", "-m
256", d)}'
IMAGE_INSTALL_append = " 
kernel-modules 
nano 
openbox pcmanfm xterm surf xwd 
"
Yocto Project Summit 2021, Leon Anavi, Surfing on an Interactive Kiosk
Building an Image
 Set machine and enable UART at local.conf:
MACHINE = "raspberrypi4"
ENABLE_UART="1"
 Switch to systemd at local.conf:
DISTRO_FEATURES_append = " systemd"
VIRTUAL-RUNTIME_init_manager = "systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
VIRTUAL-RUNTIME_initscripts = ""
 Build the image:
bitbake core-image-kiosk
Yocto Project Summit 2021, Leon Anavi, Surfing on an Interactive Kiosk
Showcase
Yocto Project Summit 2021, Leon Anavi, Surfing on an Interactive Kiosk
Conclusions
 The Yocto Project and OpenEmbedded provide a lot of different options for
creating interactive kiosk images
 Surf web browser is an alternative of the mainstream web browsers for some very
specific use cases
 Minimalist configuration with X11, Openbox and surf web browser is good and
easy option for implementing an interactive HTML5 kiosk on constrained
embedded Linux devices
 TODO: software over the air updates, continuous integration, setup tool (google
repo/kas/git submodules/etc), templates for local.conf and bblayers, create distro
configuration...
Yocto Project Summit 2021, Leon Anavi, Surfing on an Interactive Kiosk
Thank You!
Useful links
 https://surf.suckless.org/
 http://openbox.org/wiki/Main_Page
 http://git.openembedded.org/meta-openembedded
 http://git.yoctoproject.org/cgit/cgit.cgi/meta-raspberrypi
 http://git.yoctoproject.org/cgit/cgit.cgi/poky/
 https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html
 https://archive.fosdem.org/2020/schedule/event/ema_homebridge_with_yocto/

Surfing on an Interactive Kiosk

  • 1.
    Surfing on anInteractive Kiosk Leon Anavi Konsulko Group leon.anavi@konsulko.com leon@anavi.org Yocto Project Summit 2021
  • 2.
    Yocto Project Summit2021, Leon Anavi, Surfing on an Interactive Kiosk Konsulko Group  Services company specializing in Embedded Linux and Open Source Software  Hardware/software build, design, development, and training services  Based in San Jose, CA with an engineering presence worldwide  http://konsulko.com/
  • 3.
    Yocto Project Summit2021, Leon Anavi, Surfing on an Interactive Kiosk Agenda  Using web browsers for an interactive kiosk  Openbox and Surf  Building an image  Conclusions  Q&A
  • 4.
    Yocto Project Summit2021, Leon Anavi, Surfing on an Interactive Kiosk Web Browser Market Share
  • 5.
    Yocto Project Summit2021, Leon Anavi, Surfing on an Interactive Kiosk Yocto/OE Layer for Mainstream Web Browsers  meta-browser https://github.com/OSSystems/meta-browser  Available in GitHub under MIT license  Sub-layer with recipes for Chromium  Sub-layer with recipes for Firefox
  • 6.
    Yocto Project Summit2021, Leon Anavi, Surfing on an Interactive Kiosk Surf Web Browser  Minimalist web browser  No graphical control elements  Controlled via keyboard shortcuts or external tools  Based on WebKit2/GTK+  Developed by suckless.org  Initial release in 2009  Available under MIT License
  • 7.
    Yocto Project Summit2021, Leon Anavi, Surfing on an Interactive Kiosk Surf in meta-openembedded/meta-oe
  • 8.
    Yocto Project Summit2021, Leon Anavi, Surfing on an Interactive Kiosk Surf Web Browser Requirements:  Requires X11 and OpenGL  Depends on WebKitGTK, GTK+ 3, glib-2.0 and gcr  WebKitGTK is a full-featured port of the WebKit2 rendering engine
  • 9.
    Yocto Project Summit2021, Leon Anavi, Surfing on an Interactive Kiosk Openbox  Highly configurable stacking window manager for X11  Written in C and XML for configurations, licensed under GPLv2  rc.xml - main configuration file of the overall session  menu.xml - configuration file for the desktop menu, accessible by right-clicking the background  autostart – automatically starts applications  Recipe in meta-oe  http://openbox.org/
  • 10.
    Yocto Project Summit2021, Leon Anavi, Surfing on an Interactive Kiosk Openbox Screenshot  Openbox  xterm  pcmanfm  gedit  surf  stalonetray
  • 11.
    Yocto Project Summit2021, Leon Anavi, Surfing on an Interactive Kiosk Layers  Poky  meta-raspberrypi  meta-openembedded/meta-oe  meta-openembedded/meta-python  meta-openembedded/meta-networking
  • 12.
    Yocto Project Summit2021, Leon Anavi, Surfing on an Interactive Kiosk Create a New Layer  Set up build environment: source oe-init-build-env  Create a new layer: bitbake-layers create-layer ../meta-my-kiosk  Add the new layer: bitbake-layers add-layer ../meta-my-kiosk  Add other required layers
  • 13.
    Yocto Project Summit2021, Leon Anavi, Surfing on an Interactive Kiosk Systemd Service for Surf  surf.service: [Unit] Description=Surf After=display-manager.service [Service] Type=simple EnvironmentFile=/etc/default/xserver-nodm ExecStart=/usr/bin/surf https://www.yoctoproject.org/ TimeoutStartSec=120 Restart=on-failure RestartSec=3 [Install] WantedBy=graphical.target
  • 14.
    Yocto Project Summit2021, Leon Anavi, Surfing on an Interactive Kiosk Systemd Service for Surf  surf_%.bbappend in meta-my-kiosk: FILESEXTRAPATHS_prepend := "${THISDIR}/files:" SRC_URI += "file://surf.service" inherit systemd do_install_append() { if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then install -d ${D}${systemd_unitdir}/system install -m 644 ${WORKDIR}/surf.service ${D}${systemd_unitdir}/system fi } FILES_${PN} += "${systemd_unitdir}/scripts/" SYSTEMD_SERVICE_${PN} = "surf.service"
  • 15.
    Yocto Project Summit2021, Leon Anavi, Surfing on an Interactive Kiosk My Kiosk Image  core-image-kiosk SUMMARY = "Interactive kiosk with X11, openbox and surf" IMAGE_FEATURES += "splash package-management x11-base" LICENSE = "MIT" inherit core-image features_check REQUIRED_DISTRO_FEATURES = "x11" QB_MEM = '${@bb.utils.contains("DISTRO_FEATURES", "opengl", "-m 512", "-m 256", d)}' IMAGE_INSTALL_append = " kernel-modules nano openbox pcmanfm xterm surf xwd "
  • 16.
    Yocto Project Summit2021, Leon Anavi, Surfing on an Interactive Kiosk Building an Image  Set machine and enable UART at local.conf: MACHINE = "raspberrypi4" ENABLE_UART="1"  Switch to systemd at local.conf: DISTRO_FEATURES_append = " systemd" VIRTUAL-RUNTIME_init_manager = "systemd" DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit" VIRTUAL-RUNTIME_initscripts = ""  Build the image: bitbake core-image-kiosk
  • 17.
    Yocto Project Summit2021, Leon Anavi, Surfing on an Interactive Kiosk Showcase
  • 18.
    Yocto Project Summit2021, Leon Anavi, Surfing on an Interactive Kiosk Conclusions  The Yocto Project and OpenEmbedded provide a lot of different options for creating interactive kiosk images  Surf web browser is an alternative of the mainstream web browsers for some very specific use cases  Minimalist configuration with X11, Openbox and surf web browser is good and easy option for implementing an interactive HTML5 kiosk on constrained embedded Linux devices  TODO: software over the air updates, continuous integration, setup tool (google repo/kas/git submodules/etc), templates for local.conf and bblayers, create distro configuration...
  • 19.
    Yocto Project Summit2021, Leon Anavi, Surfing on an Interactive Kiosk Thank You! Useful links  https://surf.suckless.org/  http://openbox.org/wiki/Main_Page  http://git.openembedded.org/meta-openembedded  http://git.yoctoproject.org/cgit/cgit.cgi/meta-raspberrypi  http://git.yoctoproject.org/cgit/cgit.cgi/poky/  https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html  https://archive.fosdem.org/2020/schedule/event/ema_homebridge_with_yocto/