Issue Displaying Qt Application on 7" DSI Display with Boot2Qt 6.8

Hi Toradex Community,

I am currently working with the following hardware:

  • Verdin iMX8M Mini Quad 2GB Wi-Fi / Bluetooth IT
  • Ivy Carrier Board
  • 7" Capacitive Touch Display (DSI)

Previously, I was successfully building Boot2Qt images and displaying the GUI through the HDMI port without any issues.

Now, I’m building a new prototype using the 7" DSI Capacitive Touch Display with Boot2Qt 6.8. On my first attempt, I wasn’t getting any video output. I realized I needed to enable the 7" DSI display support in the device tree. After doing that, I was able to get video output.

However, instead of the QtLauncher example app starting as usual, I’m only seeing a command-line screen (with login option). If I SSH into the device and manually run qtlauncher, the application does appear—but not in fullscreen. It’s maximized, but I can still see the minimize and close buttons, meaning it’s not taking up the entire screen as expected.

Is there something I might be missing in the configuration? Any tips or suggestions would be greatly appreciated.

Thank you in advance!
Alvaro

Hi, I’m the Toradex AI Assistant.

I might make mistakes. Our support team will step in if needed. If I answered your question, please tick the “Solution” checkbox. For follow-up questions to me, please use @ToradexAI in your post.

Did you like my answer? :+1: :-1:


Hello Alvaro,

Thank you for your detailed description and for sharing your hardware configuration.

Based on your message, you’ve already enabled DSI support in the device tree and are seeing output on the 7" display. That’s a great start. Your issue now consists of two parts:

  1. The QtLauncher not starting automatically on boot (you see a login shell instead).
  2. When launched manually, the QtLauncher is not in true fullscreen—it is maximized, but window controls are visible.

Here’s how you can address these issues on your Toradex Verdin iMX8M Mini + Ivy + 7" DSI using Boot2Qt:

1. QtLauncher Not Starting Automatically

Boot2Qt typically uses systemd to start the graphical application at boot. When you changed display outputs (from HDMI to DSI), environment variables, Weston (Wayland) configuration, or systemd service dependencies might have changed.

  • Ensure that the Boot2Qt image you’re building includes the correct systemd service to launch QtLauncher.
  • Check that the target environment still launches the graphical shell. For Wayland, this often means that the weston.service or a similar compositor is starting, and QtLauncher is set as the kiosk application.

You can check enabled services with:

systemctl list-units --type=service

Look for a service like qtlauncher.service or similar.

If the service is not enabled, enable it with:

systemctl enable qtlauncher.service

*Note: Service name might differ based on your Boot2Qt build/systemd configuration.

2. Getting QtLauncher in True Fullscreen

When window decorations are present (minimize/close buttons), it usually means QtLauncher does not run in kiosk/fullscreen mode or there is a mismatch with the windowing system (for example, running under X11 instead of Wayland).

A few suggestions:

  • Check which QT_QPA_PLATFORM your Boot2Qt system uses (wayland, eglfs, etc.). eglfs is often used for fullscreen embedded use-cases.
  • You can manually run the QtLauncher in fullscreen with:
qtlauncher -platform eglfs --fullscreen

Or, set environment variables prior to launching:

export QT_QPA_PLATFORM=eglfs
export QT_FULLSCREEN=1
qtlauncher
  • If your build uses Wayland/Weston, confirm that Weston is running and that the qtlauncher systemd service sets the environment to use the correct platform plugin.
  • Ensure that no window manager is running on top of the compositor, which could cause window decorations.

Resources:

If you let me know whether you’re running your application with eglfs, wayland, or another QPA backend, I can provide you with tailored startup scripts or service file examples.

Let me know if this helps or if you need more detailed steps!

Best regards,
Toradex AI Assistant.

