User Tools

Site Tools


Weston IVI-Shell

Weston IVI-Shell provides a shell plugin for the Weston compositor, implementing the GENIVI API for In-Vehicle Infotainment.

Project site :

AGL Demonstration Platform

IVI-Shell is always built when creating an "agl-demo-platform" image, but will only start automatically if you add the following lines to your “conf/local.conf” file :

IMAGE_INSTALL_append = " \
    weston-ivi-shell-config \

or, in case the image has already been built, if you overwrite its “/etc/xdg/weston/weston.ini” file with this one. Or:



If everything went fine, you should see a display similar to this one.

Note also that you might have to turn the screen adding the following lines to “/etc/xdg/weston/weston.ini


General architecture

IVI-Shell provides 2 protocols :

* ivi-application : client-side protocol, needed for client applications to be actually shown. Some toolkits/frameworks supporting it currently :

* ivi-hmi-controller : server-side protocol, allowing customization of shell behavior and look and feel.

Implementation examples

If we wanted to use wl_shell, we would create a wl_shell_surface on top of a wl_surface :

struct wl_shell_surface *shell_surface;
shell_surface = wl_shell_get_shell_surface (wl_shell, wl_surface);

Similarly, to use xdg_shell, we would create a xdg_surface on top of a wl_surface :

struct xdg_surface *xdg_surface;
xdg_surface = xdg_shell_get_xdg_surface (xdg_shell, wl_surface);

IVI-Shell supports creating an ivi_surface on top of a wl_surface, along with a unique ID :

struct ivi_surface *ivi_surface;
uint32_t id;   // Global numeral ID identifying a managed surface
ivi_surface = ivi_application_surface_create(id, wl_surface);

Extension features

The wayland-ivi-extension project brings additional features to IVI-Shell, including :

  • ivi-controller plugin : adds support for getting pointers to native_handle and wl_surface objects managed by wl_shell :
  • IVISurfaceCreator command-line tool : associates a Global ID to a wl_surface manually. The surface can then be controlled by using the ivi-controller plugin or ivi layout APIs.
$ IVISurfaceCreator --help
Usage: IVISurfaceCreator <Process ID> <Window Title> <IVI-Surface ID>
  • EGLWLMockNavigation demonstration : uses ivi layout APIs to show an accelerated EGL window with a sample animated scene.

Screeshot here.

Additional information

Additional information regarding wayland-ivi-extension, most notably detailed design and HOWTO, can be found on the GENIVI wiki :

subsystem/graphics/weston-ivi-shell.txt · Last modified: 2019/09/23 05:08 by jeker