RDKE splash screen is a lightweight bootup splash screen application for RDK-E . It displays a fullscreen image during device startup and exits once the system signals it to dismiss, keeping the screen visually occupied while the rest of the stack initializes. The source code for the same is available in https://github.com/rdkcentral/splashscreen/tree/develop .

It can be started via the systemd and is associated with a service file rdke_splash.service . The systemd unit can be configured to launch /usr/bin/rdke_splash early in the boot sequence . It preloads libwesteros_gl.so for the Westeros/Wayland compositor integration . The app uses Essos to create a fullscreen EGL window. The splash image is passed via --image <path> (JPEG or PNG). 

If no image is provided or decoding fails, it falls back to a solid red 1×1 texture. 

Every 50 ms  the app checks for the existence of /tmp/.dismissSplash. When that file is found, the render loop exits. The helper script dismiss_splash.sh creates that file with a simple touch /tmp/.dismissSplash call — any other system component can do the same to signal that the splash is no longer needed. 

On exit (dismiss file detected, SIGINT/SIGTERM, or Essos termination), the app destroys the GL program and texture, stops and destroys the Essos context, and returns.

If the window manager is running already then you will need to ensure the splash screen application runs in wayland mode (by setting the WAYLAND_DISPLAY variable to connect to the wayland display).

In short

  • The splash screen app can run without the window manager but both cannot be running at the same time in this mode
  • If you want the splash screen app and the window manager to run at the same time then you'll need to create a wayland display for the splash screen app to connect to and then set the WAYLAND_DISPLAY environment variable to its display name and then run the splash screen app

Analysis of changes needed in RDKM environment to support splash screen

As part of this activity rdke_splash binary was built using the source code available in https://github.com/rdkcentral/splashscreen/tree/develop . Later this binary was put into a raspberry pi build running with RDKM image . As a first try it was ran on the same display that the refui is running and was able to see the default red screen of the rdke splash .

Steps to run rdke splash using  window manager

  • Use rdkwindow manager to create display

          curl -X POST http://127.0.0.1:9998/jsonrpc -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"org.rdk.RDKWindowManager.1.createDisplay","params":{"displayParams":"{\"client\":\"myapp_12345\",\"displayName\":\"test\",\"displayWidth\":1920,\"displayHeight\":1080,\"virtualDisplay\":false,\"virtualWidth\":1920,\"virtualHeight\":1080,\"topmost\":false,\"focus\":true}"}}'

  • export XDG_RUNTIME_DIR=/tmp
    export WAYLAND_DISPLAY=test
  • /usr/bin/rdke_splash

Steps followed to try running splash screen during boot up

Modified the existing rdke_splash.service like below,

[Unit]
Description=RDK Splash Screen
After=getty@.service
Before=sceneset.service
StartLimitIntervalSec=30
StartLimitBurst=5

[Service]
Type=simple
Environment="LD_PRELOAD=libwesteros_gl.so.0.0.0"
Environment="WESTEROS_DRM_CARD=/dev/dri/card1"

# The splash image is expected to be part of the firmware image.
# If no --image is provided, the app shows an internal fallback splash.
ExecStart=/usr/bin/rdke_splash
Restart=on-failure
RestartSec=2

[Install]
WantedBy=multi-user.target

Enabled this service to start during the box bootup and modified the rdkwindowmanager service to add an ExecStartPre to  stop this service . Tested with these 2 changes and it was seen that the box was booted up with the default red screen of the rdke_splash binary and was visible for 3-4 seconds before the reference UI is started .


  • No labels