How do I get my QT app on my verdin with dev carrier board?

Yeah it seemed like the weston container was stopping whenever the plugin connected to it for some reason. The taskbar at the top would disappear and I’d just have a black screen. I’ll test this out tomorrow, thanks.

Hi @munderwoods ,

I recently got notified that currently our modules don’t have hardware-accelerated graphics with Qt 6. So in terms of graphical performance it’s probably better to keep your app in Qt 5, at least for the moment.
Sorry for the delay in informing this.

You can see how we setup the Qt 5 dependencies and the environment for it in our Debian container Dockerfile as a reference on what should be done in order to run Qt 5 apps on our modules. In particular having the qtwayland5 package installed and setting QT_QPA_PLATFORM to wayland are critical to run Qt 5 on Weston/Wayland.

Best regards,
Lucas Akira

It looks like weston is failing. This should be the weston container that comes with the qt6 template. Here is the log output from the weston container:

SoC is: 'i.MX8MP'
SoC has GPU: false
SoC has DPU: false
g2d implementation: viv
Fallbacking to software renderer.
Removing previously created '.X*-lock' entries under /tmp before starting Weston. Pass 'IGNORE_X_LOCKS=1' environment variable to Weston container to disable this behavior.
dos2unix: converting file /etc/xdg/weston/weston.ini to Unix format...
dos2unix: converting file /etc/xdg/weston-dev/weston.ini to Unix format...
00:00:00.000 [INFO] [seatd/seat.c:39] Created VT-bound seat seat0
00:00:00.000 [INFO] [seatd/seatd.c:194] seatd started
Date: 2023-05-31 UTC
[20:06:31.272] weston 10.0.1
               https://wayland.freedesktop.org
               Bug reports to: https://gitlab.freedesktop.org/wayland/weston/issues/
               Build: lf-5.15.52-2.1.0-10-g9452feba
[20:06:31.272] Command line: weston -Bdrm-backend.so --current-mode -Swayland-0 --use-pixman
[20:06:31.272] OS: Linux, 5.4.193-5.7.2+git.b60d3160fd04, #1-TorizonCore SMP PREEMPT Fri Dec 23 15:47:24 UTC 2022, aarch64
[20:06:31.272] Flight recorder: enabled
[20:06:31.273] Using config file '/etc/xdg/weston/weston.ini'
[20:06:31.273] Output repaint window is 7 ms maximum.
[20:06:31.273] Loading module '/usr/lib/aarch64-linux-gnu/libweston-10/drm-backend.so'
[20:06:31.281] initializing drm backend
[20:06:31.281] Trying libseat launcher...
00:00:00.042 [INFO] [seatd/server.c:145] New client connected (pid: 22, uid: 1000, gid: 1000)
00:00:00.042 [INFO] [seatd/seat.c:170] Added client 1 to seat0
00:00:00.042 [INFO] [seatd/seat.c:480] Opened client 1 on seat0
[20:06:31.282] libseat: session control granted
[20:06:31.283] no drm device found
00:00:00.043 [INFO] [seatd/seat.c:418] No clients on seat0 to activate
00:00:00.044 [INFO] [seatd/seat.c:524] Closed client 1 on seat0
00:00:00.044 [INFO] [seatd/seat.c:192] Removed client 1 from seat0
00:00:00.044 [INFO] [seatd/client.c:471] Client disconnected
[20:06:31.283] fatal: failed to create compositor backend
Internal warning: debug scope 'drm-backend' has not been destroyed.
00:00:00.046 [INFO] [seatd/seatd.c:218] seatd stopped
Switching back to vt 1

What’s weird to me is that the docker-compose file looks basically identical to the one that is running successfully currently. Right now it boots to an existing docker-compose file that I loaded onto it using Torizon Platform. Should I reflash torizon-core fresh and try that? I don’t see why there would be conflict since it seems to stop the already existing containers.

I did a fresh install of torizon-core 6 and it still doesn’t run, but the output is different:

SoC is: 'i.MX8MP'
SoC has GPU: true
SoC has DPU: false
g2d implementation: viv
Removing previously created '.X*-lock' entries under /tmp before starting Weston. Pass 'IGNORE_X_LOCKS=1' environment variable to Weston container to disable this behavior.
dos2unix: converting file /etc/xdg/weston/weston.ini to Unix format...
dos2unix: converting file /etc/xdg/weston-dev/weston.ini to Unix format...
00:00:00.000 [INFO] [seatd/seat.c:39] Created VT-bound seat seat0
00:00:00.000 [INFO] [seatd/seatd.c:194] seatd started
Date: 2023-05-31 UTC
[22:28:51.169] weston 10.0.1
               https://wayland.freedesktop.org
               Bug reports to: https://gitlab.freedesktop.org/wayland/weston/issues/
               Build: lf-5.15.52-2.1.0-10-g9452feba
[22:28:51.169] Command line: weston -Bdrm-backend.so --current-mode -Swayland-0
[22:28:51.169] OS: Linux, 5.15.77-6.2.0+git.aa0ff7e3554e, #1-TorizonCore SMP PREEMPT Wed Mar 29 15:33:40 UTC 2023, aarch64
[22:28:51.169] Flight recorder: enabled
[22:28:51.170] Using config file '/etc/xdg/weston/weston.ini'
[22:28:51.171] Output repaint window is 7 ms maximum.
[22:28:51.171] Loading module '/usr/lib/aarch64-linux-gnu/libweston-10/drm-backend.so'
[22:28:51.180] initializing drm backend
[22:28:51.180] Trying libseat launcher...
00:00:00.054 [INFO] [seatd/server.c:145] New client connected (pid: 25, uid: 1000, gid: 1000)
00:00:00.054 [INFO] [seatd/seat.c:170] Added client 1 to seat0
00:00:00.054 [INFO] [seatd/seat.c:480] Opened client 1 on seat0
[22:28:51.181] libseat: session control granted
[22:28:51.186] using /dev/dri/card1
[22:28:51.187] DRM: supports atomic modesetting
[22:28:51.187] DRM: does not support GBM modifiers
[22:28:51.187] DRM: supports picture aspect ratio
[22:28:51.187] Loading module '/usr/lib/aarch64-linux-gnu/libweston-10/gl-renderer.so'
[22:28:51.197] EGL client extensions: EGL_EXT_client_extensions
               EGL_EXT_platform_base EGL_KHR_platform_wayland
               EGL_EXT_platform_wayland EGL_EXT_device_query
               EGL_EXT_device_drm EGL_EXT_device_drm_render_node
               EGL_KHR_platform_gbm
[22:28:51.200] EGL device extensions: EGL_EXT_client_extensions
               EGL_EXT_platform_base EGL_KHR_platform_wayland
               EGL_EXT_platform_wayland EGL_EXT_device_query
               EGL_EXT_device_drm EGL_EXT_device_drm_render_node
               EGL_KHR_platform_gbm
[22:28:51.200] EGL version: 1.5
[22:28:51.200] EGL vendor: Vivante Corporation
[22:28:51.200] EGL client APIs: OpenGL_ES OpenVG
[22:28:51.200] EGL extensions: EGL_KHR_fence_sync EGL_KHR_reusable_sync
               EGL_KHR_wait_sync EGL_KHR_image EGL_KHR_image_base
               EGL_KHR_image_pixmap EGL_KHR_gl_texture_2D_image
               EGL_KHR_gl_texture_cubemap_image EGL_KHR_gl_renderbuffer_image
               EGL_EXT_image_dma_buf_import
               EGL_EXT_image_dma_buf_import_modifiers EGL_KHR_lock_surface
               EGL_KHR_create_context EGL_KHR_no_config_context
               EGL_KHR_surfaceless_context EGL_KHR_get_all_proc_addresses
               EGL_EXT_create_context_robustness EGL_EXT_protected_surface
               EGL_EXT_protected_content EGL_EXT_buffer_age
               EGL_ANDROID_native_fence_sync EGL_WL_bind_wayland_display
               EGL_WL_create_wayland_buffer_from_image EGL_KHR_partial_update
               EGL_EXT_swap_buffers_with_damage
               EGL_KHR_swap_buffers_with_damage EGL_EXT_pixel_format_float
[22:28:51.201] EGL_KHR_surfaceless_context available
[22:28:51.206] GL version: OpenGL ES 3.1 V6.4.3.p4.398061
[22:28:51.206] GLSL version: OpenGL ES GLSL ES 3.10
[22:28:51.206] GL vendor: Vivante Corporation
[22:28:51.207] GL renderer: Vivante GC7000UL
[22:28:51.207] GL extensions: GL_OES_vertex_type_10_10_10_2
               GL_OES_vertex_half_float GL_OES_element_index_uint
               GL_OES_mapbuffer GL_OES_vertex_array_object
               GL_OES_compressed_ETC1_RGB8_texture
               GL_OES_compressed_paletted_texture GL_OES_texture_npot
               GL_OES_rgb8_rgba8 GL_OES_depth_texture
               GL_OES_depth_texture_cube_map GL_OES_depth24 GL_OES_depth32
               GL_OES_packed_depth_stencil GL_OES_fbo_render_mipmap
               GL_OES_get_program_binary GL_OES_fragment_precision_high
               GL_OES_standard_derivatives GL_OES_EGL_image
               GL_OES_EGL_image_external GL_OES_EGL_image_external_essl3
               GL_OES_EGL_sync GL_OES_texture_stencil8
               GL_OES_shader_image_atomic
               GL_OES_texture_storage_multisample_2d_array
               GL_OES_required_internalformat GL_OES_surfaceless_context
               GL_OES_draw_buffers_indexed GL_OES_texture_border_clamp
               GL_OES_texture_buffer GL_OES_texture_cube_map_array
               GL_OES_draw_elements_base_vertex GL_OES_texture_half_float
               GL_OES_texture_float GL_KHR_blend_equation_advanced
               GL_KHR_debug GL_KHR_robustness
               GL_KHR_robust_buffer_access_behavior
               GL_EXT_texture_type_2_10_10_10_REV
               GL_EXT_texture_compression_dxt1 GL_EXT_texture_format_BGRA8888
               GL_EXT_texture_compression_s3tc GL_EXT_read_format_bgra
               GL_EXT_multi_draw_arrays GL_EXT_frag_depth
               GL_EXT_discard_framebuffer GL_EXT_blend_minmax
               GL_EXT_multisampled_render_to_texture
               GL_EXT_color_buffer_half_float GL_EXT_color_buffer_float
               GL_EXT_robustness GL_EXT_texture_sRGB_decode
               GL_EXT_draw_buffers_indexed GL_EXT_texture_border_clamp
               GL_EXT_texture_buffer GL_EXT_texture_cube_map_array
               GL_EXT_multi_draw_indirect GL_EXT_draw_elements_base_vertex
               GL_EXT_texture_rg GL_EXT_protected_textures GL_EXT_sRGB
               GL_EXT_unpack_subimage GL_VIV_direct_texture
