RDP connection issue after adding volume for Weston background image

Hi,

I am trying to run Weston with RDP enabled and set a custom background image (Loading.png).

Without mounting the image as a volume, I am able to access the device via RDP without any issues. However, when I add the volume to include Loading.png, the background image gets updated correctly, but I am no longer able to access the device through RDP.

Below is the docker-compose.yml file I am using:
services:
weston:
image: torizon/weston:$CT_TAG_WESTON
restart: always
privileged: true
network_mode: host
ipc: host
environment:
- ENABLE_RDP=1
- RDP_PORT=3389
command: >
–developer
–tty=/dev/tty7

–use-pixman
volumes:
- /tmp:/tmp
- /dev:/dev
- /run/udev:/run/udev
- /home/torizon/weston.ini:/etc/xdg/weston/weston.ini
- /home/torizon/Loading.png:/home/torizon/Loading.png
cap_add:
- CAP_SYS_TTY_CONFIG
device_cgroup_rules:
- ‘c 4:* rmw’
- ‘c 13:* rmw’
- ‘c 226:* rmw’
- ‘c 10:223 rmw’
I am using the following system:

Software Summary

Bootloader: U-Boot
Kernel: 6.6.108-7.4.0
Torizon OS: 7.4.0 (Docker variant)

Hardware

Toradex Colibri iMX7D 1GB (eMMC)
Colibri Evaluation Board V3

My weston.ini configuration is:

[core]
idle-time=0

[shell]
background-image=/home/torizon/Loading.png
background-type=scale

How can I correctly set a background image in Weston while keeping RDP access working?

Hi, I’m the Toradex AI Assistant.

I might make mistakes or occasionally get you wrong. Our support team will step in if needed.


The issue you’re encountering is likely related to file permissions and volume mounting paths. Based on the documentation and similar community issues, here are the solutions to resolve your RDP access problem:

Volume Path Issue

The problem appears to be with mounting volumes directly into the /home/torizon/ directory inside the container (1). When you mount a volume to /home/torizon/Loading.png, it can interfere with the container’s file permissions and directory structure.

Recommended Solutions

1. Use Alternative Mount Path

Instead of mounting the image to /home/torizon/Loading.png, mount it to a different path inside the container (1):

volumes:
  - /tmp:/tmp
  - /dev:/dev
  - /run/udev:/run/udev
  - /home/torizon/weston.ini:/etc/xdg/weston/weston.ini
  - /home/torizon/Loading.png:/app/Loading.png

Then update your weston.ini configuration:

[core]
idle-time=0

[shell]
background-image=/app/Loading.png
background-type=scale

2. Use Bind Mount Configuration

For better control over file permissions, you can configure the volume as a bind mount with specific ownership (1):

volumes:
  background_image:
    driver: local
    driver_opts:
      type: none
      device: /home/torizon/Loading.png
      o: bind,uid=1000,gid=1000

services:
  weston:
    # ... other configuration
    volumes:
      - background_image:/app/Loading.png

3. Alternative Approach: Build Custom Container

For production environments, consider building your own Weston container with the background image included (2):

FROM torizon/weston:$CT_TAG_WESTON
COPY Loading.png /app/Loading.png
COPY weston.ini /etc/xdg/weston/weston.ini

RDP Configuration Verification

Ensure your RDP configuration is correct for Colibri iMX7D. According to the documentation, RDP should work with the following environment variables (3):

environment:
  - ENABLE_RDP=1

The RDP_PORT=3389 environment variable you’re using is the default port and should work correctly (3).

File Permissions Consideration

When mounting files as volumes, ensure the torizon user (uid: 1000) has proper access to the mounted files (4). The issue might be that the mounted volume creates permission conflicts that affect the RDP service startup.

Try implementing the first solution with the alternative mount path, as this approach avoids mounting directly into the /home/torizon/ directory and should resolve your RDP access issue while maintaining the custom background image functionality.

Best regards, Toradex AI Assistant.


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

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

[core]
idle-time=0