root@b2qt-verdin-imx8mm:~# systemctl list-units --type=service --all
UNIT LOAD ACTIVE SUB DESCRIPTION
● auditd.service not-found inactive dead auditd.service
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
b2qt.service loaded inactive dead B2Qt user application
bluetooth.service loaded active running Bluetooth service
busybox-klogd.service loaded active running Kernel Logging Service
busybox-syslog.service loaded active running System Logging Service
connman.service loaded active running Connection service
containerd.service loaded active running containerd container run…
dbus.service loaded active running D-Bus System Message Bus
demolauncher.service loaded inactive dead Boot to Qt Demo Launcher
● display-manager.service not-found inactive dead display-manager.service
docker.service loaded inactive dead Docker Application Conta…
emergency.service loaded inactive dead Emergency Shell
● firewalld.service not-found inactive dead firewalld.service
getty@tty1.service loaded active running Getty on tty1
initrd-cleanup.service loaded inactive dead Cleaning Up and Shutting…
initrd-parse-etc.service loaded inactive dead Mountpoints Configured i…
initrd-switch-root.servi… loaded inactive dead Switch Root
initrd-udevadm-cleanup-d… loaded inactive dead Cleanup udev Database
ip6tables.service loaded active exited IPv6 Packet Filtering Fr…
iptables.service loaded active exited IPv4 Packet Filtering Fr…
kmod-static-nodes.service loaded active exited Create List of Static De…
ldconfig.service loaded inactive dead Rebuild Dynamic Linker C…
ModemManager.service loaded active running Modem Manager
modprobe@configfs.service loaded inactive dead Load Kernel Module confi…
modprobe@drm.service loaded inactive dead Load Kernel Module drm
modprobe@fuse.service loaded inactive dead Load Kernel Module fuse
nfs-mountd.service loaded inactive dead NFS Mount Daemon
nfs-server.service loaded inactive dead NFS server and services
nfs-statd.service loaded inactive dead NFS status monitor for N…
● plymouth-quit-wait.servi… not-found inactive dead plymouth-quit-wait.servi…
● plymouth-start.service not-found inactive dead plymouth-start.service
qdbd.service loaded active running Qt Debug Bridge Daemon
rc-local.service loaded inactive dead /etc/rc.local Compatibil…
rescue.service loaded inactive dead Rescue Shell
rpcbind.service loaded active running RPC Bind
● run-postinsts.service not-found inactive dead run-postinsts.service
serial-getty@ttymxc0.ser… loaded active running Serial Getty on ttymxc0
● sshd.service not-found inactive dead sshd.service
sshd@0-10.0.0.126:22-10.… loaded active running OpenSSH Per-Connection D…
sshdgenkeys.service loaded active exited OpenSSH Key Generation
startupscreen.service loaded inactive dead Boot to Qt Startup Screen
sysstat.service loaded active exited Resets System Activity L…
systemd-ask-password-con… loaded inactive dead Dispatch Password Reques…
systemd-ask-password-wal… loaded inactive dead Forward Password Request…
systemd-backlight@backli… loaded active exited Load/Save Screen Backlig…
systemd-battery-check.se… loaded inactive dead Check battery level duri…
systemd-fsck-root.service loaded active exited File System Check on Roo…
systemd-fsck@dev-mmcblk0… loaded active exited File System Check on /de…
systemd-halt.service loaded inactive dead System Halt
systemd-hibernate-resume… loaded inactive dead Resume from hibernation
systemd-hwdb-update.serv… loaded inactive dead Rebuild Hardware Database
systemd-initctl.service loaded inactive dead initctl Compatibility Da…
systemd-journal-catalog-… loaded inactive dead Rebuild Journal Catalog
systemd-journal-flush.se… loaded active exited Flush Journal to Persist…
systemd-journald.service loaded active running Journal Service
systemd-kexec.service loaded inactive dead Reboot via kexec
systemd-logind.service loaded active running User Login Management
systemd-machine-id-commi… loaded inactive dead Commit a transient machi…
systemd-modules-load.ser… loaded active exited Load Kernel Modules
systemd-network-generato… loaded active exited Generate network units f…
systemd-networkd-wait-on… loaded inactive dead Wait for Network to be C…
systemd-networkd.service loaded active running Network Configuration
● systemd-oomd.service not-found inactive dead systemd-oomd.service
systemd-poweroff.service loaded inactive dead System Power Off
systemd-quotacheck.servi… loaded inactive dead File System Quota Check
systemd-random-seed.serv… loaded active exited Load/Save OS Random Seed
systemd-reboot.service loaded inactive dead System Reboot
systemd-remount-fs.servi… loaded active exited Remount Root and Kernel …
systemd-resolved.service loaded inactive dead Network Name Resolution
systemd-rfkill.service loaded inactive dead Load/Save RF Kill Switch…
systemd-soft-reboot.serv… loaded inactive dead Reboot System Userspace
systemd-sysctl.service loaded active exited Apply Kernel Variables
systemd-sysusers.service loaded inactive dead Create System Users
systemd-timesyncd.service loaded active running Network Time Synchroniza…
systemd-tmpfiles-clean.s… loaded inactive dead Cleanup of Temporary Dir…
systemd-tmpfiles-setup-d… loaded active exited Create Static Device Nod…
systemd-tmpfiles-setup-d… loaded active exited Create Static Device Nod…
systemd-tmpfiles-setup.s… loaded active exited Create System Files and …
systemd-udev-settle.serv… loaded inactive dead Wait for udev To Complet…
systemd-udev-trigger.ser… loaded active exited Coldplug All udev Devices
systemd-udevd.service loaded active running Rule-based Manager for D…
systemd-update-done.serv… loaded inactive dead Update is Completed
systemd-update-utmp-runl… loaded inactive dead Record Runlevel Change i…
systemd-update-utmp.serv… loaded active exited Record System Boot/Shutd…
systemd-user-sessions.se… loaded active exited Permit User Sessions
systemd-userdbd.service loaded active running User Database Manager
systemd-vconsole-setup.s… loaded active exited Virtual Console Setup
user-runtime-dir@0.servi… loaded active exited User Runtime Directory /…
user@0.service loaded active running User Manager for UID 0
var-volatile-cache.servi… loaded inactive dead Bind mount volatile /var…
var-volatile-lib.service loaded inactive dead Bind mount volatile /var…
var-volatile-spool.servi… loaded inactive dead Bind mount volatile /var…
var-volatile-srv.service loaded inactive dead Bind mount volatile /srv
weston.service loaded inactive dead Weston, a Wayland compos…
wpa_supplicant.service loaded active running WPA supplicant