[22:28:51.260] GL ES 3.1 - renderer features:
               read-back format: BGRA
               EGL Wayland extension: yes
[22:28:51.280] event1  - gpio-keys: is tagged by udev as: Keyboard
[22:28:51.280] event1  - gpio-keys: device is a keyboard
[22:28:51.284] event0  - 30370000.snvs:snvs-powerkey: is tagged by udev as: Keyboard
[22:28:51.285] event0  - 30370000.snvs:snvs-powerkey: device is a keyboard
[22:28:51.360] event2  - ILITEK ILITEK-TP: is tagged by udev as: Touchscreen
[22:28:51.360] event2  - ILITEK ILITEK-TP: device is a touch device
[22:28:51.369] event3  - ILITEK ILITEK-TP Mouse: is tagged by udev as: Mouse
[22:28:51.369] event3  - ILITEK ILITEK-TP Mouse: device is a pointer
[22:28:51.373] event4  - audio-hdmi HDMI Jack: is tagged by udev as: Switch
[22:28:51.533] event4  - not using input device '/dev/input/event4'
[22:28:51.558] libinput: configuring device "gpio-keys".
[22:28:51.559] libinput: configuring device "30370000.snvs:snvs-powerkey".
[22:28:51.559] Touchscreen - ILITEK ILITEK-TP - /sys/devices/platform/soc@0/32f10108.usb/38200000.usb/xhci-hcd.1.auto/usb1/1-1/1-1.1/1-1.1:1.0/0003:222A:0001.0001/input/input6/event2
[22:28:51.559] libinput: configuring device "ILITEK ILITEK-TP".
[22:28:51.559] input device event2 has no enabled output associated (none named), skipping calibration for now.
[22:28:51.559] libinput: configuring device "ILITEK ILITEK-TP Mouse".
[22:28:51.559] input device event3 has no enabled output associated (none named), skipping calibration for now.
[22:28:51.560] DRM: head 'HDMI-A-1' updated, connector 38 is connected, EDID make 'unknown', model 'unknown', serial 'unknown'
[22:28:51.560] DRM: head 'HDMI-A-1' found, connector 38 is connected, EDID make 'unknown', model 'unknown', serial 'unknown'
[22:28:51.680] DRM: head 'HDMI-A-2' updated, connector 40 is connected, EDID make 'JZI', model 'HDMI', serial 'unknown'
[22:28:51.680] DRM: head 'HDMI-A-2' found, connector 40 is connected, EDID make 'JZI', model 'HDMI', serial 'unknown'
[22:28:51.681] Registered plugin API 'weston_drm_output_api_v1' of size 24
[22:28:51.681] Registered plugin API 'weston_drm_virtual_output_api_v1' of size 48
[22:28:51.681] Color manager: no-op
[22:28:51.681] Module '/usr/lib/libgbm.so' already loaded
[22:28:51.681] no available modes for HDMI-A-1
[22:28:51.681] Cannot configure an output using weston_drm_output_api.
[22:28:51.681] Module '/usr/lib/libgbm.so' already loaded
[22:28:51.681] Output 'HDMI-A-2' using color profile: built-in default sRGB SDR profile
[22:28:51.682] Chosen EGL config details: id:  21 rgba: 8 8 8 0 buf: 24 dep:  0 stcl: 0 int: 1-60 type: win|pix|pbf|swap_preserved vis_id: XRGB8888 (0x34325258)
[22:28:51.682] Output HDMI-A-2 (crtc 36) video modes:
               1280x800@58.7, preferred, current, 83.5 MHz
               1920x1080@60.0 16:9, 148.5 MHz
               1920x1080@59.9 16:9, 148.4 MHz
               1920x1080@50.0 16:9, 148.5 MHz
               1280x1024@60.0, 108.0 MHz
               1280x960@60.0, 108.0 MHz
               1280x720@60.0 16:9, 74.2 MHz
               1280x720@59.9 16:9, 74.2 MHz
               1280x720@50.0, 74.2 MHz
               1280x720@50.0 16:9, 74.2 MHz
               1024x768@75.0, 78.8 MHz
               1024x768@70.1, 75.0 MHz
               1024x768@60.0, 65.0 MHz
               800x600@75.0, 49.5 MHz
               800x600@72.2, 50.0 MHz
               800x600@60.3, 40.0 MHz
               800x600@56.2, 36.0 MHz
               720x576@50.0, 27.0 MHz
               720x576@50.0 16:9, 27.0 MHz
               720x576@50.0 4:3, 27.0 MHz
               720x480@60.0 4:3, 27.0 MHz
               720x480@60.0 16:9, 27.0 MHz
               720x480@59.9, 27.0 MHz
               720x480@59.9 16:9, 27.0 MHz
               720x480@59.9 4:3, 27.0 MHz
               640x480@75.0, 31.5 MHz
               640x480@72.8, 31.5 MHz
               640x480@60.0 4:3, 25.2 MHz
               640x480@59.9, 25.2 MHz
               640x480@59.9 4:3, 25.2 MHz
               720x400@70.1, 28.3 MHz
[22:28:51.682] associating input device event1 with output HDMI-A-2 (none by udev)
[22:28:51.682] associating input device event0 with output HDMI-A-2 (none by udev)
[22:28:51.682] associating input device event2 with output HDMI-A-2 (none by udev)
[22:28:51.683] associating input device event3 with output HDMI-A-2 (none by udev)
[22:28:51.684] Output 'HDMI-A-2' enabled with head(s) HDMI-A-2
[22:28:51.685] output for input device event1 removed
[22:28:51.685] output for input device event0 removed
[22:28:51.685] output for input device event2 removed
[22:28:51.685] output for input device event3 removed
[22:28:51.686] event1  - gpio-keys: device removed
[22:28:51.803] event0  - 30370000.snvs:snvs-powerkey: device removed
[22:28:51.863] event2  - ILITEK ILITEK-TP: device removed
[22:28:51.973] event3  - ILITEK ILITEK-TP Mouse: device removed
00:00:00.999 [INFO] [seatd/seat.c:418] No clients on seat0 to activate
00:00:00.999 [INFO] [seatd/seat.c:524] Closed client 1 on seat0
00:00:00.999 [INFO] [seatd/seat.c:192] Removed client 1 from seat0
00:00:00.999 [INFO] [seatd/client.c:471] Client disconnected
00:00:01.014 [INFO] [seatd/seatd.c:218] seatd stopped
Switching back to vt 1

I did a fresh install of torizon-core 5 again and it looks like I got the same response as last time:

SoC is: 'i.MX8MP'
SoC has GPU: false
SoC has DPU: false
g2d implementation: viv
Fallbacking to software renderer.
Removing previously created '.X*-lock' entries under /tmp before starting Weston. Pass 'IGNORE_X_LOCKS=1' environment variable to Weston container to disable this behavior.
dos2unix: converting file /etc/xdg/weston/weston.ini to Unix format...
dos2unix: converting file /etc/xdg/weston-dev/weston.ini to Unix format...
00:00:00.000 [INFO] [seatd/seat.c:39] Created VT-bound seat seat0
00:00:00.000 [INFO] [seatd/seatd.c:194] seatd started
Date: 2023-05-31 UTC
[23:22:24.019] weston 10.0.1
               https://wayland.freedesktop.org
               Bug reports to: https://gitlab.freedesktop.org/wayland/weston/issues/
               Build: lf-5.15.52-2.1.0-10-g9452feba
[23:22:24.019] Command line: weston -Bdrm-backend.so --current-mode -Swayland-0 --use-pixman
[23:22:24.019] OS: Linux, 5.4.193-5.7.2+git.b60d3160fd04, #1-TorizonCore SMP PREEMPT Fri Dec 23 15:47:24 UTC 2022, aarch64
[23:22:24.020] Flight recorder: enabled
[23:22:24.020] Using config file '/etc/xdg/weston/weston.ini'
[23:22:24.021] Output repaint window is 7 ms maximum.
[23:22:24.021] Loading module '/usr/lib/aarch64-linux-gnu/libweston-10/drm-backend.so'
[23:22:24.030] initializing drm backend
[23:22:24.030] Trying libseat launcher...
00:00:00.049 [INFO] [seatd/server.c:145] New client connected (pid: 22, uid: 1000, gid: 1000)
00:00:00.049 [INFO] [seatd/seat.c:170] Added client 1 to seat0
00:00:00.049 [INFO] [seatd/seat.c:480] Opened client 1 on seat0
[23:22:24.031] libseat: session control granted
[23:22:24.032] no drm device found
00:00:00.050 [INFO] [seatd/seat.c:418] No clients on seat0 to activate
00:00:00.050 [INFO] [seatd/seat.c:524] Closed client 1 on seat0
00:00:00.050 [INFO] [seatd/seat.c:192] Removed client 1 from seat0
00:00:00.051 [INFO] [seatd/client.c:471] Client disconnected
[23:22:24.032] fatal: failed to create compositor backend
Internal warning: debug scope 'drm-backend' has not been destroyed.
00:00:00.053 [INFO] [seatd/seatd.c:218] seatd stopped
Switching back to vt 1

Here is my docker-compose:

version: "3.9"
services:
  qttemp-debug:
    build:
      context: .
      dockerfile: Dockerfile.debug
    image: ${LOCAL_REGISTRY}:5002/qttemp-debug:${TAG}
    ports:
      # SSH debug
      - 2231:2231
      # gdbserver
      - 2232:2232
      # qml debug
      - 2233:2233
    volumes:
      - type: bind
        source: /tmp
        target: /tmp
      - type: bind
        source: /dev
        target: /dev
    device_cgroup_rules:
      # ... for tty0
      - "c 4:0 rmw"
      # ... for tty7
      - "c 4:7 rmw"
      # ... for /dev/input devices
      - "c 13:* rmw"
      - "c 199:* rmw"
      # ... for /dev/dri devices
      - "c 226:* rmw"
    depends_on: [
      weston
    ]

  qttemp:
    build:
      context: .
      dockerfile: Dockerfile
    image: ${DOCKER_LOGIN}/qttemp:${TAG}
    volumes:
      - type: bind
        source: /tmp
        target: /tmp
      - type: bind
        source: /dev
        target: /dev
    device_cgroup_rules:
      # ... for tty0
      - "c 4:0 rmw"
      # ... for tty7
      - "c 4:7 rmw"
      # ... for /dev/input devices
      - "c 13:* rmw"
      - "c 199:* rmw"
      # ... for /dev/dri devices
      - "c 226:* rmw"
    depends_on: [
      weston
    ]

  weston:
    image: torizon/weston${GPU}:3
    environment:
      - ACCEPT_FSL_EULA=1
    # Required to get udev events from host udevd via netlink
    network_mode: host
    volumes:
      - type: bind
        source: /tmp
        target: /tmp
      - type: bind
        source: /dev
        target: /dev
      - type: bind
        source: /run/udev
        target: /run/udev
    cap_add:
      - CAP_SYS_TTY_CONFIG
    # Add device access rights through cgroup...
    device_cgroup_rules:
      # ... for tty0
      - "c 4:0 rmw"
      # ... for tty1
      - "c 4:1 rmw"
      # ... for tty7
      - "c 4:7 rmw"
      # ... for /dev/input devices
      - "c 13:* rmw"
      - "c 199:* rmw"
      # ... for /dev/dri devices
      - "c 226:* rmw"

And this is the output when I inspect the weston container:

{
    "Id": "5aadd2da1400424863900c8435789371e336a458baf7e63ea98792d213c8ae00",
    "Created": "2023-05-31T23:22:19.995937893Z",
    "Path": "/usr/bin/entry.sh",
    "Args": [],
    "State": {
        "Status": "exited",
        "Running": false,
        "Paused": false,
        "Restarting": false,
        "OOMKilled": false,
        "Dead": false,
        "Pid": 0,
        "ExitCode": 1,
        "Error": "",
        "StartedAt": "2023-05-31T23:22:23.912457682Z",
        "FinishedAt": "2023-05-31T23:22:24.103636958Z"
    },
    "Image": "sha256:d6444cb2c0c6171b95e47107c933de2dafd4dee6bce83821b3a5f31d0d3fbb76",
    "ResolvConfPath": "/var/lib/docker/containers/5aadd2da1400424863900c8435789371e336a458baf7e63ea98792d213c8ae00/resolv.conf",
    "HostnamePath": "/var/lib/docker/containers/5aadd2da1400424863900c8435789371e336a458baf7e63ea98792d213c8ae00/hostname",
    "HostsPath": "/var/lib/docker/containers/5aadd2da1400424863900c8435789371e336a458baf7e63ea98792d213c8ae00/hosts",
    "LogPath": "/var/lib/docker/containers/5aadd2da1400424863900c8435789371e336a458baf7e63ea98792d213c8ae00/5aadd2da1400424863900c8435789371e336a458baf7e63ea98792d213c8ae00-json.log",
    "Name": "/torizon_weston_1",
    "RestartCount": 0,
    "Driver": "overlay2",
    "Platform": "linux",
    "MountLabel": "",
    "ProcessLabel": "",
    "AppArmorProfile": "",
    "ExecIDs": null,
    "HostConfig": {
        "Binds": [],
        "ContainerIDFile": "",
        "LogConfig": {
            "Type": "json-file",
            "Config": {}
        },
        "NetworkMode": "host",
        "PortBindings": {},
        "RestartPolicy": {
            "Name": "",
            "MaximumRetryCount": 0
        },
        "AutoRemove": false,
        "VolumeDriver": "",
        "VolumesFrom": [],
        "CapAdd": [
            "CAP_SYS_TTY_CONFIG"
        ],
        "CapDrop": null,
        "CgroupnsMode": "",
        "Dns": null,
        "DnsOptions": null,
        "DnsSearch": null,
        "ExtraHosts": null,
        "GroupAdd": null,
        "IpcMode": "private",
        "Cgroup": "",
        "Links": null,
        "OomScoreAdj": 0,
        "PidMode": "",
        "Privileged": false,
        "PublishAllPorts": false,
        "ReadonlyRootfs": false,
        "SecurityOpt": null,
        "UTSMode": "",
        "UsernsMode": "",
        "ShmSize": 67108864,
        "Runtime": "runc",
        "ConsoleSize": [
            0,
            0
        ],
        "Isolation": "",
        "CpuShares": 0,
        "Memory": 0,
        "NanoCpus": 0,
        "CgroupParent": "",
        "BlkioWeight": 0,
        "BlkioWeightDevice": null,
        "BlkioDeviceReadBps": null,
        "BlkioDeviceWriteBps": null,
        "BlkioDeviceReadIOps": null,
        "BlkioDeviceWriteIOps": null,
        "CpuPeriod": 0,
        "CpuQuota": 0,
        "CpuRealtimePeriod": 0,
        "CpuRealtimeRuntime": 0,
        "CpusetCpus": "",
        "CpusetMems": "",
        "Devices": null,
        "DeviceCgroupRules": [
            "c 4:0 rmw",
            "c 4:1 rmw",
            "c 4:7 rmw",
            "c 13:* rmw",
            "c 199:* rmw",
            "c 226:* rmw"
        ],
        "DeviceRequests": null,
        "KernelMemory": 0,
        "KernelMemoryTCP": 0,
        "MemoryReservation": 0,
        "MemorySwap": 0,
        "MemorySwappiness": null,
        "OomKillDisable": false,
        "PidsLimit": null,
        "Ulimits": null,
        "CpuCount": 0,
        "CpuPercent": 0,
        "IOMaximumIOps": 0,
        "IOMaximumBandwidth": 0,
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/run/udev",
                "Target": "/run/udev"
            },
            {
                "Type": "bind",
                "Source": "/dev",
                "Target": "/dev"
            },
            {
                "Type": "bind",
                "Source": "/tmp",
                "Target": "/tmp"
            }
        ],
        "MaskedPaths": [
            "/proc/asound",
            "/proc/acpi",
            "/proc/kcore",
            "/proc/keys",
            "/proc/latency_stats",
            "/proc/timer_list",
            "/proc/timer_stats",
            "/proc/sched_debug",
            "/proc/scsi",
            "/sys/firmware"
        ],
        "ReadonlyPaths": [
            "/proc/bus",
            "/proc/fs",
            "/proc/irq",
            "/proc/sys",
            "/proc/sysrq-trigger"
        ]
    },
    "GraphDriver": {
        "Data": {
            "LowerDir": "/var/lib/docker/overlay2/2c0da18866db57b754276b5fee2e007932e63e639399dbff24afb35314e9c8bb-init/diff:/var/lib/docker/overlay2/f2ac66f37360197fecb13c66d0b3b1cd864972e58732879584bc0288d59a912a/diff:/var/lib/docker/overlay2/f15305ed66a8ea209dc5d6c9de3238a57366bea19acdfaac34daffee16e80ee7/diff:/var/lib/docker/overlay2/07161eee7ca08d65b74d0bd7b6f51311cdd6d589f9636fef5fe73eddf2f6237b/diff:/var/lib/docker/overlay2/9555bcb2923d4f3232f5ff7b00a493f1dfb1fe8c17670297d9b2d1682da1e0ca/diff:/var/lib/docker/overlay2/e62921936c6bcb75d0811ecf35cd0c1e2eb868bd217d7731eaefeb36317b70a1/diff:/var/lib/docker/overlay2/63a5892b32e3c6e82837281142fac4884802d17358a58ec85bbcbcfefd707b37/diff:/var/lib/docker/overlay2/17f8e0f6b6b9a25283750c97f53a79698a83f34ee8b47b9ab75dd09df3d5093d/diff:/var/lib/docker/overlay2/49f83f534f09e5dfaf5304648f2c86585a7edbaa030014eace80dc30d9ffc33f/diff:/var/lib/docker/overlay2/5987f6c2934ab0bfe9e76dbbccbd3a355be5ff99d093a62318185a4cf4adad38/diff:/var/lib/docker/overlay2/7c9bb069319d3714491dd5b9a2b7032265ecd503ead1b8cab3c9fa55a25281d7/diff:/var/lib/docker/overlay2/d62fe30d9c6eb2c532c94fe04a0e84ade5beaa785db4811d1287415050ff41cf/diff:/var/lib/docker/overlay2/67fd11a9a14c3a398254e4de36c857b620e3f68226472443d8b3d3db6c86bef6/diff:/var/lib/docker/overlay2/f38f9e337961a72b7f0382c4057303c47de50455b11821101801650b98c62cbc/diff:/var/lib/docker/overlay2/b02374321775a257c19ba4b4f288bb5edee5a4865854df04d793ebd0cb02648b/diff:/var/lib/docker/overlay2/41190c1e8570e5896e95245906cafa58c1e00bd4f2279b9468c265b895ecc74d/diff:/var/lib/docker/overlay2/5b8c4254e9f240da0af31a9ed348e818fdd78f3ee70223c3774684a3c53a521a/diff:/var/lib/docker/overlay2/5cf1b2e737d77db1d163432bbada3821fda75981f5ef13eedfe92a7296133032/diff:/var/lib/docker/overlay2/1a5eb27b57a19e5a6f80c811f6f91152813d7e35dd4097eb6fea7001bcffabf7/diff:/var/lib/docker/overlay2/2ac3e471f4b25f7fa97a7c567bf70ad3347b5351798a5d9a9adab3616d7539a0/diff:/var/lib/docker/overlay2/10f385b121d2869e08e625853e71536c077bc65dc4b2b5e009c18dfc62a49a77/diff:/var/lib/docker/overlay2/227dab2b3f60ccbfa494efeb6c5a5c29c31cd261259976d0c825ca9fedecf58c/diff:/var/lib/docker/overlay2/91c8e7f2d51a57fd7a777abb8b485b629eafb843e81a81816014ac4fec6c768f/diff:/var/lib/docker/overlay2/f770b8da3dec733c9bffe51ffcc5c318b8e1f8df148ea00d2886d4a43aa36e13/diff:/var/lib/docker/overlay2/05d961a0ec794a13ce4ebd457c4a0a40e48b4d1180a7c8ab2a806b695989b0d6/diff:/var/lib/docker/overlay2/70910dfa746f6a72fe9bc67485457665fddb8754ec4e8af3e3b4444b05b34772/diff:/var/lib/docker/overlay2/7963b87eab277310fd97d21a0cce04030c8626c6e8edef2f36d29643dcb850ae/diff:/var/lib/docker/overlay2/d9ce7636d04c3aa834c619b38a22c581597ad8b9d98c4deea1125eb43dac140b/diff:/var/lib/docker/overlay2/d7864242fa80fbe066d03303551c5a29963605e4fcda1be5c110a6e020eae604/diff",
            "MergedDir": "/var/lib/docker/overlay2/2c0da18866db57b754276b5fee2e007932e63e639399dbff24afb35314e9c8bb/merged",
            "UpperDir": "/var/lib/docker/overlay2/2c0da18866db57b754276b5fee2e007932e63e639399dbff24afb35314e9c8bb/diff",
            "WorkDir": "/var/lib/docker/overlay2/2c0da18866db57b754276b5fee2e007932e63e639399dbff24afb35314e9c8bb/work"
        },
        "Name": "overlay2"
    },
    "Mounts": [
        {
            "Type": "bind",
            "Source": "/dev",
            "Destination": "/dev",
            "Mode": "",
            "RW": true,
            "Propagation": "rprivate"
        },
        {
            "Type": "bind",
            "Source": "/tmp",
            "Destination": "/tmp",
            "Mode": "",
            "RW": true,
            "Propagation": "rprivate"
        },
        {
            "Type": "bind",
            "Source": "/run/udev",
            "Destination": "/run/udev",
            "Mode": "",
            "RW": true,
            "Propagation": "rprivate"
        }
    ],
    "Config": {
        "Hostname": "verdin-imx8mp-14762939",
        "Domainname": "",
        "User": "",
        "AttachStdin": false,
        "AttachStdout": false,
        "AttachStderr": false,
        "Tty": false,
        "OpenStdin": false,
        "StdinOnce": false,
        "Env": [
            "ACCEPT_FSL_EULA=1",
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            "LC_ALL=C.UTF-8",
            "WAYLAND_USER=torizon",
            "XDG_RUNTIME_DIR=/tmp/1000-runtime-dir",
            "WAYLAND_DISPLAY=wayland-0",
            "DISPLAY=:0"
        ],
        "Cmd": null,
        "Image": "torizon/weston-vivante:3",
        "Volumes": null,
        "WorkingDir": "/home/torizon",
        "Entrypoint": [
            "/usr/bin/entry.sh"
        ],
        "OnBuild": null,
        "Labels": {
            "com.docker.compose.config-hash": "202b891147c6dc46afe69ffbf82fde07f67f7f8c2f4a083f6f48725e03259cf9",
            "com.docker.compose.container-number": "1",
            "com.docker.compose.oneoff": "False",
            "com.docker.compose.project": "torizon",
            "com.docker.compose.project.config_files": "docker-compose.yml",
            "com.docker.compose.project.working_dir": "/var/rootdirs/home/torizon",
            "com.docker.compose.service": "weston",
            "com.docker.compose.version": "1.29.2",
            "container.name": "weston-vivante",
            "container.version": "3.0.9-20230512",
            "git.branch": "bookworm",
            "git.hash": "610c15c333a814a54cca7705dce9abe9eebe15e3",
            "pipeline.id": "58025"
        }
    },
    "NetworkSettings": {
        "Bridge": "",
        "SandboxID": "59be1897e8e2bed5dd959e79c975ac72d89a52df94758871b62280aa2edd5962",
        "HairpinMode": false,
        "LinkLocalIPv6Address": "",
        "LinkLocalIPv6PrefixLen": 0,
        "Ports": {},
        "SandboxKey": "/var/run/docker/netns/default",
        "SecondaryIPAddresses": null,
        "SecondaryIPv6Addresses": null,
        "EndpointID": "",
        "Gateway": "",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "IPAddress": "",
        "IPPrefixLen": 0,
        "IPv6Gateway": "",
        "MacAddress": "",
        "Networks": {
            "host": {
                "IPAMConfig": null,
                "Links": null,
                "Aliases": null,
                "NetworkID": "0745313a491640b7a2ed363f8bff95cbedd719b1f296201f04cc5a89baf3b8f5",
                "EndpointID": "",
                "Gateway": "",
                "IPAddress": "",
                "IPPrefixLen": 0,
                "IPv6Gateway": "",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "MacAddress": "",
                "DriverOpts": null
            }
        }
    }
}

When I shell into the app container and run the app manually this is what I get:

{
    "Id": "5aadd2da1400424863900c8435789371e336a458baf7e63ea98792d213c8ae00",
    "Created": "2023-05-31T23:22:19.995937893Z",
    "Path": "/usr/bin/entry.sh",
    "Args": [],
    "State": {
        "Status": "exited",
        "Running": false,
        "Paused": false,
        "Restarting": false,
        "OOMKilled": false,
        "Dead": false,
        "Pid": 0,
        "ExitCode": 1,
        "Error": "",
        "StartedAt": "2023-05-31T23:22:23.912457682Z",
        "FinishedAt": "2023-05-31T23:22:24.103636958Z"
    },
    "Image": "sha256:d6444cb2c0c6171b95e47107c933de2dafd4dee6bce83821b3a5f31d0d3fbb76",
    "ResolvConfPath": "/var/lib/docker/containers/5aadd2da1400424863900c8435789371e336a458baf7e63ea98792d213c8ae00/resolv.conf",
    "HostnamePath": "/var/lib/docker/containers/5aadd2da1400424863900c8435789371e336a458baf7e63ea98792d213c8ae00/hostname",
    "HostsPath": "/var/lib/docker/containers/5aadd2da1400424863900c8435789371e336a458baf7e63ea98792d213c8ae00/hosts",
    "LogPath": "/var/lib/docker/containers/5aadd2da1400424863900c8435789371e336a458baf7e63ea98792d213c8ae00/5aadd2da1400424863900c8435789371e336a458baf7e63ea98792d213c8ae00-json.log",
    "Name": "/torizon_weston_1",
    "RestartCount": 0,
    "Driver": "overlay2",
    "Platform": "linux",
    "MountLabel": "",
    "ProcessLabel": "",
    "AppArmorProfile": "",
    "ExecIDs": null,
    "HostConfig": {
        "Binds": [],
        "ContainerIDFile": "",
        "LogConfig": {
            "Type": "json-file",
            "Config": {}
        },
        "NetworkMode": "host",
        "PortBindings": {},
        "RestartPolicy": {
            "Name": "",
            "MaximumRetryCount": 0
        },
        "AutoRemove": false,
        "VolumeDriver": "",
        "VolumesFrom": [],
        "CapAdd": [
            "CAP_SYS_TTY_CONFIG"
        ],
        "CapDrop": null,
        "CgroupnsMode": "",
        "Dns": null,
        "DnsOptions": null,
        "DnsSearch": null,
        "ExtraHosts": null,
        "GroupAdd": null,
        "IpcMode": "private",
        "Cgroup": "",
        "Links": null,
        "OomScoreAdj": 0,
        "PidMode": "",
        "Privileged": false,
        "PublishAllPorts": false,
        "ReadonlyRootfs": false,
        "SecurityOpt": null,
        "UTSMode": "",
        "UsernsMode": "",
        "ShmSize": 67108864,
        "Runtime": "runc",
        "ConsoleSize": [
            0,
            0
        ],
        "Isolation": "",
        "CpuShares": 0,
        "Memory": 0,
        "NanoCpus": 0,
        "CgroupParent": "",
        "BlkioWeight": 0,
        "BlkioWeightDevice": null,
        "BlkioDeviceReadBps": null,
        "BlkioDeviceWriteBps": null,
        "BlkioDeviceReadIOps": null,
        "BlkioDeviceWriteIOps": null,
        "CpuPeriod": 0,
        "CpuQuota": 0,
        "CpuRealtimePeriod": 0,
        "CpuRealtimeRuntime": 0,
        "CpusetCpus": "",
        "CpusetMems": "",
        "Devices": null,
        "DeviceCgroupRules": [
            "c 4:0 rmw",
            "c 4:1 rmw",
            "c 4:7 rmw",
            "c 13:* rmw",
            "c 199:* rmw",
            "c 226:* rmw"
        ],
        "DeviceRequests": null,
        "KernelMemory": 0,
        "KernelMemoryTCP": 0,
        "MemoryReservation": 0,
        "MemorySwap": 0,
        "MemorySwappiness": null,
        "OomKillDisable": false,
        "PidsLimit": null,
        "Ulimits": null,
        "CpuCount": 0,
        "CpuPercent": 0,
        "IOMaximumIOps": 0,
        "IOMaximumBandwidth": 0,
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/run/udev",
                "Target": "/run/udev"
            },
            {
                "Type": "bind",
                "Source": "/dev",
                "Target": "/dev"
            },
            {
                "Type": "bind",
                "Source": "/tmp",
                "Target": "/tmp"
            }
        ],
        "MaskedPaths": [
            "/proc/asound",
            "/proc/acpi",
            "/proc/kcore",
            "/proc/keys",
            "/proc/latency_stats",
            "/proc/timer_list",
            "/proc/timer_stats",
            "/proc/sched_debug",
            "/proc/scsi",
            "/sys/firmware"
        ],
        "ReadonlyPaths": [
            "/proc/bus",
            "/proc/fs",
            "/proc/irq",
            "/proc/sys",
            "/proc/sysrq-trigger"
        ]
    },
    "GraphDriver": {
        "Data": {
            "LowerDir": "/var/lib/docker/overlay2/2c0da18866db57b754276b5fee2e007932e63e639399dbff24afb35314e9c8bb-init/diff:/var/lib/docker/overlay2/f2ac66f37360197fecb13c66d0b3b1cd864972e58732879584bc0288d59a912a/diff:/var/lib/docker/overlay2/f15305ed66a8ea209dc5d6c9de3238a57366bea19acdfaac34daffee16e80ee7/diff:/var/lib/docker/overlay2/07161eee7ca08d65b74d0bd7b6f51311cdd6d589f9636fef5fe73eddf2f6237b/diff:/var/lib/docker/overlay2/9555bcb2923d4f3232f5ff7b00a493f1dfb1fe8c17670297d9b2d1682da1e0ca/diff:/var/lib/docker/overlay2/e62921936c6bcb75d0811ecf35cd0c1e2eb868bd217d7731eaefeb36317b70a1/diff:/var/lib/docker/overlay2/63a5892b32e3c6e82837281142fac4884802d17358a58ec85bbcbcfefd707b37/diff:/var/lib/docker/overlay2/17f8e0f6b6b9a25283750c97f53a79698a83f34ee8b47b9ab75dd09df3d5093d/diff:/var/lib/docker/overlay2/49f83f534f09e5dfaf5304648f2c86585a7edbaa030014eace80dc30d9ffc33f/diff:/var/lib/docker/overlay2/5987f6c2934ab0bfe9e76dbbccbd3a355be5ff99d093a62318185a4cf4adad38/diff:/var/lib/docker/overlay2/7c9bb069319d3714491dd5b9a2b7032265ecd503ead1b8cab3c9fa55a25281d7/diff:/var/lib/docker/overlay2/d62fe30d9c6eb2c532c94fe04a0e84ade5beaa785db4811d1287415050ff41cf/diff:/var/lib/docker/overlay2/67fd11a9a14c3a398254e4de36c857b620e3f68226472443d8b3d3db6c86bef6/diff:/var/lib/docker/overlay2/f38f9e337961a72b7f0382c4057303c47de50455b11821101801650b98c62cbc/diff:/var/lib/docker/overlay2/b02374321775a257c19ba4b4f288bb5edee5a4865854df04d793ebd0cb02648b/diff:/var/lib/docker/overlay2/41190c1e8570e5896e95245906cafa58c1e00bd4f2279b9468c265b895ecc74d/diff:/var/lib/docker/overlay2/5b8c4254e9f240da0af31a9ed348e818fdd78f3ee70223c3774684a3c53a521a/diff:/var/lib/docker/overlay2/5cf1b2e737d77db1d163432bbada3821fda75981f5ef13eedfe92a7296133032/diff:/var/lib/docker/overlay2/1a5eb27b57a19e5a6f80c811f6f91152813d7e35dd4097eb6fea7001bcffabf7/diff:/var/lib/docker/overlay2/2ac3e471f4b25f7fa97a7c567bf70ad3347b5351798a5d9a9adab3616d7539a0/diff:/var/lib/docker/overlay2/10f385b121d2869e08e625853e71536c077bc65dc4b2b5e009c18dfc62a49a77/diff:/var/lib/docker/overlay2/227dab2b3f60ccbfa494efeb6c5a5c29c31cd261259976d0c825ca9fedecf58c/diff:/var/lib/docker/overlay2/91c8e7f2d51a57fd7a777abb8b485b629eafb843e81a81816014ac4fec6c768f/diff:/var/lib/docker/overlay2/f770b8da3dec733c9bffe51ffcc5c318b8e1f8df148ea00d2886d4a43aa36e13/diff:/var/lib/docker/overlay2/05d961a0ec794a13ce4ebd457c4a0a40e48b4d1180a7c8ab2a806b695989b0d6/diff:/var/lib/docker/overlay2/70910dfa746f6a72fe9bc67485457665fddb8754ec4e8af3e3b4444b05b34772/diff:/var/lib/docker/overlay2/7963b87eab277310fd97d21a0cce04030c8626c6e8edef2f36d29643dcb850ae/diff:/var/lib/docker/overlay2/d9ce7636d04c3aa834c619b38a22c581597ad8b9d98c4deea1125eb43dac140b/diff:/var/lib/docker/overlay2/d7864242fa80fbe066d03303551c5a29963605e4fcda1be5c110a6e020eae604/diff",
            "MergedDir": "/var/lib/docker/overlay2/2c0da18866db57b754276b5fee2e007932e63e639399dbff24afb35314e9c8bb/merged",
            "UpperDir": "/var/lib/docker/overlay2/2c0da18866db57b754276b5fee2e007932e63e639399dbff24afb35314e9c8bb/diff",
            "WorkDir": "/var/lib/docker/overlay2/2c0da18866db57b754276b5fee2e007932e63e639399dbff24afb35314e9c8bb/work"
        },
        "Name": "overlay2"
    },
    "Mounts": [
        {
            "Type": "bind",
            "Source": "/dev",
            "Destination": "/dev",
            "Mode": "",
            "RW": true,
            "Propagation": "rprivate"
        },
        {
            "Type": "bind",
            "Source": "/tmp",
            "Destination": "/tmp",
            "Mode": "",
            "RW": true,
            "Propagation": "rprivate"
        },
        {
            "Type": "bind",
            "Source": "/run/udev",
            "Destination": "/run/udev",
            "Mode": "",
            "RW": true,
            "Propagation": "rprivate"
        }
    ],
    "Config": {
        "Hostname": "verdin-imx8mp-14762939",
        "Domainname": "",
        "User": "",
        "AttachStdin": false,
        "AttachStdout": false,
        "AttachStderr": false,
        "Tty": false,
        "OpenStdin": false,
        "StdinOnce": false,
        "Env": [
            "ACCEPT_FSL_EULA=1",
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            "LC_ALL=C.UTF-8",
            "WAYLAND_USER=torizon",
            "XDG_RUNTIME_DIR=/tmp/1000-runtime-dir",
            "WAYLAND_DISPLAY=wayland-0",
            "DISPLAY=:0"
        ],
        "Cmd": null,
        "Image": "torizon/weston-vivante:3",
        "Volumes": null,
        "WorkingDir": "/home/torizon",
        "Entrypoint": [
            "/usr/bin/entry.sh"
        ],
        "OnBuild": null,
        "Labels": {
            "com.docker.compose.config-hash": "202b891147c6dc46afe69ffbf82fde07f67f7f8c2f4a083f6f48725e03259cf9",
            "com.docker.compose.container-number": "1",
            "com.docker.compose.oneoff": "False",
            "com.docker.compose.project": "torizon",
            "com.docker.compose.project.config_files": "docker-compose.yml",
            "com.docker.compose.project.working_dir": "/var/rootdirs/home/torizon",
            "com.docker.compose.service": "weston",
            "com.docker.compose.version": "1.29.2",
            "container.name": "weston-vivante",
            "container.version": "3.0.9-20230512",
            "git.branch": "bookworm",
            "git.hash": "610c15c333a814a54cca7705dce9abe9eebe15e3",
            "pipeline.id": "58025"
        }
    },
    "NetworkSettings": {
        "Bridge": "",
        "SandboxID": "59be1897e8e2bed5dd959e79c975ac72d89a52df94758871b62280aa2edd5962",
        "HairpinMode": false,
        "LinkLocalIPv6Address": "",
        "LinkLocalIPv6PrefixLen": 0,
        "Ports": {},
        "SandboxKey": "/var/run/docker/netns/default",
        "SecondaryIPAddresses": null,
        "SecondaryIPv6Addresses": null,
        "EndpointID": "",
        "Gateway": "",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "IPAddress": "",
        "IPPrefixLen": 0,
        "IPv6Gateway": "",
        "MacAddress": "",
        "Networks": {
            "host": {
                "IPAMConfig": null,
                "Links": null,
                "Aliases": null,
                "NetworkID": "0745313a491640b7a2ed363f8bff95cbedd719b1f296201f04cc5a89baf3b8f5",
                "EndpointID": "",
                "Gateway": "",
                "IPAddress": "",
                "IPPrefixLen": 0,
                "IPv6Gateway": "",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "MacAddress": "",
                "DriverOpts": null
            }
        }
    }
}