[shell]
background-image=/custom/Loading.png
background-type=scale
services:
weston:
image: torizon/weston:$CT_TAG_WESTON
restart: always
privileged: true
network_mode: host
ipc: host

environment:
  - ENABLE_RDP=1

command: >
  --developer
  --tty=/dev/tty7
  --
  --use-pixman

volumes:
  - /tmp:/tmp
  - /dev:/dev
  - /run/udev:/run/udev
  - /home/torizon/weston.ini:/custom/weston.ini
  - /home/torizon:/custom


cap_add:
  - CAP_SYS_TTY_CONFIG

device_cgroup_rules:
  - 'c 4:* rmw'
  - 'c 13:* rmw'
  - 'c 226:* rmw'
  - 'c 10:223 rmw'

now rdp works perfect but not able to set background image on weston guide me to do that @ToradexAI

The issue is with your volume mounting and configuration file path. According to the Weston documentation, there are specific requirements for applying custom configurations(1).

Configuration File Path Issue

Your current setup has a mismatch between where you’re mounting the configuration file and where Weston expects to find it. You’re mounting the weston.ini to /custom/weston.ini, but Weston looks for configuration files in specific locations(1).

Corrected Configuration

Here’s the corrected docker-compose.yml:

services:
  weston:
    image: torizon/weston:$CT_TAG_WESTON
    restart: always
    privileged: true
    network_mode: host
    ipc: host
    environment:
      - ENABLE_RDP=1
    command: >
      --developer
      --tty=/dev/tty7
      --
      --use-pixman
    volumes:
      - /tmp:/tmp
      - /dev:/dev
      - /run/udev:/run/udev
      - /home/torizon/weston.ini:/etc/xdg/weston-dev/weston.ini
      - /home/torizon/Loading.png:/custom/Loading.png
    cap_add:
      - CAP_SYS_TTY_CONFIG
    device_cgroup_rules:
      - 'c 4:* rmw'
      - 'c 13:* rmw'
      - 'c 226:* rmw'
      - 'c 10:223 rmw'

Key Changes Made

  1. Configuration File Path: Changed from /custom/weston.ini to /etc/xdg/weston-dev/weston.ini because when using the --developer switch, Weston uses /etc/xdg/weston-dev/weston.ini(1)

  2. Background Image Path: Mount only the image file to /custom/Loading.png instead of the entire directory

Updated weston.ini

Your weston.ini should remain:

[core]
idle-time=0

[shell]
background-image=/custom/Loading.png
background-type=scale

How Weston Configuration Works

According to the documentation, the Toradex container has a Weston startup script that uses different configuration files based on the --developer switch(1):

  • /etc/xdg/weston/weston.ini: used by default, if the --developer switch is not present
  • /etc/xdg/weston-dev/weston.ini: used when you start the Weston container with the --developer switch

Since you’re using --developer in your command, you need to mount your custom weston.ini to /etc/xdg/weston-dev/weston.ini.

Important Note

The weston.ini file is sensitive to trailing whitespaces after configuration names and options. If a configuration is not applied correctly, check if there are whitespaces between text and line breaks(1).

This configuration should now properly display your background image while maintaining RDP functionality.

Best regards, Toradex AI Assistant.


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

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

Thanks for above reference i did above steps but on console i got this output so check and give me response @ToradexAI
weston-1 | Switching VT tty7 to text mode if currently in graphics mode
weston-1 | Switching to VT 7
weston-1 | SoC is: ‘i.MX7D’
weston-1 | SoC has GPU: false
weston-1 | SoC has DPU: false
weston-1 | Fallbacking to software renderer.
weston-1 | Certificates for screen sharing not found in /var/volatile
weston-1 | Certificate request self-signature ok
weston-1 | subject=C = CH, ST = Luzern, L = Luzern, O = Toradex, CN = www.toradex.com
weston-1 | Certificate for screen sharing successfully generated
weston-1 | 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.
weston-1 | dos2unix: converting file /etc/xdg/weston/weston.ini to Unix format…
weston-1 | dos2unix: problems renaming ‘/etc/xdg/weston-dev/d2utmpZ3j6ub’ to ‘/etc/xdg/weston-dev/weston.ini’: Device or resource busy
weston-1 | output file remains in ‘/etc/xdg/weston-dev/d2utmpZ3j6ub’
weston-1 | dos2unix: problems converting file /etc/xdg/weston-dev/weston.ini
weston-1 | Switching back to vt 7
weston-1 exited with code 0