Legend: LOAD → Reflects whether the unit definition was properly loaded.
ACTIVE → The high-level unit activation state, i.e. generalization of SUB.
SUB → The low-level unit activation state, values depend on unit type.
I started weston.service manually and Attempted to run the app using Wayland Result: App initializes but not in full screen ,
do this
export QT_QPA_PLATFORM=eglfs
export QT_FULLSCREEN=1
qtlauncher

result
drmModeGetResources failed (Operation not supported)
Cannot create window: no screens available
Aborted (core dumped)

Could you please describe in detail how exactly you did that?

  • When the system boots, can you see qtlauncher in the process list?
  • Have you tried forcing the display type and mode in /etc/xdg/weston/weston.ini (or /etc/weston.ini)?

Hi Alex thanks fro getting back to me .

I added my own patches on top of b2qt source code,
bitbake -c patch virtual/kernel
mkdir -p …/local_repos/linux-imx
cp -a tmp/work-shared//kernel-source/. …/local_repos/linux-imx
cd …/local_repos/linux-imx
git reset --hard
git clean -fdx

gedit arch/arm64/boot/dts/freescale/imx8mm-verdin-wifi-ivy.dts
edit and save
git diff > my_device_tree_changes.patch

I created a custom layer with a /recipes-kernel/linux folder and update the recipes to use my patch,

FILESEXTRAPATHS:prepend := “${THISDIR}/linux-toradex:”

SRC_URI += “file://my_device_tree_changes.patch”

and after that just bitbake b2qt-embedded-qt6-image and I got the video output in the screen .

  • When the system boots, can you see qtlauncher in the process list? No , is not in the process list, actually for some reason demolauncher.service and/or startupscreen.service status are inactive.
  • Have you tried forcing the display type and mode in /etc/xdg/weston/weston.ini (or /etc/weston.ini)? No , cuase I’m not familiar with weston

this is the content of my device file my_device_tree_changes.patch