So that’s probably my error, obviously it can’t attach to the display server.

qtwayland5 package installed and setting QT_QPA_PLATFORM to wayland

Oh, are you saying that I need the package installed on the application container in order for the weston container to run? That’s a bit counterintuitive if it’s the case. Where do I set this setting, “QT_QPA_PLATFORM”? I’m not at my desk at the moment but I want to make sure that when I get back to the office I know just what to do.

Hi @munderwoods ,

Oh, are you saying that I need the package installed on the application container in order for the weston container to run? That’s a bit counterintuitive if it’s the case. Where do I set this setting, “QT_QPA_PLATFORM”? I’m not at my desk at the moment but I want to make sure that when I get back to the office I know just what to do.

The package I mentioned should be necessary to run Qt apps on a Wayland environment, which Weston is. The Weston container itself doesn’t need it.

QT_QPA_PLATFORM is an environment variable used by Qt that you can set just before running the app e.g.:

QT_QPA_PLATFORM=wayland ./<app>

Will force your Qt app to run using the Wayland platform plugin.

I did a fresh install of torizon-core 5 again and it looks like I got the same response as last time:

You should use TorizonCore 6 if using the Weston bookworm container i.e. tagged 3 as in torizon/weston-vivante:3. TorizonCore 5 is compatible with the bullseye container (torizon/weston-vivante:2).


About your current issue: apparently you can’t run your app because Weston doesn’t even start, is this correct? We need to get it to work before looking at your app.

One thing that caught my attention in the Weston startup logs on your freshly installed TorizonCore 6 was this:

[22:28:51.682] Output HDMI-A-2 (crtc 36) video modes:
               1280x800@58.7, preferred, current, 83.5 MHz
[...]