The console output shows that the issue is related to the dos2unix conversion process failing on your mounted weston.ini file (1). This is a known issue that can occur when mounting configuration files as volumes.

Root Cause Analysis

The error message indicates:

dos2unix: problems renaming '/etc/xdg/weston-dev/d2utmpZ3j6ub' to '/etc/xdg/weston-dev/weston.ini': Device or resource busy

This happens because the dos2unix command in the Weston entry script cannot properly process the mounted file (1). When you bind mount a file from the host, it can create permission and file system conflicts during the conversion process.

Solution Options

Option 1: Build Custom Weston Container (Recommended)

For production environments, build your own Weston Docker image with the configuration file included (2):

FROM torizon/weston:$CT_TAG_WESTON
COPY weston.ini /etc/xdg/weston-dev/weston.ini
COPY Loading.png /custom/Loading.png

(2)

Option 2: Mount Directory Instead of Individual File

Instead of mounting the individual weston.ini file, mount the entire configuration directory:

services:
  weston:
    image: torizon/weston:$CT_TAG_WESTON
    restart: always
    privileged: true
    network_mode: host
    ipc: host
    environment:
      - ENABLE_RDP=1
    command: >
      --developer
      --tty=/dev/tty7
      --
      --use-pixman
    volumes:
      - /tmp:/tmp
      - /dev:/dev
      - /run/udev:/run/udev
      - /home/torizon/weston-config:/etc/xdg/weston-dev/
      - /home/torizon/Loading.png:/custom/Loading.png
    cap_add:
      - CAP_SYS_TTY_CONFIG
    device_cgroup_rules:
      - 'c 4:* rmw'
      - 'c 13:* rmw'
      - 'c 226:* rmw'
      - 'c 10:223 rmw'

Create a directory /home/torizon/weston-config/ on your host and place your weston.ini file inside it.

Option 3: Use Alternative Configuration Method

For evaluation and prototyping, you can bind mount the weston.ini file to overwrite the existing configuration (2):

volumes:
  - /home/torizon/weston-config:/etc/xdg/weston/

And use the container without the --developer switch:

command: >
  --tty=/dev/tty7
  --
  --use-pixman

File System Considerations

The issue you’re experiencing is related to how Docker handles bind mounts and file operations. The dos2unix command in the Weston entry script tries to modify the mounted file, but encounters permission or file system conflicts (1).

Recommended Approach

I recommend using Option 1 (building a custom container) as it:

  • Avoids file mounting conflicts
  • Provides better performance
  • Is more suitable for production deployments
  • Eliminates the dos2unix conversion issues

The custom container approach ensures that your configuration files are properly integrated into the container image without runtime mounting conflicts.

Best regards, Toradex AI Assistant.


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

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

I follow above step so I able to set Background image on weston but rdp not showing ui so how i solve this issue @ToradexAI
[+] Running 0/1
⠸ Container torizon-weston-1 Created 0.3s
Attaching to weston-1
weston-1 | Switching VT tty7 to text mode if currently in graphics mode
weston-1 | Switching VT mode of /dev/tty7 to text
weston-1 | Switching to VT 7
weston-1 | SoC is: ‘i.MX7D’
weston-1 | SoC has GPU: false
weston-1 | SoC has DPU: false
weston-1 | Fallbacking to software renderer.
weston-1 | Certificates for screen sharing not found in /var/volatile
weston-1 | Certificate request self-signature ok
weston-1 | subject=C = CH, ST = Luzern, L = Luzern, O = Toradex, CN = www.toradex.com
weston-1 | Certificate for screen sharing successfully generated
weston-1 | 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.
weston-1 | dos2unix: converting file /etc/xdg/weston/weston.ini to Unix format…
weston-1 | dos2unix: converting file /etc/xdg/weston-dev/weston.ini to Unix format…
weston-1 | 00:00:00.000 [INFO] [seatd/seat.c:39] Created VT-bound seat seat0
weston-1 | 00:00:00.000 [INFO] [seatd/seatd.c:194] seatd started
weston-1 | Date: 2026-04-16 UTC
weston-1 | [06:24:16.697] weston 10.0.1
weston-1 | https://wayland.freedesktop.org
weston-1 | Bug reports to: Making sure you're not a bot!
weston-1 | Build: 10.0.1
weston-1 | [06:24:16.700] Command line: weston -Bdrm-backend.so -Swayland-0 --use-pixman --use-pixman
weston-1 | [06:24:16.700] OS: Linux, 6.6.108-7.4.0-00057-g451f1e35226f, #1-Torizon SMP PREEMPT Mon Jun 30 14:11:55 UTC 2025, armv7l
weston-1 | [06:24:16.700] Flight recorder: enabled
weston-1 | [06:24:16.701] Using config file ‘/etc/xdg/weston/weston.ini’
weston-1 | [06:24:16.702] Output repaint window is 7 ms maximum.
weston-1 | [06:24:16.702] Loading module ‘/usr/lib/arm-linux-gnueabihf/libweston-10/drm-backend.so’
weston-1 | [06:24:16.721] initializing drm backend
weston-1 | [06:24:16.721] Trying libseat launcher…
weston-1 | 00:00:00.101 [INFO] [seatd/server.c:145] New client connected (pid: 53, uid: 1000, gid: 1000)
weston-1 | 00:00:00.101 [INFO] [seatd/seat.c:170] Added client 7 to seat0
weston-1 | [06:24:16.724] libseat: session control granted
weston-1 | 00:00:00.103 [INFO] [seatd/seat.c:480] Opened client 7 on seat0
weston-1 | [06:24:16.734] using /dev/dri/card0
weston-1 | [06:24:16.734] DRM: supports atomic modesetting
weston-1 | [06:24:16.734] DRM: supports GBM modifiers
weston-1 | [06:24:16.734] DRM: supports picture aspect ratio
weston-1 | [06:24:16.761] event1 - gpio-keys: is tagged by udev as: Keyboard
weston-1 | [06:24:16.762] event1 - gpio-keys: device is a keyboard
weston-1 | [06:24:16.772] event0 - AD7879 Touchscreen: is tagged by udev as: Touchscreen
weston-1 | [06:24:16.775] event0 - AD7879 Touchscreen: device is a touch device
weston-1 | [06:24:16.776] event0 - AD7879 Touchscreen: applying calibration: 0.037522 -1.042141 0.997722 -1.324664 -0.060302 1.139967
weston-1 | [06:24:16.830] libinput: configuring device “gpio-keys”.
weston-1 | [06:24:16.830] Touchscreen - AD7879 Touchscreen - /sys/devices/platform/soc/30800000.bus/30a20000.i2c/i2c-0/0-002c/input/input0/event0
weston-1 | [06:24:16.830] libinput: configuring device “AD7879 Touchscreen”.
weston-1 | [06:24:16.832] DRM: head ‘DPI-1’ updated, connector 37 is connected, EDID make ‘unknown’, model ‘unknown’, serial ‘unknown’
weston-1 | [06:24:16.832] DRM: head ‘DPI-1’ found, connector 37 is connected, EDID make ‘unknown’, model ‘unknown’, serial ‘unknown’
weston-1 | [06:24:16.833] Registered plugin API ‘weston_drm_output_api_v1’ of size 12
weston-1 | [06:24:16.833] Registered plugin API ‘weston_drm_virtual_output_api_v1’ of size 24
weston-1 | [06:24:16.833] Color manager: no-op
weston-1 | [06:24:16.833] Output ‘DPI-1’ using color profile: built-in default sRGB SDR profile
weston-1 | [06:24:16.853] DRM: output DPI-1 uses shadow framebuffer.
weston-1 | [06:24:16.853] Output DPI-1 (crtc 35) video modes:
weston-1 | 800x480@56.9, preferred, current, 25.2 MHz
weston-1 | [06:24:16.853] associating input device event1 with output DPI-1 (none by udev)
weston-1 | [06:24:16.853] associating input device event0 with output DPI-1 (none by udev)
weston-1 | [06:24:16.853] Output ‘DPI-1’ enabled with head(s) DPI-1
weston-1 | [06:24:16.853] Compositor capabilities:
weston-1 | arbitrary surface rotation: yes
weston-1 | screen capture uses y-flip: no
weston-1 | cursor planes: yes
weston-1 | arbitrary resolutions: no
weston-1 | view mask clipping: yes
weston-1 | explicit sync: no
weston-1 | color operations: no
weston-1 | presentation clock: CLOCK_MONOTONIC, id 1
weston-1 | presentation clock resolution: 0.000000001 s
weston-1 | [06:24:16.854] Loading module ‘/usr/lib/arm-linux-gnueabihf/weston/desktop-shell.so’
weston-1 | [06:24:16.856] launching ‘/usr/lib/arm-linux-gnueabihf/weston-keyboard’
weston-1 | [06:24:16.862] Note: support for the deprecated wl_shell interface is disabled. If a legacy client still needs it, it can be re-enabled by passing -Ddeprecated-wl-shell=true to Meson when building Weston.
weston-1 | [06:24:16.862] launching ‘/usr/lib/arm-linux-gnueabihf/weston-desktop-shell’
weston-1 | could not load cursor ‘dnd-move’
weston-1 | could not load cursor ‘dnd-move’
weston-1 | could not load cursor ‘dnd-copy’
weston-1 | could not load cursor ‘dnd-none’
weston-1 | could not load cursor ‘dnd-copy’
weston-1 | could not load cursor ‘dnd-none’
also see log if needed.