diff --git a/arch/arm64/boot/dts/freescale/imx8mm-verdin-wifi-ivy.dts b/arch/arm64/boot/dts/freescale/imx8mm-verdin-wifi-ivy.dts
index 3369ba852b5c..b66586fadb4e 100644
--- a/arch/arm64/boot/dts/freescale/imx8mm-verdin-wifi-ivy.dts
+++ b/arch/arm64/boot/dts/freescale/imx8mm-verdin-wifi-ivy.dts
@@ -9,6 +9,9 @@
 #include "imx8mm-verdin-wifi.dtsi"
 #include "imx8mm-verdin-ivy.dtsi"
 
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/gpio/gpio.h>
+
 / {
 	model = "Toradex Verdin iMX8M Mini WB on Ivy";
 	compatible = "toradex,verdin-imx8mm-wifi-ivy",
@@ -16,3 +19,141 @@ / {
 		     "toradex,verdin-imx8mm",
 		     "fsl,imx8mm";
 };
+
+&{/} {
+	panel_rvt70hslnwca0: panel-rvt70hslnwca0 {
+		compatible = "panel-lvds";
+		data-mapping = "vesa-24";
+		height-mm = <86>;
+		width-mm = <154>;
+
+		/*
+		 * These timings are hand-optimized for improved stability compared to
+		 * theoretical values. Specifically, HBP is set to 100 and combined with
+		 * HS to total 160, matching the original HBP value in the datasheet. The
+		 * original horizontal timings caused issues with proper display functionality
+		 * on iMX8* platforms.
+		 */
+		panel-timing {
+			clock-frequency = <40800000 51200000 67200000>;
+			de-active = <1>;
+			hactive = <1024>;
+			hback-porch = <100 100 100>;
+			hfront-porch = <16 160 216>;
+			hsync-active = <0>;
+			hsync-len = <50 60 140>;
+			pixelclk-active = <1>;
+			vactive = <600>;
+			vback-porch = <23 23 23>;
+			vfront-porch = <1 12 126>;
+			vsync-active = <0>;
+			vsync-len = <1 10 20>;
+		};
+	};
+};
+
+&{/} {
+	backlight_verdin_dsi: backlight-verdin-dsi {
+		compatible = "pwm-backlight";
+		pinctrl-names = "default";
+		pinctrl-0 = <&pinctrl_i2s_2_d_out_dsi_1_bkl_en>;
+		brightness-levels = <0 45 63 88 119 158 203 255>;
+		default-brightness-level = <4>;
+		/* Verdin I2S_2_D_OUT (DSI_1_BKL_EN/DSI_1_BKL_EN_LVDS, SODIMM 46) */
+		enable-gpios = <&gpio3 24 GPIO_ACTIVE_HIGH>;
+		/* Verdin PWM_3_DSI */
+		pwms = <&pwm1 0 6666667 0>;
+	};
+};
+
+/* Verdin PWM_3_DSI */
+&pwm1 {
+	status = "okay";
+};
+
+
+&panel_rvt70hslnwca0 {
+	backlight = <&backlight_verdin_dsi>;
+
+	port {
+		panel_in_rvt70hslnwca0: endpoint {
+			remote-endpoint = <&dsi_lvds_bridge_out>;
+		};
+	};
+};
+
+/* Verdin I2C_2_DSI */
+&i2c2 {
+	#address-cells = <1>;
+	#size-cells = <0>;
+	status = "okay";
+
+	bridge@2c {
+		compatible = "ti,sn65dsi83";
+		reg = <0x2c>;
+		/* IRQ not connected */
+		/* Verdin GPIO_10_DSI (SODIMM 21) */
+		enable-gpios = <&gpio3 3 GPIO_ACTIVE_HIGH>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&pinctrl_gpio_10_dsi>;
+		status = "okay";
+
+		ports {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			port@0 {
+				reg = <0>;
+
+				dsi_lvds_bridge_in: endpoint {
+					data-lanes = <1 2 3 4>;
+					remote-endpoint = <&mipi_dsi_bridge1_out>;
+				};
+			};
+
+			port@2 {
+				reg = <2>;
+
+				dsi_lvds_bridge_out: endpoint {
+					remote-endpoint = <&panel_in_rvt70hslnwca0>;
+				};
+			};
+		};
+	};
+
+	touch@41 {
+		compatible = "ilitek,ili2132";
+		reg = <0x41>;
+		/* Verdin DSI_1_INT# (TOUCH_INT#, SODIMM 17) */
+		interrupt-parent = <&gpio3>;
+		interrupts = <15 IRQ_TYPE_EDGE_RISING>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&pinctrl_gpio_9_dsi>, <&pinctrl_i2s_2_bclk_touch_reset>;
+		/* Verdin I2S_2_BCLK (TOUCH_RESET#, SODIMM 42) */
+		reset-gpios = <&gpio3 23 GPIO_ACTIVE_LOW>;
+		status = "okay";
+	};
+};
+
+&lcdif {
+	status = "okay";
+};
+
+&mipi_dsi {
+	samsung,esc-clock-frequency = <16000000>;
+	status = "okay";
+
+	ports {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		port@1 {
+			reg = <1>;
+
+			mipi_dsi_bridge1_out: endpoint {
+				attach-bridge;
+				remote-endpoint = <&dsi_lvds_bridge_in>;
+			};
+		};
+	};
+};
\ No newline at end of file



Hi Alex , I modified the weston.ini file as you suggested me , but same issue .

weston.ini is located in /etc/xdg/weston/weston.ini , I enclosed the content of the file

[core]
use-g2d=true
repaint-window=16
idle-time=0
backend=drm-backend.so
#enable-overlay-view=1

[shell]

[libinput]
touchscreen_calibrator=true

[output]
name=DSI-1
mode=1024x600
transform=normal
disable-hotplug=true

#[output]
#name=HDMI-A-2
#mode=off
#       WIDTHxHEIGHT    Resolution size width and height in pixels
#       off             Disables the output
#       preferred       Uses the preferred mode
#       current         Uses the current crt controller mode
#transform=rotate-90

[screen-share]
command=/usr/bin/weston --backend=rdp-backend.so --shell=fullscreen-shell.so --no-clients-resize

I noticed when I tried to run qtlauncher manually using differents backends I got this

root@b2qt-verdin-imx8mm:/usr/bin# ./qtlauncher 
Failed to create wl_display (No such file or directory)
qt.qpa.plugin: Could not load the Qt platform plugin "wayland" in "" even though it was found.
drmModeGetResources failed (Operation not supported)
Applications Root: "/usr/share/examples/boot2qt-launcher-demos"
Cannot create window: no screens available
Aborted (core dumped)
roroot@b2qt-verdin-imx8mm:/usr/bin# ./qtlauncher -platform eglfs
drmModeGetResources failed (Operation not supported)
Applications Root: "/usr/share/examples/boot2qt-launcher-demos"
Cannot create window: no screens available
Aborted (core dumped)
root@b2qt-verdin-imx8mm:/usr/bin# 

but when I tried with linuxfb

root@b2qt-verdin-imx8mm:/usr/bin# ./qtlauncher -platform linuxfb
This plugin does not support createPlatformOpenGLContext!
Applications Root: "/usr/share/examples/boot2qt-launcher-demos"
qt.waylandcompositor.hardwareintegration: Failed to initialize EGL display. Could not get EglDisplay for window.
Indexer: all done... total: 7

and qtlauncher was successfully launched and I was able to see the Qt demos in Full screen as it is supposed to work, but when I play around with the different Qt demo apps , those are not working

"qt.qpa.wayland: \"wl-shell\" is a deprecated shell extension, prefer using \"xdg-shell\" if supported by the compositor by setting the environment variable QT_WAYLAND_SHELL_INTEGRATION\nqt.qpa.wayland: qtvirtualkeyboard currently is not supported at client-side, use QT_IM_MODULES=qtvirtualkeyboard at compositor-side.\n"
"qt.qpa.wayland: \"wl-shell\" is a deprecated shell extension, prefer using \"xdg-shell\" if supported by the compositor by setting the environment variable QT_WAYLAND_SHELL_INTEGRATION\nqt.qpa.wayland: qtvirtualkeyboard currently is not supported at client-side, use QT_IM_MODULES=qtvirtualkeyboard at compositor-side.\n"
"qt.qpa.wayland: \"wl-shell\" is a deprecated shell extension, prefer using \"xdg-shell\" if supported by the compositor by setting the environment variable QT_WAYLAND_SHELL_INTEGRATION\nqrc:/content/NodeIndicator.qml:38:9: Unable to assign [undefined] to QColor\nqrc:/content/NodeIndicator.qml:38:9: Unable to assign [undefined] to QColor\nqrc:/content/NodeIndicator.qml:38:9: Unable to assign [undefined] to QColor\nqrc:/content/NodeIndicator.qml:38:9: Unable to assign [undefined] to QColor\nqrc:/content/NodeIndicator.qml:38:9: Unable to assign [undefined] to QColor\n"
"qt.qpa.wayland: \"wl-shell\" is a deprecated shell extension, prefer using \"xdg-shell\" if supported by the compositor by setting the environment variable QT_WAYLAND_SHELL_INTEGRATION\n"

Quick update : I noticed demolauncher.service is not running — it’s loaded, but never started or it exited and didn’t restart.

demolauncher.service      loaded    inactive dead    Boot to Qt Demo Launcher

Checking why it didn’t start

journalctl -u demolauncher.service

I got this

journalctl -u demolauncher.service
May 16 04:05:14 b2qt-verdin-imx8mm systemd[1]: Started Boot to Qt Demo Launcher.
May 16 04:05:14 b2qt-verdin-imx8mm appcontroller[431]: "FB_MULTI_BUFFER" "2"
May 16 04:05:14 b2qt-verdin-imx8mm appcontroller[431]: "QTWEBENGINE_DISABLE_SANDBOX" "1"
May 16 04:05:14 b2qt-verdin-imx8mm appcontroller[431]: "QT_IM_MODULE" "qtvirtualkeyboard"
May 16 04:05:14 b2qt-verdin-imx8mm appcontroller[431]: "QT_QPA_EGLFS_FORCE888" "1"
May 16 04:05:14 b2qt-verdin-imx8mm appcontroller[431]: "QT_QPA_EGLFS_FORCEVSYNC" "1"
May 16 04:05:14 b2qt-verdin-imx8mm appcontroller[431]: "QT_QPA_EGLFS_KMS_ATOMIC" "1"
May 16 04:05:14 b2qt-verdin-imx8mm appcontroller[431]: "QT_QPA_EGLFS_KMS_CONFIG" "/etc/kms.conf"
May 16 04:05:14 b2qt-verdin-imx8mm appcontroller[431]: "QT_QPA_PLATFORM" "eglfs"
May 16 04:05:14 b2qt-verdin-imx8mm appcontroller[431]: "WAYLAND_DISPLAY" "/run/wayland-0"
May 16 04:05:14 b2qt-verdin-imx8mm appcontroller[431]: "XDG_RUNTIME_DIR" "/run/user/0"
May 16 04:05:14 b2qt-verdin-imx8mm appcontroller[431]: "/usr/bin/qtlauncher" QList()
May 16 04:05:15 b2qt-verdin-imx8mm appcontroller[431]: drmModeGetResources failed (Operation not supported)
May 16 04:05:15 b2qt-verdin-imx8mm appcontroller[431]: Applications Root: "/usr/share/examples/boot2qt-launcher-demos"
May 16 04:05:16 b2qt-verdin-imx8mm appcontroller[431]: Cannot create window: no screens available
May 16 04:05:17 b2qt-verdin-imx8mm appcontroller[431]: quit
May 16 04:05:17 b2qt-verdin-imx8mm appcontroller[431]: Application crashed: /usr/bin/qtlauncher
May 16 04:05:17 b2qt-verdin-imx8mm appcontroller[431]: Process stopped
May 16 04:05:17 b2qt-verdin-imx8mm systemd[1]: demolauncher.service: Deactivated successfully.
root@b2qt-verdin-imx8mm:~# 

Hello everyone,

I wanted to share a solution that worked for me, in case anyone else is running into similar issues.

I initially tried to run my Qt application on a Toradex device using the eglfs platform. In my Yocto layer, the default QT_QPA_PLATFORM was being set in the default-qt-envs.bb file like this:

QT_QPA_PLATFORM ?= "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'eglfs', 'linuxfb', d)}"

After some digging, I found that eglfs wasn’t working correctly on my board. It seems this might be due to the galcore driver (used by the Vivante GPU). From what I understand, eglfs requires a full DRM/KMS backend to function correctly — something that drivers like etnaviv or modesetting provide. However, galcore is likely more limited or headless and does not expose the full DRM/KMS API, which may lead to failures when using eglfs.

:white_check_mark: Solution: Switch to wayland-egl

Switching to Wayland by setting:

QT_QPA_PLATFORM=wayland-egl

allowed my application to run successfully. Weston was already running on the device, so using Wayland as the backend worked seamlessly.


Hopefully this helps others who are using Qt (boot2qt) with Toradex and running into display issues with eglfs

regards
Alvaro