Is 1280x800 the native resolution of your HDMI display? Can you try plugging to a 1080p HDMI monitor on TorizonCore 6 and see if you get an output?

Best regards,
Lucas Akira

OK changing the weston image to 2 on my torizin-core 5 install made the weston container work. I also added that variable to my dockerfiles. The containers both work now, however, it appears to be running the template app for some reason I can’t understand. I replaced main.cpp with the one from my app, but when the app runs it just displays the torizon logo and prints “Hello Torizon” in the console. It does appear to be building my app because if I make a change to one I can see the g++ build process being run on it. Is the original version of the app being cached somewhere that I’m unaware of and copied to the container?


Here’s a shot of my file structure. I just dumped all my files into the root for simplicity and that’s where main.cpp was when I overwrote it.

Dockerfile.debug:

# ARGUMENTS --------------------------------------------------------------------
##
# Board architecture
##
ARG IMAGE_ARCH=
# For armv7 use:
#ARG IMAGE_ARCH=arm

##
# Base container version
##
ARG BASE_VERSION=3

##
# Application Name
##
ARG APP_EXECUTABLE=qttemp

##
# Debug port
##
ARG SSH_DEBUG_PORT=

##
# Run as
##
ARG SSHUSERNAME=

# BUILD ------------------------------------------------------------------------
##
# Deploy Step
##
FROM --platform=linux/${IMAGE_ARCH} \
    torizon/wayland-base:${BASE_VERSION} AS Debug

ARG IMAGE_ARCH
ARG SSH_DEBUG_PORT
ARG APP_EXECUTABLE
ARG SSHUSERNAME
ENV APP_EXECUTABLE ${APP_EXECUTABLE}

# SSH for remote debug
EXPOSE ${SSH_DEBUG_PORT}
# Make sure we don't get notifications we can't answer during building.
ENV DEBIAN_FRONTEND="noninteractive"