I see the issue. Based on your logs, Weston is starting successfully with your background image configuration, but RDP is not being enabled. The problem is that when you removed the --developer switch, you also need to ensure RDP is properly configured for the standard Weston configuration path.

Analysis of Your Current Setup

From your logs, I can see that Weston is using the configuration file /etc/xdg/weston/weston.ini (as shown in the log: “Using config file ‘/etc/xdg/weston/weston.ini’”), and the background image configuration is working since dos2unix successfully converted your mounted weston.ini file.

However, RDP is not being activated because the RDP configuration needs to be properly set in your weston.ini file.

Solution: Add RDP Configuration to Your weston.ini

You need to add RDP configuration directly to your weston.ini file. Based on the documentation, when you set ENABLE_RDP=1, the Weston entry script modifies the configuration file to enable RDP (1).

Update your weston.ini file to include RDP configuration:

[core]
idle-time=0

[shell]
background-image=/custom/Loading.png
background-type=scale

[rdp]
enable=true
port=3389

Alternative Approach: Use Docker Environment Variables

If the above doesn’t work, try this approach with your current volume mounting setup:

services:
  weston:
    image: torizon/weston:$CT_TAG_WESTON
    restart: always
    privileged: true
    network_mode: host
    ipc: host
    environment:
      - ENABLE_RDP=1
    command: >
      --tty=/dev/tty7
      --
      --use-pixman
    volumes:
      - /tmp:/tmp
      - /dev:/dev
      - /run/udev:/run/udev
      - /home/torizon/weston-config:/etc/xdg/weston/
      - /home/torizon/Loading.png:/custom/Loading.png
    cap_add:
      - CAP_SYS_TTY_CONFIG
    device_cgroup_rules:
      - 'c 4:* rmw'
      - 'c 13:* rmw'
      - 'c 226:* rmw'
      - 'c 10:223 rmw'

Keep your weston.ini simple:

[core]
idle-time=0

[shell]
background-image=/custom/Loading.png
background-type=scale

Verification Steps

  1. Check RDP Port: After starting the container, verify that RDP is listening on port 3389 (1):

    netstat -an | grep 3389
    
  2. Check Container Logs: Look for RDP-related messages in the Weston logs to confirm RDP is being initialized.

  3. Test RDP Connection: Use an RDP client to connect to your device’s IP address on port 3389 (1).

Important Note for Colibri iMX7D

According to the documentation, RDP should work on Colibri iMX7D modules (1). Your logs show that Weston is using software rendering (Fallbacking to software renderer), which is expected for the iMX7D since it doesn’t have a dedicated GPU.

Try the first approach with the RDP configuration directly in your weston.ini file, as this should ensure RDP is properly enabled while maintaining your custom background image.

Best regards, Toradex AI Assistant.


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

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

services:
weston:
image: torizon/weston:$CT_TAG_WESTON
restart: always
privileged: true
network_mode: host
ipc : host

environment:
  - ENABLE_RDP=1
  - RDP_PORT=3389

command: >
  --developer
  --tty=/dev/tty7
  --
  --config=/home/torizon/custom/weston.ini

volumes:
  - /tmp:/tmp
  - /dev:/dev
  - /run/udev:/run/udev
  - /home/torizon/custom:/home/torizon/custom

cap_add:
  - CAP_SYS_TTY_CONFIG

device_cgroup_rules:
  - 'c 4:* rmw'
  - 'c 13:* rmw'
  - 'c 226:* rmw'
  - 'c 10:223 rmw'

now image getting set on weston locally but Rdp not able connect @ToradexAI how i solve this issue?

The issue is with your configuration approach. You’re using the --config parameter with the --developer switch, but according to the Weston documentation, this creates a conflict in how Weston loads configuration files(1).

Root Cause Analysis

When you use --developer switch, Weston expects to find the configuration file at /etc/xdg/weston-dev/weston.ini(1). However, you’re also using --config=/home/torizon/custom/weston.ini, which overrides the standard configuration loading mechanism.

The ENABLE_RDP=1 environment variable works by modifying the default Weston configuration files, but when you specify a custom config path, this automatic RDP enablement may not work properly(2).

Solution: Use Standard Configuration Paths

Here’s the corrected approach:

services:
  weston:
    image: torizon/weston:$CT_TAG_WESTON
    restart: always
    privileged: true
    network_mode: host
    ipc: host
    environment:
      - ENABLE_RDP=1
    command: >
      --developer
      --tty=/dev/tty7
      --
      --use-pixman
    volumes:
      - /tmp:/tmp
      - /dev:/dev
      - /run/udev:/run/udev
      - /home/torizon/custom/weston.ini:/etc/xdg/weston-dev/weston.ini
      - /home/torizon/custom/Loading.png:/home/torizon/custom/Loading.png
    cap_add:
      - CAP_SYS_TTY_CONFIG
    device_cgroup_rules:
      - 'c 4:* rmw'
      - 'c 13:* rmw'
      - 'c 226:* rmw'
      - 'c 10:223 rmw'

Key Changes Made

  1. Removed --config parameter: Let Weston use its standard configuration loading mechanism(1)
  2. Mount to correct path: Mount your weston.ini to /etc/xdg/weston-dev/weston.ini since you’re using --developer(1)
  3. Removed RDP_PORT=3389: This is the default port and the environment variable might cause conflicts(2)

Verify RDP is Working

After starting the container, check if RDP is listening:

netstat -an | grep 3389

You should see something like:

tcp        0      0 0.0.0.0:3389            0.0.0.0:*               LISTEN

Your weston.ini Configuration

Keep your weston.ini simple:

[core]
idle-time=0

[shell]
background-image=/home/torizon/custom/Loading.png
background-type=scale

Why This Works

The Toradex Weston container has a startup script that automatically configures RDP when ENABLE_RDP=1 is set, but only when using the standard configuration file paths(2). By using the --developer switch and mounting to /etc/xdg/weston-dev/weston.ini, you allow the automatic RDP configuration to work while maintaining your custom background image(1).

This approach should resolve your RDP connectivity issue while preserving your custom background image functionality.

Best regards, Toradex AI Assistant.


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

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

now from your solution i Did actual this but see the log what i got error @ToradexAI and tell me how i solve this erro for above approch you given.
⠸ Container torizon-weston-1 Created 0.3s
Attaching to weston-1
weston-1 | Switching VT tty7 to text mode if currently in graphics mode
weston-1 | Switching to VT 7
weston-1 | SoC is: ‘i.MX7D’
weston-1 | SoC has GPU: false
weston-1 | SoC has DPU: false
weston-1 | Fallbacking to software renderer.
weston-1 | Certificates for screen sharing not found in /var/volatile
weston-1 | Certificate request self-signature ok
weston-1 | subject=C = CH, ST = Luzern, L = Luzern, O = Toradex, CN = www.toradex.com
weston-1 | Certificate for screen sharing successfully generated
weston-1 | 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.
weston-1 | dos2unix: converting file /etc/xdg/weston/weston.ini to Unix format…
weston-1 | dos2unix: problems renaming ‘/etc/xdg/weston-dev/d2utmpogcD50’ to ‘/etc/xdg/weston-dev/weston.ini’: Device or resource busy
weston-1 | output file remains in ‘/etc/xdg/weston-dev/d2utmpogcD50’
weston-1 | dos2unix: problems converting file /etc/xdg/weston-dev/weston.ini
weston-1 | Switching back to vt 7
weston-1 exited with code 0

The error you’re seeing is the same dos2unix conversion issue we encountered earlier(1). The problem is that when you bind mount a file directly, the dos2unix command in the Weston entry script cannot properly process the mounted file due to file system conflicts.

Solution: Build Custom Weston Container

Based on the documentation, for production environments, the recommended approach is to build your own Weston Docker image with the configuration file included(1):

FROM torizon/weston:$CT_TAG_WESTON
COPY weston.ini /etc/xdg/weston-dev/weston.ini
COPY Loading.png /home/torizon/custom/Loading.png

(1)

Alternative Solution: Use Directory Mounting

Instead of mounting individual files, mount the entire directory to avoid the dos2unix file locking issue:

services:
  weston:
    image: torizon/weston:$CT_TAG_WESTON
    restart: always
    privileged: true
    network_mode: host
    ipc: host
    environment:
      - ENABLE_RDP=1
    command: >
      --developer
      --tty=/dev/tty7
      --
      --use-pixman
    volumes:
      - /tmp:/tmp
      - /dev:/dev
      - /run/udev:/run/udev
      - /home/torizon/custom:/etc/xdg/weston-dev/
      - /home/torizon/custom/Loading.png:/home/torizon/custom/Loading.png
    cap_add:
      - CAP_SYS_TTY_CONFIG
    device_cgroup_rules:
      - 'c 4:* rmw'
      - 'c 13:* rmw'
      - 'c 226:* rmw'
      - 'c 10:223 rmw'

Required Directory Structure

Create the following structure on your host:

/home/torizon/custom/
├── weston.ini
└── Loading.png

Your weston.ini should contain:

[core]
idle-time=0

[shell]
background-image=/home/torizon/custom/Loading.png
background-type=scale

Why This Works

The directory mounting approach avoids the file locking issue that occurs when dos2unix tries to convert a directly mounted file(1). When you mount a directory, the files inside can be properly processed by the container’s startup scripts.

Recommended Long-term Solution

For production use, I strongly recommend building a custom container image as shown in the first solution. This approach:

  • Eliminates file mounting conflicts
  • Provides better performance
  • Is more suitable for production deployments
  • Avoids the dos2unix conversion issues entirely

The custom container approach ensures that your configuration files are properly integrated into the container image without runtime mounting conflicts(1).

Best regards, Toradex AI Assistant.


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

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.