Skip to content

[BUG] intel iGPU hardware video encoding acceleration not triggered with lscr.io/linuxserver/webtop:ubuntu-xfce when using vah264enc #370

@nickrunning

Description

@nickrunning

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

When using the lscr.io/linuxserver/webtop:ubuntu-xfce image and setting SELKIES_ENCODER to vah264enc, the Intel iGPU UHD730 does not trigger hardware video encoding acceleration. However, when I use a custom-built image based on ghcr.io/linuxserver/baseimage-selkies:ubuntunoble and set vah264enc, the hardware video acceleration is triggered as expected. This can be observed by running intel_gpu_top and checking whether the selkies process is utilizing the Video column.

Expected Behavior

SELKIES_ENCODER set to vah264enc should trigger hardware video encoding acceleration on Intel iGPU UHD730 (visible in intel_gpu_top).

Steps To Reproduce

  1. Deploy a container using lscr.io/linuxserver/webtop:ubuntu-xfce
  2. Set SELKIES_ENCODER to vah264enc environment variable
  3. Start the container on a system with Intel iGPU UHD730
  4. Use the application to trigger video encoding
  5. Run intel_gpu_top and observe the Video column. The selkies process does not utilize video hardware acceleration.
  6. Compare with a custom image built from ghcr.io/linuxserver/baseimage-selkies:ubuntunoble with the same encoder setting: hardware acceleration is correctly triggered.

Environment

- OS: Ubuntu (version as per test environment)
- How docker service was installed: (please fill in as appropriate)

CPU architecture

x86-64

Docker creation

docker run -d --rm --name=webtop \
  --device /dev/dri:/dev/dri \
  -e SELKIES_ENCODER=vah264enc \
  lscr.io/linuxserver/webtop:ubuntu-xfce

Container logs

[migrations] started
[migrations] no migrations found
───────────────────────────────────────

      ██╗     ███████╗██╗ ██████╗
      ██║     ██╔════╝██║██╔═══██╗
      ██║     ███████╗██║██║   ██║
      ██║     ╚════██║██║██║   ██║
      ███████╗███████║██║╚██████╔╝
      ╚══════╝╚══════╝╚═╝ ╚═════╝

   Brought to you by linuxserver.io
───────────────────────────────────────

To support LSIO projects visit:
https://www.linuxserver.io/donate/

───────────────────────────────────────
GID/UID
───────────────────────────────────────