# your regular RUN statements here
# Install required packages
RUN apt-get -q -y update && \
    apt-get -q -y install \
    openssl \
    openssh-server \
    rsync \
    file \
    curl \
    gdb \
    gdbserver \
    qt6-base-private-dev \
    qt6-base-dev \
    qt6-wayland \
    qt6-wayland-dev \
    qt6-declarative-dev \
    qt6-declarative-private-dev \
    qml6-module-qtqml \
    qml6-module-qtqml-workerscript \
    qml6-module-qtcore \
    qml6-module-qtquick \
    qml6-module-qtquick-window \
    qml6-module-qtquick-controls \
    qml6-module-qtquick-layouts \
    qml6-module-qtquick-templates \
    && \
    apt-get clean && apt-get autoremove && \
    rm -rf /var/lib/apt/lists/*

# automate for torizonPackages.json
RUN apt-get -q -y update && \
    apt-get -q -y install \
# DOES NOT REMOVE THIS LABEL: this is used for VS Code automation
    # __torizon_packages_dev_start__
	qt5-qmake:arm64 \
	qtdeclarative5-dev:arm64 \
	qtmultimedia5-dev:arm64 \
	libqt5multimedia5-plugins:arm64 \
	libqt5serialbus5:arm64 \
	libqt5serialbus5-dev:arm64 \
	libtesseract-dev:arm64 \
	tesseract-ocr:arm64 \
	libdrm2:arm64 \
	libqt5gui5:arm64 \
	libqt5quick5:arm64 \
	libgl1:arm64 \
	qtbase5-dev:arm64 \
	libqt5serialport5:arm64 \
	libqt5serialport5-dev:arm64 \
	qtwayland5:arm64 \
    # __torizon_packages_dev_end__
# DOES NOT REMOVE THIS LABEL: this is used for VS Code automation
    && \
    apt-get clean && apt-get autoremove && \
    rm -rf /var/lib/apt/lists/*

# ⚠️ DEBUG PURPOSES ONLY!!
# copies RSA key to enable SSH login for user
COPY .conf/id_rsa.pub /id_rsa.pub

# create folders needed for the different components
# configures SSH access to the container and sets environment by default
RUN mkdir /var/run/sshd && \
    sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' \
        -i /etc/pam.d/sshd && \
    if test $SSHUSERNAME != root ; \
        then mkdir -p /home/$SSHUSERNAME/.ssh ; \
        else mkdir -p /root/.ssh ; fi && \
    if test $SSHUSERNAME != root ; \
        then cp /id_rsa.pub /home/$SSHUSERNAME/.ssh/authorized_keys ; \
        else cp /id_rsa.pub /root/.ssh/authorized_keys ; fi && \
    echo "PermitUserEnvironment yes" >> /etc/ssh/sshd_config && \
    echo "Port ${SSH_DEBUG_PORT}" >> /etc/ssh/sshd_config && \
    su -c "env" $SSHUSERNAME > /etc/environment

RUN rm -r /etc/ssh/ssh*key && \
    dpkg-reconfigure openssh-server

ARG QT_QPA_PLATFORM=wayland
ENV QT_QPA_PLATFORM=wayland

CMD [ "/usr/sbin/sshd", "-D" ]

docker-compose.yml:

version: "3.9"
services:
  qttemp-debug:
    build:
      context: .
      dockerfile: Dockerfile.debug
    image: ${LOCAL_REGISTRY}:5002/qttemp-debug:${TAG}
    ports:
      # SSH debug
      - 2231:2231
      # gdbserver
      - 2232:2232
      # qml debug
      - 2233:2233
    volumes:
      - type: bind
        source: /tmp
        target: /tmp
      - type: bind
        source: /dev
        target: /dev
    device_cgroup_rules:
      # ... for tty0
      - "c 4:0 rmw"
      # ... for tty7
      - "c 4:7 rmw"
      # ... for /dev/input devices
      - "c 13:* rmw"
      - "c 199:* rmw"
      # ... for /dev/dri devices
      - "c 226:* rmw"
    depends_on: [
      weston
    ]

  qttemp:
    build:
      context: .
      dockerfile: Dockerfile
    image: ${DOCKER_LOGIN}/qttemp:${TAG}
    volumes:
      - type: bind
        source: /tmp
        target: /tmp
      - type: bind
        source: /dev
        target: /dev
    device_cgroup_rules:
      # ... for tty0
      - "c 4:0 rmw"
      # ... for tty7
      - "c 4:7 rmw"
      # ... for /dev/input devices
      - "c 13:* rmw"
      - "c 199:* rmw"
      # ... for /dev/dri devices
      - "c 226:* rmw"
    depends_on: [
      weston
    ]

  weston:
    image: torizon/weston${GPU}:2
    environment:
      - ACCEPT_FSL_EULA=1
    # Required to get udev events from host udevd via netlink
    network_mode: host
    volumes:
      - type: bind
        source: /tmp
        target: /tmp
      - type: bind
        source: /dev
        target: /dev
      - type: bind
        source: /run/udev
        target: /run/udev
    cap_add:
      - CAP_SYS_TTY_CONFIG
    # Add device access rights through cgroup...
    device_cgroup_rules:
      # ... for tty0
      - "c 4:0 rmw"
      # ... for tty1
      - "c 4:1 rmw"
      # ... for tty7
      - "c 4:7 rmw"
      # ... for /dev/input devices
      - "c 13:* rmw"
      - "c 199:* rmw"
      # ... for /dev/dri devices
      - "c 226:* rmw"


Could it be that I messed up when entering these values somehow? I didn’t really know what the creation path was meant to be, just assumed it was where I wanted the project directory to be located.

I also did not replace qttemp.pro.user or qttemp.pro.qtds from the original template. Could that be causing an issue? There are a lot of files in here that are unfamiliar to me.

I guess I will now try switching back to torizon-core 6 and the weston 3 image.

Hi @munderwoods ,

So if I understood correctly Weston is working again.

OK changing the weston image to 2 on my torizin-core 5 install made the weston container work. I also added that variable to my dockerfiles. The containers both work now, however, it appears to be running the template app for some reason I can’t understand. I replaced main.cpp with the one from my app, but when the app runs it just displays the torizon logo and prints “Hello Torizon” in the console. It does appear to be building my app because if I make a change to one I can see the g++ build process being run on it. Is the original version of the app being cached somewhere that I’m unaware of and copied to the container?

Even with the file structure you provided, it’s hard for me to know exactly what is happening, as I’m not a Qt developer. You can try to remove any files related to the template from your project (.c and .qml files), delete Makefile, the generated object files, the executable then debug again.

Could it be that I messed up when entering these values somehow? I didn’t really know what the creation path was meant to be, just assumed it was where I wanted the project directory to be located.

The creation path is exactly that: the project directory path. I don’t think it is related to your issue.

Best regards,
Lucas Akira

I tried again on torizon-core 6 with a 1080p monitor and had the same result:

SoC is: 'i.MX8MP'
SoC has GPU: true
SoC has DPU: false
g2d implementation: viv
Removing previously created '.X*-lock' entries under /tmp before starting Weston. Pass 'IGNORE_X_LOCKS=1' environment variable to Weston container to disable this behavior.
dos2unix: converting file /etc/xdg/weston/weston.ini to Unix format...
dos2unix: converting file /etc/xdg/weston-dev/weston.ini to Unix format...
00:00:00.000 [INFO] [seatd/seat.c:39] Created VT-bound seat seat0
00:00:00.000 [INFO] [seatd/seatd.c:194] seatd started
Date: 2023-06-01 UTC
[21:14:00.945] weston 10.0.1
               https://wayland.freedesktop.org
               Bug reports to: https://gitlab.freedesktop.org/wayland/weston/issues/
               Build: lf-5.15.52-2.1.0-10-g9452feba
[21:14:00.946] Command line: weston -Bdrm-backend.so --current-mode -Swayland-0
[21:14:00.946] OS: Linux, 5.15.77-6.2.0+git.aa0ff7e3554e, #1-TorizonCore SMP PREEMPT Wed Mar 29 15:33:40 UTC 2023, aarch64
[21:14:00.946] Flight recorder: enabled
[21:14:00.946] Using config file '/etc/xdg/weston/weston.ini'
[21:14:00.947] Output repaint window is 7 ms maximum.
[21:14:00.947] Loading module '/usr/lib/aarch64-linux-gnu/libweston-10/drm-backend.so'
[21:14:00.956] initializing drm backend
[21:14:00.956] Trying libseat launcher...
00:00:00.043 [INFO] [seatd/server.c:145] New client connected (pid: 25, uid: 1000, gid: 1000)
00:00:00.043 [INFO] [seatd/seat.c:170] Added client 1 to seat0
00:00:00.043 [INFO] [seatd/seat.c:480] Opened client 1 on seat0
[21:14:00.956] libseat: session control granted
[21:14:00.962] using /dev/dri/card1
[21:14:00.962] DRM: supports atomic modesetting
[21:14:00.962] DRM: does not support GBM modifiers
[21:14:00.962] DRM: supports picture aspect ratio
[21:14:00.962] Loading module '/usr/lib/aarch64-linux-gnu/libweston-10/gl-renderer.so'
[21:14:00.972] EGL client extensions: EGL_EXT_client_extensions
               EGL_EXT_platform_base EGL_KHR_platform_wayland
               EGL_EXT_platform_wayland EGL_EXT_device_query
               EGL_EXT_device_drm EGL_EXT_device_drm_render_node
               EGL_KHR_platform_gbm
[21:14:00.976] EGL device extensions: EGL_EXT_client_extensions
               EGL_EXT_platform_base EGL_KHR_platform_wayland
               EGL_EXT_platform_wayland EGL_EXT_device_query
               EGL_EXT_device_drm EGL_EXT_device_drm_render_node
               EGL_KHR_platform_gbm
[21:14:00.976] EGL version: 1.5
[21:14:00.976] EGL vendor: Vivante Corporation
[21:14:00.976] EGL client APIs: OpenGL_ES OpenVG
[21:14:00.976] EGL extensions: EGL_KHR_fence_sync EGL_KHR_reusable_sync
               EGL_KHR_wait_sync EGL_KHR_image EGL_KHR_image_base
               EGL_KHR_image_pixmap EGL_KHR_gl_texture_2D_image
               EGL_KHR_gl_texture_cubemap_image EGL_KHR_gl_renderbuffer_image
               EGL_EXT_image_dma_buf_import
               EGL_EXT_image_dma_buf_import_modifiers EGL_KHR_lock_surface
               EGL_KHR_create_context EGL_KHR_no_config_context
               EGL_KHR_surfaceless_context EGL_KHR_get_all_proc_addresses
               EGL_EXT_create_context_robustness EGL_EXT_protected_surface
               EGL_EXT_protected_content EGL_EXT_buffer_age
               EGL_ANDROID_native_fence_sync EGL_WL_bind_wayland_display
               EGL_WL_create_wayland_buffer_from_image EGL_KHR_partial_update
               EGL_EXT_swap_buffers_with_damage
               EGL_KHR_swap_buffers_with_damage EGL_EXT_pixel_format_float
[21:14:00.976] EGL_KHR_surfaceless_context available
[21:14:00.981] GL version: OpenGL ES 3.1 V6.4.3.p4.398061
[21:14:00.981] GLSL version: OpenGL ES GLSL ES 3.10
[21:14:00.981] GL vendor: Vivante Corporation
[21:14:00.981] GL renderer: Vivante GC7000UL
[21:14:00.981] GL extensions: GL_OES_vertex_type_10_10_10_2
               GL_OES_vertex_half_float GL_OES_element_index_uint
               GL_OES_mapbuffer GL_OES_vertex_array_object
               GL_OES_compressed_ETC1_RGB8_texture
               GL_OES_compressed_paletted_texture GL_OES_texture_npot
               GL_OES_rgb8_rgba8 GL_OES_depth_texture
               GL_OES_depth_texture_cube_map GL_OES_depth24 GL_OES_depth32
               GL_OES_packed_depth_stencil GL_OES_fbo_render_mipmap
               GL_OES_get_program_binary GL_OES_fragment_precision_high
               GL_OES_standard_derivatives GL_OES_EGL_image
               GL_OES_EGL_image_external GL_OES_EGL_image_external_essl3
               GL_OES_EGL_sync GL_OES_texture_stencil8
               GL_OES_shader_image_atomic
               GL_OES_texture_storage_multisample_2d_array
               GL_OES_required_internalformat GL_OES_surfaceless_context
               GL_OES_draw_buffers_indexed GL_OES_texture_border_clamp
               GL_OES_texture_buffer GL_OES_texture_cube_map_array
               GL_OES_draw_elements_base_vertex GL_OES_texture_half_float
               GL_OES_texture_float GL_KHR_blend_equation_advanced
               GL_KHR_debug GL_KHR_robustness
               GL_KHR_robust_buffer_access_behavior
               GL_EXT_texture_type_2_10_10_10_REV
               GL_EXT_texture_compression_dxt1 GL_EXT_texture_format_BGRA8888
               GL_EXT_texture_compression_s3tc GL_EXT_read_format_bgra
               GL_EXT_multi_draw_arrays GL_EXT_frag_depth
               GL_EXT_discard_framebuffer GL_EXT_blend_minmax
               GL_EXT_multisampled_render_to_texture
               GL_EXT_color_buffer_half_float GL_EXT_color_buffer_float
               GL_EXT_robustness GL_EXT_texture_sRGB_decode
               GL_EXT_draw_buffers_indexed GL_EXT_texture_border_clamp
               GL_EXT_texture_buffer GL_EXT_texture_cube_map_array
               GL_EXT_multi_draw_indirect GL_EXT_draw_elements_base_vertex
               GL_EXT_texture_rg GL_EXT_protected_textures GL_EXT_sRGB
               GL_EXT_unpack_subimage GL_VIV_direct_texture
[21:14:01.033] GL ES 3.1 - renderer features:
               read-back format: BGRA
               EGL Wayland extension: yes
[21:14:01.057] event1  - gpio-keys: is tagged by udev as: Keyboard
[21:14:01.057] event1  - gpio-keys: device is a keyboard
[21:14:01.061] event0  - 30370000.snvs:snvs-powerkey: is tagged by udev as: Keyboard
[21:14:01.061] event0  - 30370000.snvs:snvs-powerkey: device is a keyboard
[21:14:01.137] event2  - ILITEK ILITEK-TP: is tagged by udev as: Touchscreen
[21:14:01.137] event2  - ILITEK ILITEK-TP: device is a touch device
[21:14:01.146] event3  - ILITEK ILITEK-TP Mouse: is tagged by udev as: Mouse
[21:14:01.146] event3  - ILITEK ILITEK-TP Mouse: device is a pointer
[21:14:01.150] event4  - audio-hdmi HDMI Jack: is tagged by udev as: Switch
[21:14:01.260] event4  - not using input device '/dev/input/event4'
[21:14:01.286] libinput: configuring device "gpio-keys".
[21:14:01.286] libinput: configuring device "30370000.snvs:snvs-powerkey".
[21:14:01.286] Touchscreen - ILITEK ILITEK-TP - /sys/devices/platform/soc@0/32f10108.usb/38200000.usb/xhci-hcd.1.auto/usb1/1-1/1-1.1/1-1.1:1.0/0003:222A:0001.0001/input/input6/event2
[21:14:01.286] libinput: configuring device "ILITEK ILITEK-TP".
[21:14:01.286] input device event2 has no enabled output associated (none named), skipping calibration for now.
[21:14:01.286] libinput: configuring device "ILITEK ILITEK-TP Mouse".
[21:14:01.286] input device event3 has no enabled output associated (none named), skipping calibration for now.
[21:14:01.288] DRM: head 'HDMI-A-1' updated, connector 38 is connected, EDID make 'unknown', model 'unknown', serial 'unknown'
[21:14:01.288] DRM: head 'HDMI-A-1' found, connector 38 is connected, EDID make 'unknown', model 'unknown', serial 'unknown'
[21:14:01.401] DRM: head 'HDMI-A-2' updated, connector 40 is connected, EDID make 'ACR', model 'KA242Y', serial '105201B013P0'
[21:14:01.401] DRM: head 'HDMI-A-2' found, connector 40 is connected, EDID make 'ACR', model 'KA242Y', serial '105201B013P0'
[21:14:01.402] Registered plugin API 'weston_drm_output_api_v1' of size 24
[21:14:01.402] Registered plugin API 'weston_drm_virtual_output_api_v1' of size 48
[21:14:01.402] Color manager: no-op
[21:14:01.402] Module '/usr/lib/libgbm.so' already loaded
[21:14:01.402] no available modes for HDMI-A-1
[21:14:01.402] Cannot configure an output using weston_drm_output_api.
[21:14:01.402] Module '/usr/lib/libgbm.so' already loaded
[21:14:01.402] Output 'HDMI-A-2' using color profile: built-in default sRGB SDR profile
[21:14:01.403] Chosen EGL config details: id:  21 rgba: 8 8 8 0 buf: 24 dep:  0 stcl: 0 int: 1-60 type: win|pix|pbf|swap_preserved vis_id: XRGB8888 (0x34325258)
[21:14:01.403] Output HDMI-A-2 (crtc 36) video modes:
               1920x1080@75.0, preferred, 174.5 MHz
               1920x1080@60.0, 148.5 MHz
               1920x1080@60.0 16:9, 148.5 MHz
               1920x1080@59.9 16:9, 148.4 MHz
               1920x1080@50.0 16:9, 148.5 MHz
               1680x1050@59.9, 119.0 MHz
               1280x1024@60.0, 108.0 MHz
               1440x900@59.9, 88.8 MHz
               1280x800@59.9, current, 71.0 MHz
               1152x864@75.0, 108.0 MHz
               1280x720@60.0, 74.2 MHz
               1280x720@60.0 16:9, 74.2 MHz
               1280x720@59.9 16:9, 74.2 MHz
               1280x720@50.0 16:9, 74.2 MHz
               1024x768@70.1, 75.0 MHz
               1024x768@60.0, 65.0 MHz
               800x600@60.3, 40.0 MHz
               800x600@56.2, 36.0 MHz
               720x576@50.0, 27.0 MHz
               720x576@50.0 4:3, 27.0 MHz
               720x576@50.0 16:9, 27.0 MHz
               720x480@60.0 4:3, 27.0 MHz
               720x480@60.0 16:9, 27.0 MHz
               720x480@59.9, 27.0 MHz
               720x480@59.9 4:3, 27.0 MHz
               720x480@59.9 16:9, 27.0 MHz
               640x480@66.7, 30.2 MHz
               640x480@60.0 4:3, 25.2 MHz
               640x480@59.9, 25.2 MHz
               640x480@59.9 4:3, 25.2 MHz
               720x400@70.1, 28.3 MHz
[21:14:01.403] associating input device event1 with output HDMI-A-2 (none by udev)
[21:14:01.403] associating input device event0 with output HDMI-A-2 (none by udev)
[21:14:01.403] associating input device event2 with output HDMI-A-2 (none by udev)
[21:14:01.404] associating input device event3 with output HDMI-A-2 (none by udev)
[21:14:01.405] Output 'HDMI-A-2' enabled with head(s) HDMI-A-2
[21:14:01.405] output for input device event1 removed
[21:14:01.405] output for input device event0 removed
[21:14:01.406] output for input device event2 removed
[21:14:01.406] output for input device event3 removed
[21:14:01.406] event1  - gpio-keys: device removed
[21:14:01.520] event0  - 30370000.snvs:snvs-powerkey: device removed
[21:14:01.590] event2  - ILITEK ILITEK-TP: device removed
[21:14:01.710] event3  - ILITEK ILITEK-TP Mouse: device removed
00:00:00.916 [INFO] [seatd/seat.c:418] No clients on seat0 to activate
00:00:00.916 [INFO] [seatd/seat.c:524] Closed client 1 on seat0
00:00:00.916 [INFO] [seatd/seat.c:192] Removed client 1 from seat0
00:00:00.916 [INFO] [seatd/client.c:471] Client disconnected
00:00:00.927 [INFO] [seatd/seatd.c:218] seatd stopped
Switching back to vt 1

Going to switch back to 5 now and remove the makefile.

OK I figured out more of what’s going on here but I don’t know how to fix it. When I run the app it copies over the cotents of aarch64/debug to the container and runs the build that’s there. However, executable is not being built and in fact contains all the files from the original template project. Shouldn’t this be built and replaced every time I hit the run button? Also, how would I add the other files that my app depends on to that directory automatically?

In fact, the executable at /aarch64 is correct and if I copy and paste that to /aarch64/debug then my app will run. However, I don’t want to have to copy that over every time I build. I think that if I can get this part sorted then I will be off to the races. Please let me know if you have any insight, thanks.

A couple other questions since I was able to get some work done in this slow manner.

How do I fullscreen my qt app in wayland on boot and remove the border/menubar? Also, how do I remove the mouse? I need this to be a kiosk app.

I’m having some trouble sending rs485 messages from my app on the x50 db9 connector. I’ve used this code on a usb to rs485 adapter and gpio pins on a raspberry pi, but I don’t see that I’m sending a message at all when I’m connected to the rs485 debug port via screen. I do see output there while I’m booting the board, but not when I’m sending an actual message. I do have the following line in the docker-compose file:

devices:
  - "/dev/verdin-uart1:/dev/verdin-uart1"

I know you’re not a qt dev, but you should be able to see what I’m trying to do here:

    qDebug() << serialDevice->error();
    serialDevice->setPortName("/dev/verdin-uart1");
    qDebug() << serialDevice->open(QSerialPort::ReadWrite);
    qDebug() << serialDevice->error();
    serialDevice->setBaudRate(QSerialPort::Baud9600);
    serialDevice->setDataBits(QSerialPort::Data8);
    serialDevice->setFlowControl(QSerialPort::NoFlowControl);
    serialDevice->setParity(QSerialPort::NoParity);
    serialDevice->setStopBits(QSerialPort::OneStop);
    QObject::connect(serialDevice, SIGNAL(readyRead()), this, SLOT(readSerial()));

void MainWindow::openLock(int lockNumber, int boardNumber)
{
    qDebug() << lockNumber;
    qDebug() << boardNumber;

    QByteArray myHexArray = QByteArray::fromHex("8A01119B");
    qDebug() << myHexArray;
    qDebug() << serialDevice->error();
    qDebug() << serialDevice->write(myHexArray);
    qDebug() << serialDevice->error();
}

I know that it does do something to set the line in the docker-compose file because before I had it set I would get an error when opening the serial device. So I don’t understand why I wouldn’t be getting any output at all on the debug.

Oh, also, do you have any sort of crash recovery system?

Hi @munderwoods ,

I’ll try to answer your questions:

OK I figured out more of what’s going on here but I don’t know how to fix it. When I run the app it copies over the cotents of aarch64/debug to the container and runs the build that’s there. However, executable is not being built and in fact contains all the files from the original template project. Shouldn’t this be built and replaced every time I hit the run button? Also, how would I add the other files that my app depends on to that directory automatically?

When you compile a project some files are not rebuilt if there is no change to their respective source files. That’s standard behavior for a build system.

The project follows the instructions described in the .pro file, and using qmake the Makefile is generated, which in turn describes how to compile and generate the final executable. Either the .pro file is the template one, or you didn’t delete the previous executable/object files originally created with the template instructions. Did you remove the template source files and delete all object/executable files?

How do I fullscreen my qt app in wayland on boot and remove the border/menubar? Also, how do I remove the mouse? I need this to be a kiosk app.

You can look at the Qt documentation on how to enable fullscreen mode on your app. You can remove the Weston menubar by altering weston.ini as indicated in the Weston manpage (see panel-position). You apply it by bind mounting the new weston.ini in /etc/xdg/weston-dev/ and /etc/xdg/weston/ on your Weston container.

The cursor disappears if there’s no mouse connected on the module. There are some workarounds like hiding the cursor (https://community.nxp.com/t5/i-MX-Processors/how-to-disable-mouse-cursor-displaying-in-maaxboard-NXP-i-MX-8M/m-p/1323276), but if you really want to disable the mouse altogether you can try limiting mouse access to the container by not bind mounting it.

I’m having some trouble sending rs485 messages from my app on the x50 db9 connector. I’ve used this code on a usb to rs485 adapter and gpio pins on a raspberry pi, but I don’t see that I’m sending a message at all when I’m connected to the rs485 debug port via screen. I do see output there while I’m booting the board, but not when I’m sending an actual message. I do have the following line in the docker-compose file:

The device added on the docker-compose file looks correct. You can try following our article related to RS485 on Linux (UART (Linux) | Toradex Developer Center), which should also apply to TorizonCore 5.

Specifically you can either enable RS485 on userspace by executing some C code or via Device Tree.

Oh, also, do you have any sort of crash recovery system?

What do you mean exactly? In terms of a general OS crash treatment TorizonCore should have the same behavior as other Linux distributions.

Best regards,
Lucas Akira

Can you be more specific in terms of the directory tree? I deleted everything out of /aarch64/debug including the .obj directory. Or do you just mean any .o files in the whole tree?

Oh cool I figured this would have to be handled by the window manager. Ya I can just use w.showFullScreen()

Firstly I was going off this documentation before which appears to be describing how to accomplish the same thing but does not mention this step: How to Use UART on Torizon OS | Toradex Developer Center

This seems to happen often when using your documentation and leaves me wasting a lot of time.

Secondly, can you be a bit more specific? When you say to run this c code in userspace, do you mean run it inside a specific container? Am I intended to copy it to my app container, built it with g++ or something, then run it before running my app?

I mean that when my app crashes I want it to automatically restart. Is there a recommended method for accomplishing this? I could do this any number of ways in linux, but I’m not used to handling this in a docker container.

Hi @munderwoods ,

Can you be more specific in terms of the directory tree? I deleted everything out of /aarch64/debug including the .obj directory. Or do you just mean any .o files in the whole tree?

Deleting all contents of aarch64 should be good to force the recompilation of the program. But you also need to delete all files related to the Qt QML template like:

  • main.cpp, or the code part that calls the template
  • QML/main.qml, which describes the template app (white background with Torizon logo)
  • Other related files if there are any, you need to look in the original Qt QML project to find those.

Firstly I was going off this documentation before which appears to be describing how to accomplish the same thing but does not mention this step: How to Use UART on TorizonCore | Toradex Developer Center

The article you linked itself doesn’t mention this, that’s true. It does however have a brief section on RS-485, which points to the article I showed you before. Although I do understand your point that this information should be easier to find.

This seems to happen often when using your documentation and leaves me wasting a lot of time.

We’re constantly revising and updating our documentation to improve readability and clarity, so any feedback on this topic is very helpful. If you want, could you elaborate on what can be improved, preferably by creating another topic?

Secondly, can you be a bit more specific? When you say to run this c code in userspace, do you mean run it inside a specific container? Am I intended to copy it to my app container, built it with g++ or something, then run it before running my app?

Giving that we’re talking about TorizonCore the code in question (or an equivalent one) can be executed as part of your application which is run inside of a container. It should probably work provided that the container has access to the RS-485 device (which you already did on the Docker Compose file).

I mean that when my app crashes I want it to automatically restart. Is there a recommended method for accomplishing this? I could do this any number of ways in linux, but I’m not used to handling this in a docker container.

You can setup a behavior like this to the containers by using restart_policy on the Docker Compose file, as detailed here: Compose Deploy Specification | Docker Docs

Best regards,
Lucas Akira

OK I’m going to see what else I can clean up here. I hadn’t deleted QML/main.qml yet.

I guess I mostly expect all the information on RS-485 to be in one place, it seems I often end up with ten documentation tabs open to try and accomplish something. It’s too nested for my tastes.

OK, this makes perfect sense. I did attempt this and failed but I need to figure out the code since I’m pretty sure what I did is incorrect. I’m also gonna look into altering the device tree but I’ve had some trouble with that and already made a separate thread about trying to enable my display.

Ah great, thanks. Sorry I’m only a bit competent in all these fields and a master of none of them, so I’m not always sure what to look for where.

You’ve been super helpful and I’m satisfied with the result of this thread. If I have more issues I can’t find the answer to elsewhere I’ll make separate threads for them.

Glad I was able to help!

Best regards,
Lucas Akira