User UID:    1000
User GID:    100
───────────────────────────────────────
[ls.io-init] Creating initial backup of system rc.xml
**** adding /dev/dri/card0 to video group video with id 44 ****
**** adding /dev/dri/renderD128 to video group _ssh with id 103 ****
[custom-init] No custom files found, skipping...
_XSERVTransmkdir: ERROR: euid != 0,directory /tmp/.X11-unix will not be created.
screen 0 shmid 0
[ls.io-init] done.
The XKEYBOARD keymap compiler (xkbcomp) reports:
> Warning:          Could not resolve keysym XF86CameraAccessEnable
> Warning:          Could not resolve keysym XF86CameraAccessDisable
> Warning:          Could not resolve keysym XF86CameraAccessToggle
> Warning:          Could not resolve keysym XF86NextElement
> Warning:          Could not resolve keysym XF86PreviousElement
> Warning:          Could not resolve keysym XF86AutopilotEngageToggle
> Warning:          Could not resolve keysym XF86MarkWaypoint
> Warning:          Could not resolve keysym XF86Sos
> Warning:          Could not resolve keysym XF86NavChart
> Warning:          Could not resolve keysym XF86FishingChart
> Warning:          Could not resolve keysym XF86SingleRangeRadar
> Warning:          Could not resolve keysym XF86DualRangeRadar
> Warning:          Could not resolve keysym XF86RadarOverlay
> Warning:          Could not resolve keysym XF86TraditionalSonar
> Warning:          Could not resolve keysym XF86ClearvuSonar
> Warning:          Could not resolve keysym XF86SidevuSonar
> Warning:          Could not resolve keysym XF86NavInfo
Errors from xkbcomp are not fatal to the X server
19
20
WARNING:root:Invalid value(s) 'vah264enc' for encoder. Using system default.
INFO:data_websocket:pcmflux library found. Audio capture is available.
INFO:data_websocket:pixelflux library found. Striped encoding modes available.
INFO:root:Expected C js_config_t size (from ctypes): 1354 bytes
INFO:main:Upload directory ensured: /config/Desktop
INFO:main:Starting Selkies (WebSocket Mode) with settings: {'audio_enabled': (True, False), 'microphone_enabled': (True, False), 'gamepad_enabled': (True, False), 'clipboard_enabled': (True, False), 'command_enabled': (True, False), 'file_transfers': ['upload', 'download'], 'encoder': 'x264enc', 'framerate': (8, 120), 'h264_crf': (5, 50), 'jpeg_quality': (1, 100), 'h264_fullcolor': (False, False), 'h264_streaming_mode': (False, False), 'use_cpu': (False, False), 'use_paint_over_quality': (True, False), 'paint_over_jpeg_quality': (1, 100), 'h264_paintover_crf': (5, 50), 'h264_paintover_burst_frames': (1, 30), 'second_screen': (True, False), 'audio_bitrate': '320000', 'is_manual_resolution_mode': (False, False), 'manual_width': 0, 'manual_height': 0, 'scaling_dpi': '96', 'enable_binary_clipboard': (False, False), 'use_browser_cursors': (False, False), 'use_css_scaling': (False, False), 'ui_title': 'Selkies', 'ui_show_logo': (True, False), 'ui_show_core_buttons': (True, False), 'ui_show_sidebar': (True, False), 'ui_sidebar_show_video_settings': (True, False), 'ui_sidebar_show_screen_settings': (True, False), 'ui_sidebar_show_audio_settings': (True, False), 'ui_sidebar_show_stats': (True, False), 'ui_sidebar_show_clipboard': (True, False), 'ui_sidebar_show_files': (True, False), 'ui_sidebar_show_apps': (True, False), 'ui_sidebar_show_sharing': (True, False), 'ui_sidebar_show_gamepads': (True, False), 'ui_sidebar_show_fullscreen': (True, False), 'ui_sidebar_show_gaming_mode': (True, False), 'ui_sidebar_show_trackpad': (True, False), 'ui_sidebar_show_keyboard_button': (True, False), 'ui_sidebar_show_soft_buttons': (True, False), 'port': 8082, 'dri_node': '', 'audio_device_name': 'output.monitor', 'watermark_path': '', 'watermark_location': -1, 'debug': (False, False), 'enable_sharing': (True, False), 'enable_collab': (True, False), 'enable_shared': (True, False), 'enable_player2': (True, False), 'enable_player3': (True, False), 'enable_player4': (True, False)}
INFO:main:Initial Encoder: x264enc, Framerate: 60
INFO:main:SelkiesStreamingApp initialized: encoder=x264enc, display=1024x768
INFO:main:All main components initialized. Running server...
INFO:webrtc_input:System DPI detected as ~96. Cursor size cap set to 32x32px.
INFO:webrtc_input:Resetting keyboard modifiers.
INFO:webrtc_input:Clipboard monitor running (binary mode: False)
INFO:webrtc_input:Found XFIXES version 4.0
INFO:webrtc_input:starting cursor monitor
INFO:webrtc_input:watching for cursor changes
WARNING:data_websocket:Cannot broadcast cursor data: no clients connected or server not ready.
INFO:data_websocket:Data WebSocket Server listening on port 8082
dbus-daemon[323]: [system] Activating service name='org.freedesktop.login1' requested by ':1.16' (uid=1000 pid=443 comm="xfce4-panel" label="unconfined") (using servicehelper)
dbus-daemon[323]: [system] Activated service 'org.freedesktop.login1' failed: Failed to execute program org.freedesktop.login1: Permission denied
INFO:webrtc_input:Initializing 4 persistent gamepad instances...
INFO:root:Packed js_config payload for 'Microsoft X-Box 360 pad' (js0): len=1360 bytes. Name='Microsoft X-Box 360 pad', Vendor=0x045e, Product=0x028e, Version=0x0100, Reported Buttons=11 (Array capacity: 512), Reported Axes=8 (Array capacity: 64)
INFO:selkies_gamepad:Gamepad configured. JS socket: /tmp/selkies_js0.sock, EVDEV socket: /tmp/selkies_event1000.sock. Using fixed config: Microsoft X-Box 360 pad
INFO:webrtc_input:Initialized and started persistent gamepad instance for index 0 (Name: 'Microsoft X-Box 360 pad', JS: /tmp/selkies_js0.sock, EVDEV: /tmp/selkies_event1000.sock).
INFO:root:Packed js_config payload for 'Microsoft X-Box 360 pad' (js1): len=1360 bytes. Name='Microsoft X-Box 360 pad', Vendor=0x045e, Product=0x028e, Version=0x0100, Reported Buttons=11 (Array capacity: 512), Reported Axes=8 (Array capacity: 64)
INFO:selkies_gamepad:Gamepad configured. JS socket: /tmp/selkies_js1.sock, EVDEV socket: /tmp/selkies_event1001.sock. Using fixed config: Microsoft X-Box 360 pad
INFO:webrtc_input:Initialized and started persistent gamepad instance for index 1 (Name: 'Microsoft X-Box 360 pad', JS: /tmp/selkies_js1.sock, EVDEV: /tmp/selkies_event1001.sock).
INFO:root:Packed js_config payload for 'Microsoft X-Box 360 pad' (js2): len=1360 bytes. Name='Microsoft X-Box 360 pad', Vendor=0x045e, Product=0x028e, Version=0x0100, Reported Buttons=11 (Array capacity: 512), Reported Axes=8 (Array capacity: 64)
INFO:selkies_gamepad:Gamepad configured. JS socket: /tmp/selkies_js2.sock, EVDEV socket: /tmp/selkies_event1002.sock. Using fixed config: Microsoft X-Box 360 pad
INFO:webrtc_input:Initialized and started persistent gamepad instance for index 2 (Name: 'Microsoft X-Box 360 pad', JS: /tmp/selkies_js2.sock, EVDEV: /tmp/selkies_event1002.sock).
INFO:root:Packed js_config payload for 'Microsoft X-Box 360 pad' (js3): len=1360 bytes. Name='Microsoft X-Box 360 pad', Vendor=0x045e, Product=0x028e, Version=0x0100, Reported Buttons=11 (Array capacity: 512), Reported Axes=8 (Array capacity: 64)
INFO:selkies_gamepad:Gamepad configured. JS socket: /tmp/selkies_js3.sock, EVDEV socket: /tmp/selkies_event1003.sock. Using fixed config: Microsoft X-Box 360 pad
INFO:webrtc_input:Initialized and started persistent gamepad instance for index 3 (Name: 'Microsoft X-Box 360 pad', JS: /tmp/selkies_js3.sock, EVDEV: /tmp/selkies_event1003.sock).
INFO:selkies_gamepad:Gamepad /tmp/selkies_js0.sock: Event processor started.
INFO:selkies_gamepad:JS interposer server listening on /tmp/selkies_js0.sock
INFO:selkies_gamepad:Gamepad /tmp/selkies_js1.sock: Event processor started.
INFO:selkies_gamepad:JS interposer server listening on /tmp/selkies_js1.sock
INFO:selkies_gamepad:Gamepad /tmp/selkies_js2.sock: Event processor started.
INFO:selkies_gamepad:JS interposer server listening on /tmp/selkies_js2.sock
INFO:selkies_gamepad:Gamepad /tmp/selkies_js3.sock: Event processor started.
INFO:selkies_gamepad:JS interposer server listening on /tmp/selkies_js3.sock
INFO:selkies_gamepad:EVDEV interposer server listening on /tmp/selkies_event1000.sock
INFO:selkies_gamepad:EVDEV interposer server listening on /tmp/selkies_event1001.sock
INFO:selkies_gamepad:EVDEV interposer server listening on /tmp/selkies_event1002.sock
INFO:selkies_gamepad:EVDEV interposer server listening on /tmp/selkies_event1003.sock
dbus-daemon[323]: [system] Activating service name='org.freedesktop.login1' requested by ':1.17' (uid=1000 pid=407 comm="/usr/bin/xfce4-session" label="unconfined") (using servicehelper)
dbus-daemon[323]: [system] Activated service 'org.freedesktop.login1' failed: Failed to execute program org.freedesktop.login1: Permission denied
dbus-daemon[323]: [system] Activating service name='org.freedesktop.PolicyKit1' requested by ':1.18' (uid=1000 pid=407 comm="/usr/bin/xfce4-session" label="unconfined") (using servicehelper)
dbus-daemon[323]: [system] Activated service 'org.freedesktop.PolicyKit1' failed: Failed to execute program org.freedesktop.PolicyKit1: Permission denied
dbus-daemon[323]: [system] Activating service name='org.freedesktop.login1' requested by ':1.18' (uid=1000 pid=407 comm="/usr/bin/xfce4-session" label="unconfined") (using servicehelper)
dbus-daemon[323]: [system] Activated service 'org.freedesktop.login1' failed: Failed to execute program org.freedesktop.login1: Permission denied
dbus-daemon[323]: [system] Activating service name='org.freedesktop.PolicyKit1' requested by ':1.18' (uid=1000 pid=407 comm="/usr/bin/xfce4-session" label="unconfined") (using servicehelper)
dbus-daemon[323]: [system] Activated service 'org.freedesktop.PolicyKit1' failed: Failed to execute program org.freedesktop.PolicyKit1: Permission denied
dbus-daemon[323]: [system] Activating service name='org.freedesktop.login1' requested by ':1.18' (uid=1000 pid=407 comm="/usr/bin/xfce4-session" label="unconfined") (using servicehelper)
dbus-daemon[323]: [system] Activated service 'org.freedesktop.login1' failed: Failed to execute program org.freedesktop.login1: Permission denied
dbus-daemon[323]: [system] Activating service name='org.freedesktop.PolicyKit1' requested by ':1.18' (uid=1000 pid=407 comm="/usr/bin/xfce4-session" label="unconfined") (using servicehelper)
dbus-daemon[323]: [system] Activated service 'org.freedesktop.PolicyKit1' failed: Failed to execute program org.freedesktop.PolicyKit1: Permission denied
dbus-daemon[323]: [system] Activating service name='org.freedesktop.login1' requested by ':1.18' (uid=1000 pid=407 comm="/usr/bin/xfce4-session" label="unconfined") (using servicehelper)
dbus-daemon[323]: [system] Activated service 'org.freedesktop.login1' failed: Failed to execute program org.freedesktop.login1: Permission denied
dbus-daemon[323]: [system] Activating service name='org.freedesktop.PolicyKit1' requested by ':1.18' (uid=1000 pid=407 comm="/usr/bin/xfce4-session" label="unconfined") (using servicehelper)
dbus-daemon[323]: [system] Activated service 'org.freedesktop.PolicyKit1' failed: Failed to execute program org.freedesktop.PolicyKit1: Permission denied
dbus-daemon[323]: [system] Activating service name='org.freedesktop.login1' requested by ':1.18' (uid=1000 pid=407 comm="/usr/bin/xfce4-session" label="unconfined") (using servicehelper)
dbus-daemon[323]: [system] Activated service 'org.freedesktop.login1' failed: Failed to execute program org.freedesktop.login1: Permission denied
dbus-daemon[323]: [system] Activating service name='org.freedesktop.PolicyKit1' requested by ':1.18' (uid=1000 pid=407 comm="/usr/bin/xfce4-session" label="unconfined") (using servicehelper)
dbus-daemon[323]: [system] Activated service 'org.freedesktop.PolicyKit1' failed: Failed to execute program org.freedesktop.PolicyKit1: Permission denied
INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 57714)
INFO:data_websocket:Sending last known cursor to new client ('127.0.0.1', 57714)
INFO:data_websocket:Attempting to establish PulseAudio connection...
INFO:data_websocket:PulseAudio connection established.
INFO:data_websocket:Registering new client for display: primary
INFO:data_websocket:Applying and sanitizing client settings for 'primary' (initial=True)
INFO:webrtc_input:Binary clipboard setting changing to: True. Restarting monitor.
INFO:webrtc_input:Stopping clipboard monitor
INFO:webrtc_input:Clipboard monitor task cancelled.
INFO:webrtc_input:Clipboard monitor stopped
INFO:data_websocket:DPI changed from None to 96. Applying system-level change.
INFO:gst_app_resize:XFCE detected. Applying xfconf-query for DPI 96.
INFO:webrtc_input:Clipboard monitor running (binary mode: True)
INFO:gst_app_resize:Found active XFCE session environment. Commands will be executed within this context.
INFO:gst_app_resize:Successfully set XFCE DPI to 96 using xfconf-query.
INFO:gst_app_resize:Attempting to set cursor size to: 32 (based on DPI 96)
INFO:gst_app_resize:Successfully set cursor size to 32
INFO:data_websocket:Initial setup or dimensional change detected for 'primary'. Performing full display reconfiguration.
INFO:data_websocket:Starting display reconfiguration...
INFO:data_websocket:Calculating new extended desktop layout from ALL clients...
INFO:data_websocket:Layout calculated: Total Size=1920x1106. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 1920, 'h': 1106}}
INFO:data_websocket:Mode 1920x1106 not found. Creating it.
INFO:data_websocket:Defining logical monitors for the window manager...
INFO:data_websocket:Starting separate capture instances for each ACTIVE display region...
INFO:data_websocket:Client 'primary' is active. Starting its capture.
INFO:data_websocket:Preparing to start capture for display='primary': Res=1920x1106, Offset=0x0
INFO:data_websocket:Video chunk sender started for display 'primary'.
INFO:data_websocket:SUCCESS: Capture started for 'primary'.
INFO:data_websocket:New frame backpressure task started for display 'primary'.
INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 1920, "height": 1106}
INFO:data_websocket:Broadcasting display config update: DISPLAY_CONFIG_UPDATE,{"type": "display_config_update", "displays": ["primary"]}
INFO:data_websocket:Display reconfiguration finished successfully.
INFO:data_websocket:Reconfiguration process complete (state unlocked).
INFO:data_websocket:Initial client settings message processed by ws_handler.
INFO:data_websocket:Initial setup: Primary client connected, audio not active, attempting start.
INFO:data_websocket:Starting pcmflux audio pipeline...
INFO:data_websocket:pcmflux settings: device='output.monitor', bitrate=320000, channels=2
INFO:data_websocket:Frame-based backpressure logic task started for display 'primary'.
INFO:data_websocket:Client settings received, proceeding with backpressure loop for 'primary'.
[pcmflux] Attempting to connect to PulseAudio device: output.monitor...
INFO:data_websocket:pcmflux audio capture started successfully.
INFO:data_websocket:pcmflux audio chunk broadcasting task started.
X Shared Memory Extension available.
XShm setup complete for 1920x1106.
CPU cores available: 8
Stream settings active -> Res: 1920x1106 | FPS: 60.0 | Stripes: 1 | Mode: H264 (CPU) FullFrame | CRF: 25 | PaintOver CRF: 18 (Burst: 5f) | Colorspace: I420 (Limited Range) | Damage Thresh: 10f | Damage Dur: 20f
[pcmflux] SUCCESS: Connected to PulseAudio.
[pcmflux] SUCCESS: Opus encoder created.
[pcmflux] Capture loop started. Device: output.monitor, Rate: 48000, Channels: 2, Bitrate: 320 kbps, VBR: On, Silence Gate: Off, Debug Logging: Off, PCM Chunk: 3840 bytes
INFO:data_websocket:Received START_AUDIO command from client for server-to-client audio.
INFO:data_websocket:START_AUDIO: pcmflux audio pipeline already active.
INFO:data_websocket:Received redundant resize request for primary (1920x1106). No action taken.
[pcmflux] First non-silent audio chunk detected! Encoding...
WARNING:data_websocket:Backpressure TRIGGERED for 'primary'. S:1470, C:1239 (EffDesync:224.8f > Allowed:120.0f).
INFO:data_websocket:Received STOP_VIDEO for 'primary'. Stopping stream.
INFO:data_websocket:Stopping all streams for display 'primary'...
INFO:data_websocket:Backpressure logic task for 'primary' cancelled.
INFO:data_websocket:Backpressure logic task for 'primary' finished.
INFO:data_websocket:Backpressure task for 'primary' was stopped. Resetting its frame IDs.
INFO:data_websocket:Resetting frame IDs for display 'primary'.
INFO:data_websocket:Broadcasting primary pipeline reset to all 1 clients: PIPELINE_RESETTING primary
INFO:data_websocket:Successfully stopped all streams for display 'primary'.
INFO:data_websocket:Video chunk sender for 'primary' cancelled.
INFO:data_websocket:Video chunk sender for 'primary' finished.
Capture loop stopped. X resources released.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Issues

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions