Skip to content

[BUG] KDE fcitx5 input method is not working on glibc container #425

Closed as not planned

Description

@xfl12345

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

image tag working
alpine-kde ✅️
arch-kde ❌️
ubuntu-kde ❌️

Expected Behavior

Type Ctrl + Space will switch the input method

Steps To Reproduce

  1. Open System Setting
  2. Navigate to Keyboard -> Virtual Keyboard -> Fcitx 5 Wayland Launcher -> (Bottom Right) Apply
  3. Navigate to Input Method -> Add Input Method... -> (Search Box) Type pinyin -> Select Pinyin -> (Bottom Right) + Add -> (Bottom Right) Apply
  4. (Top Right) Click Close Button
  5. Launch and keep the cursor focus in chromium konsole firefox (and so on)
  6. Type Ctrl + Space to switch the input method

Environment

- OS: Ubuntu 24.04.4 LTS (Noble Numbat) x86_64
- Kernel: Linux 6.14.0-37-generic
- Shell: bash 5.2.21
- GPU: NVIDIA GeForce RTX 4070 Ti [Discrete]
- How docker service was installed: Dockerfile build

CPU architecture

x86-64

Docker creation

  • common.env

    LANG='en_US.UTF-8'
    LANGUAGE='en_US.UTF-8'
    LC_CTYPE='en_US.UTF-8'
    LC_NUMERIC='en_US.UTF-8'
    LC_TIME='en_US.UTF-8'
    LC_COLLATE='en_US.UTF-8'
    LC_MONETARY='en_US.UTF-8'
    LC_MESSAGES='en_US.UTF-8'
    LC_PAPER='en_US.UTF-8'
    LC_NAME='en_US.UTF-8'
    LC_ADDRESS='en_US.UTF-8'
    LC_TELEPHONE='en_US.UTF-8'
    LC_MEASUREMENT='en_US.UTF-8'
    LC_IDENTIFICATION='en_US.UTF-8'
    LC_ALL='en_US.UTF-8'
    
    PUID=1001
    PGID=1001
    TZ=Asia/Hong_Kong
    TITLE=xcxr-xfl-webtop
    CUSTOM_USER=xfl
    PASSWORD='Changeme!'
    START_DOCKER=true
    DISABLE_IPV6=false
    # PIXELFLUX_WAYLAND=false
    MAX_RESOLUTION=3840x2160
    DRI_NODE=/dev/dri/renderD128
    
    SELKIES_SCALING_DPI=100
    SELKIES_ENCODER='vp9enc,x264enc,x264enc-striped,jpeg'
    SELKIES_ENABLE_BINARY_CLIPBOARD=true
    # SELKIES_USE_BROWSER_CURSORS=true
    
    XMODIFIERS='@im=fcitx'
  • docker-compose.yml

    x-xfl-webtop-common: &x-xfl-webtop-common
      env_file:
        - ./common.env
      # 可选:启用 Docker-in-Docker(谨慎使用)
      privileged: true
      sysctls:
        - net.ipv4.conf.all.src_valid_mark=1
      cap_add:
        - NET_ADMIN
        - SYS_MODULE
      security_opt:
        - apparmor=unconfined
        - seccomp=unconfined
      shm_size: 8gb
      deploy:
        resources:
          reservations:
            devices:
              - driver: nvidia
                count: all
                capabilities: ['compute','video','graphics','utility']
      networks:
        - xfl_webtop_network
      restart: unless-stopped
    
    
    services:
      xfl_webtop_ubuntu_kde:
        <<: *x-xfl-webtop-common
        image: localbuild/xfl/webtop:ubuntu-kde
        container_name: xfl-webtop-ubuntu-kde
        pull_policy: build
        build:
          context: ./
          dockerfile_inline: >
            FROM linuxserver/webtop:ubuntu-kde
            RUN apt update
            RUN apt install -y fonts-noto-mono fonts-noto-extra fonts-noto-cjk-extra fonts-unifont
            RUN apt install -y language-pack-zh-hans locales
            RUN apt install -y fcitx5 fcitx5-chinese-addons kde-config-fcitx5
            RUN apt install -y firefox firefox-locale-zh* firefox-locale-en
        volumes:
          - ./volume/ubuntu/kde/moved_root/config:/config
          - ./volume/ubuntu/kde/moved_root/var/lib/docker:/var/lib/docker
          # 通用部分
          - /dev/dri:/dev/dri
          - /lib/modules:/lib/modules:ro
        ports:
          - 3000:3000
    
      xfl_webtop_alpine_kde:
        <<: *x-xfl-webtop-common
        image: localbuild/xfl/webtop:alpine-kde-version-6c037ce1
        container_name: xfl-webtop-alpine-kde
        pull_policy: build
        build:
          context: ./
          dockerfile_inline: >
            FROM linuxserver/webtop:alpine-kde
            RUN apk add fcitx5 fcitx5-chinese-addons fcitx5-configtool fcitx5-gtk fcitx5-qt
            RUN apk add firefox-esr
        volumes:
          - ./volume/alpine/kde/moved_root/config:/config
          - ./volume/alpine/kde/moved_root/var/lib/docker:/var/lib/docker
          # 通用部分
          - /dev/dri:/dev/dri
          - /lib/modules:/lib/modules:ro
        ports:
          - 9000:3000
    
    networks:
      xfl_webtop_network:
        name: xfl-webtop-network
        driver: bridge
        driver_opts:
          com.docker.network.bridge.name: "br-dc4xfl0"
        enable_ipv4: true
        enable_ipv6: true

Container logs

Alpine KDE
[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: 1001
User GID: 1001
───────────────────────────────────────
[ls.io-init] Generating labwc rc.xml from template
/usr/bin/nvidia-smi
**** creating video group video68yj with id 44 ****
**** adding /dev/dri/card1 to video group video68yj with id 44 ****
**** creating video group videowqpv with id 993 ****
**** adding /dev/dri/renderD128 to video group videowqpv with id 993 ****
[custom-init] No custom files found, skipping...
[svc-de] Wayland mode: Waiting for socket at /config/.XDG/wayland-1...
[svc-de] /config/.XDG/wayland-1 found launching de
[ls.io-init] done.
kbuildsycoca6 running...
echo: write error
19
20
WARNING:root:Invalid value(s) '100' for scaling_dpi. Using system default.
WARNING:root:Invalid value(s) '100' for scaling_dpi. Using system default.
INFO:selkies.main:Starting mode 'websockets'...
INFO:selkies.main:Starting Selkies in 'websockets' mode.
WARNING:root:Invalid value(s) '100' for scaling_dpi. Using system default.
WARNING:root:Invalid value(s) '100' for scaling_dpi. Using system default.
INFO:data_websocket:pcmflux library found. Audio capture is available.
[Wayland] DRINODE unset. Initializing Software Renderer (Pixman).
INFO:data_websocket:pixelflux library found. Striped encoding modes available.
[Wayland] Socket listening on: "wayland-1"
INFO:root:Expected C js_config_t size (from ctypes): 1354 bytes
INFO:main:Upload directory ensured: /config/Desktop
INFO:main:Legacy Mode ENABLED (SELKIES_MASTER_TOKEN is not set).
INFO:main:Starting Selkies (WebSocket Mode) with settings: {'_setting_definitions': [{'name': 'audio_enabled', 'type': 'bool', 'default': True, 'help': 'Enable server-to-client audio streaming.'}, {'name': 'microphone_enabled', 'type': 'bool', 'default': True, 'help': 'Enable client-to-server microphone forwarding.'}, {'name': 'gamepad_enabled', 'type': 'bool', 'default': True, 'help': 'Enable gamepad support.'}, {'name': 'clipboard_enabled', 'type': 'bool', 'default': True, 'help': 'Enable clipboard synchronization.'}, {'name': 'clipboard_in_enabled', 'type': 'bool', 'default': True, 'help': 'Enable client-to-server clipboard synchronization.'}, {'name': 'clipboard_out_enabled', 'type': 'bool', 'default': True, 'help': 'Enable server-to-client clipboard synchronization.'}, {'name': 'command_enabled', 'type': 'bool', 'default': True, 'help': 'Enable parsing of command websocket messages.'}, {'name': 'file_transfers', 'type': 'list', 'default': 'upload,download', 'meta': {'allowed': ['upload', 'download']}, 'help': 'Allowed file transfer directions (comma-separated: "upload,download"). Set to "" or "none" to disable.'}, {'name': 'framerate', 'type': 'range', 'default': '8-120', 'meta': {'default_value': 60}, 'help': 'Allowed framerate range (e.g., "8-165") or a fixed value (e.g., "60").'}, {'name': 'h264_crf', 'type': 'range', 'default': '5-50', 'meta': {'default_value': 25}, 'help': 'Allowed H.264 CRF range (e.g., "5-50") or a fixed value.'}, {'name': 'video_bitrate', 'type': 'range', 'default': '1-100', 'meta': {'default_value': 8}, 'help': 'Default video-bitrate aka CBR, in Megabits per second (Mbps), allowed range (e.g., "1-100") or a fixed value (e.g., "8" for 8 Mbps)'}, {'name': 'rate_control_mode', 'type': 'enum', 'default': 'crf', 'meta': {'allowed': ['crf', 'cbr']}, 'help': 'Rate control mode for video encoding (cbr or crf). Only effective when enable_rate_control is true.'}, {'name': 'enable_rate_control', 'type': 'bool', 'default': False, 'help': 'Enable rate control for video encoding. Used in association with rate_control_mode.'}, {'name': 'audio_bitrate', 'type': 'enum', 'default': '320000', 'meta': {'allowed': ['64000', '128000', '192000', '256000', '320000']}, 'help': 'The default audio bitrate.'}, {'name': 'is_manual_resolution_mode', 'type': 'bool', 'default': False, 'help': 'Lock the resolution to the manual width/height values.'}, {'name': 'manual_width', 'type': 'int', 'default': 0, 'help': 'Lock width to a fixed value. Setting this forces manual resolution mode.'}, {'name': 'manual_height', 'type': 'int', 'default': 0, 'help': 'Lock height to a fixed value. Setting this forces manual resolution mode.'}, {'name': 'scaling_dpi', 'type': 'enum', 'default': '96', 'meta': {'allowed': ['96']}, 'help': 'The default DPI for UI scaling.'}, {'name': 'enable_binary_clipboard', 'type': 'bool', 'default': False, 'help': 'Allow binary data (e.g., images) on the clipboard.'}, {'name': 'use_browser_cursors', 'type': 'bool', 'default': False, 'help': 'Use browser CSS cursors instead of rendering to canvas.'}, {'name': 'use_css_scaling', 'type': 'bool', 'default': False, 'help': 'HiDPI when false, if true a lower resolution is sent from the client and the canvas is stretched.'}, {'name': 'ui_title', 'type': 'str', 'default': 'Selkies', 'help': 'Title in top left corner of sidebar.'}, {'name': 'ui_show_logo', 'type': 'bool', 'default': True, 'help': 'Show the Selkies logo in the sidebar.'}, {'name': 'ui_show_core_buttons', 'type': 'bool', 'default': True, 'help': 'Show the core components buttons display, audio, microphone, and gamepad.'}, {'name': 'ui_show_sidebar', 'type': 'bool', 'default': True, 'help': 'Show the main sidebar UI.'}, {'name': 'ui_sidebar_show_video_settings', 'type': 'bool', 'default': True, 'help': 'Show the video settings section in the sidebar.'}, {'name': 'ui_sidebar_show_screen_settings', 'type': 'bool', 'default': True, 'help': 'Show the screen settings section in the sidebar.'}, {'name': 'ui_sidebar_show_audio_settings', 'type': 'bool', 'default': True, 'help': 'Show the audio settings section in the sidebar.'}, {'name': 'ui_sidebar_show_stats', 'type': 'bool', 'default': True, 'help': 'Show the stats section in the sidebar.'}, {'name': 'ui_sidebar_show_clipboard', 'type': 'bool', 'default': True, 'help': 'Show the clipboard section in the sidebar.'}, {'name': 'ui_sidebar_show_files', 'type': 'bool', 'default': True, 'help': 'Show the file transfer section in the sidebar.'}, {'name': 'ui_sidebar_show_apps', 'type': 'bool', 'default': True, 'help': 'Show the applications section in the sidebar.'}, {'name': 'ui_sidebar_show_sharing', 'type': 'bool', 'default': True, 'help': 'Show the sharing section in the sidebar.'}, {'name': 'ui_sidebar_show_gamepads', 'type': 'bool', 'default': True, 'help': 'Show the gamepads section in the sidebar.'}, {'name': 'ui_sidebar_show_fullscreen', 'type': 'bool', 'default': True, 'help': 'Show the fullscreen button in the sidebar.'}, {'name': 'ui_sidebar_show_gaming_mode', 'type': 'bool', 'default': True, 'help': 'Show the gaming mode button in the sidebar.'}, {'name': 'ui_sidebar_show_trackpad', 'type': 'bool', 'default': True, 'help': 'Show the virtual trackpad button in the sidebar.'}, {'name': 'ui_sidebar_show_keyboard_button', 'type': 'bool', 'default': True, 'help': 'Show the on-screen keyboard button in the display area.'}, {'name': 'ui_sidebar_show_soft_buttons', 'type': 'bool', 'default': True, 'help': 'Show the soft buttons section in the sidebar.'}, {'name': 'enable_sharing', 'type': 'bool', 'default': True, 'help': 'Master toggle for all sharing features.'}, {'name': 'enable_collab', 'type': 'bool', 'default': True, 'help': 'Enable collaborative (read-write) sharing link.'}, {'name': 'enable_shared', 'type': 'bool', 'default': True, 'help': 'Enable view-only sharing links.'}, {'name': 'enable_player2', 'type': 'bool', 'default': True, 'help': 'Enable sharing link for gamepad player 2.'}, {'name': 'enable_player3', 'type': 'bool', 'default': True, 'help': 'Enable sharing link for gamepad player 3.'}, {'name': 'enable_player4', 'type': 'bool', 'default': True, 'help': 'Enable sharing link for gamepad player 4.'}, {'name': 'debug', 'type': 'bool', 'default': False, 'help': 'Enable debug logging.'}, {'name': 'mode', 'type': 'str', 'default': 'websockets', 'help': "Specify the mode: 'webrtc' or 'websockets'; defaults to websockets"}, {'name': 'enable_dual_mode', 'type': 'bool', 'default': False, 'help': 'Enable switching Streaming modes from UI'}, {'name': 'audio_device_name', 'type': 'str', 'default': 'output.monitor', 'help': 'Audio device name for pcmflux capture.'}, {'name': 'encoder', 'type': 'enum', 'default': 'x264enc', 'meta': {'allowed': ['x264enc', 'x264enc-striped', 'jpeg']}, 'help': 'The default video encoder.'}, {'name': 'jpeg_quality', 'type': 'range', 'default': '1-100', 'meta': {'default_value': 40}, 'help': 'Allowed JPEG quality range (e.g., "1-100") or a fixed value.'}, {'name': 'h264_fullcolor', 'type': 'bool', 'default': False, 'help': 'Enable H.264 full color range for pixelflux encoders.'}, {'name': 'h264_streaming_mode', 'type': 'bool', 'default': False, 'help': 'Enable H.264 streaming mode for pixelflux encoders.'}, {'name': 'use_cpu', 'type': 'bool', 'default': False, 'help': 'Force CPU-based encoding for pixelflux.'}, {'name': 'use_paint_over_quality', 'type': 'bool', 'default': True, 'help': 'Enable high-quality paint-over for static scenes.'}, {'name': 'paint_over_jpeg_quality', 'type': 'range', 'default': '1-100', 'meta': {'default_value': 90}, 'help': 'Allowed JPEG paint-over quality range or a fixed value.'}, {'name': 'h264_paintover_crf', 'type': 'range', 'default': '5-50', 'meta': {'default_value': 18}, 'help': 'Allowed H.264 paint-over CRF range or a fixed value.'}, {'name': 'h264_paintover_burst_frames', 'type': 'range', 'default': '1-30', 'meta': {'default_value': 5}, 'help': 'Allowed H.264 paint-over burst frames range or a fixed value.'}, {'name': 'second_screen', 'type': 'bool', 'default': True, 'help': 'Enable support for a second monitor/display.'}, {'name': 'port', 'type': 'int', 'default': 8081, 'env_var': 'CUSTOM_WS_PORT', 'help': 'Port for the data websocket server.'}, {'name': 'control_port', 'type': 'int', 'default': 8083, 'help': 'Port for the internal control plane API.'}, {'name': 'master_token', 'type': 'str', 'default': '', 'help': 'Master token to enable secure mode and protect the control plane API.'}, {'name': 'dri_node', 'type': 'str', 'default': '', 'env_var': 'DRI_NODE', 'help': 'Path to the DRI render node for VA-API.'}, {'name': 'watermark_path', 'type': 'str', 'default': '', 'env_var': 'WATERMARK_PNG', 'help': 'Absolute path to the watermark PNG file.'}, {'name': 'watermark_location', 'type': 'int', 'default': -1, 'env_var': 'WATERMARK_LOCATION', 'help': 'Watermark location enum (0-6).'}, {'name': 'wayland_socket_index', 'type': 'int', 'default': 0, 'help': 'Index for the Wayland command socket (e.g. 0 for wayland-0).'}], 'audio_enabled': (True, False), 'microphone_enabled': (True, False), 'gamepad_enabled': (True, False), 'clipboard_enabled': (True, False), 'clipboard_in_enabled': (True, False), 'clipboard_out_enabled': (True, False), 'command_enabled': (True, False), 'file_transfers': ['upload', 'download'], 'framerate': (8, 120), 'h264_crf': (5, 50), 'video_bitrate': (1, 100), 'rate_control_mode': 'crf', 'enable_rate_control': (False, False), 'audio_bitrate': '320000', 'is_manual_resolution_mode': (False, False), 'manual_width': 0, 'manual_height': 0, 'scaling_dpi': '96', 'enable_binary_clipboard': (True, 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), 'enable_sharing': (True, False), 'enable_collab': (True, False), 'enable_shared': (True, False), 'enable_player2': (True, False), 'enable_player3': (True, False), 'enable_player4': (True, False), 'debug': (False, False), 'mode': 'websockets', 'enable_dual_mode': (False, False), 'audio_device_name': 'output.monitor', 'encoder': 'x264enc', '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': (False, False), 'port': 8082, 'control_port': 8083, 'master_token': '', 'dri_node': '/dev/dri/renderD128', 'watermark_path': '', 'watermark_location': -1, 'wayland_socket_index': 0}
INFO:main:Initial Encoder: x264enc, Framerate: 60
INFO:main:SelkiesStreamingApp initialized: encoder=x264enc, display=1024x768
INFO:webrtc_input:kwin_wayland detected: enabling Clipboard-Input fallback for Unicode.
INFO:webrtc_input:Wayland input injection initialized.
INFO:webrtc_input:Built Wayland scancode map with 491 keys.
INFO:main:All main components initialized. Running server...
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:webrtc_input:Clipboard monitor running (binary mode: True)
INFO:webrtc_input:Wayland mode: Cursor monitor disabled (handled by compositor callback).
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
INFO:data_websocket:Data WebSocket Server listening on port 8082
No desktop processes found to terminate.
[svc-de] Wayland mode: Waiting for socket at /config/.XDG/wayland-1...
[svc-de] /config/.XDG/wayland-1 found launching de
kbuildsycoca6 running...
INFO:data_websocket:Legacy client ('127.0.0.1', 43488) connected. Role: controller, Slot: None
INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 43488)
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:data_websocket:DPI changed from None to 96. Applying system-level change.
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=1912x948. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 1912, 'h': 948}}
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=1912x948, Offset=0x0
INFO:main:Parsed DRI node '/dev/dri/renderD128' to index 0.
INFO:data_websocket:Registered Wayland cursor callback for 'primary'
[Wayland] Configuring Output: 1912x948 @ 60.00 FPS (Scale 1.00)
[Wayland] Encode Node Index: 0 | Driver: ../../../../bus/pci/drivers/nvidia
[Wayland] Nvidia Encoder detected. Initializing NVENC...
[NVENC] Initializing...
INFO:data_websocket:Video chunk sender started for display 'primary'.
INFO:data_websocket:SUCCESS: Capture started for 'primary'.
INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 1912, "height": 948}
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
[pcmflux] Attempting to connect to PulseAudio device: output.monitor with latency: 10ms
INFO:data_websocket:pcmflux audio capture started successfully.
[pcmflux] SUCCESS: Connected to PulseAudio.
INFO:data_websocket:pcmflux audio chunk broadcasting task started.
[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
[Wayland] Decision: No GPU Encoder available -> Using CPU Software Encoding.
[Wayland] Failed to init NVENC: Could not load NVENC library (libnvidia-encode.so.1): Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by /usr/lib/x86_64-linux-gnu/libnvidia-encode.so.1). Falling back to CPU.
Stream settings active -> Res: 1912x948 | 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
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 (1912x948). No action taken.
[pcmflux] First non-silent audio chunk detected! Encoding...
INFO:webrtc_input:Clipboard changed. Sending content (text/plain)
INFO:webrtc_input:Set clipboard content, length: 17
INFO:data_websocket:Received STOP_VIDEO for 'primary'. Stopping stream.
INFO:data_websocket:Stopping all streams for display 'primary'...
[Wayland] Capture loop stopped.
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.
INFO:data_websocket:Received START_VIDEO for 'primary'. Starting its stream.
INFO:data_websocket:Found existing layout for 'primary'. Starting capture with: {'x': 0, 'y': 0, 'w': 1912, 'h': 948}
INFO:data_websocket:Preparing to start capture for display='primary': Res=1912x948, Offset=0x0
INFO:main:Parsed DRI node '/dev/dri/renderD128' to index 0.
INFO:data_websocket:Registered Wayland cursor callback for 'primary'
INFO:data_websocket:Video chunk sender started for display 'primary'.
[Wayland] Encode Node Index: 0 | Driver: ../../../../bus/pci/drivers/nvidia
[Wayland] Nvidia Encoder detected. Initializing NVENC...
[NVENC] Initializing...
INFO:data_websocket:SUCCESS: Capture started for 'primary'.
[Wayland] Failed to init NVENC: Could not load NVENC library (libnvidia-encode.so.1): Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by /usr/lib/x86_64-linux-gnu/libnvidia-encode.so.1). Falling back to CPU.
[Wayland] Decision: No GPU Encoder available -> Using CPU Software Encoding.
Stream settings active -> Res: 1912x948 | 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

Ubunut KDE
[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: 1001
User GID: 1001
───────────────────────────────────────
[ls.io-init] Generating labwc rc.xml from template
/usr/bin/nvidia-smi
**** adding /dev/dri/card1 to video group video with id 44 ****
**** adding /dev/dri/renderD128 to video group clock with id 993 ****
by-path
card1
renderD128
**** NVIDIA GPU detected ****
**** Setting up OpenCL ICD for NVIDIA ****
**** Fixing GBM library linkage ****
cp: '/usr/lib/x86_64-linux-gnu/gbm/nvidia-drm_gbm.so' and '/usr/lib/x86_64-linux-gnu/gbm/nvidia-drm_gbm.so' are the same file
[custom-init] No custom files found, skipping...
[svc-de] Wayland mode: Waiting for socket at /config/.XDG/wayland-1...
[svc-de] /config/.XDG/wayland-1 found launching de
[ls.io-init] done.
dbus[381]: Unknown username "malcontent-webd" in message bus configuration file
dbus[381]: Unknown username "malcontent-timer-ext-agent" in message bus configuration file
dbus[381]: Unknown username "malcontent-timerd" in message bus configuration file
dbus[381]: Unknown username "malcontent-timerd" in message bus configuration file
dbus-daemon[381]: Unknown username "malcontent-webd" in message bus configuration file
dbus-daemon[381]: Unknown username "malcontent-timer-ext-agent" in message bus configuration file
dbus-daemon[381]: Unknown username "malcontent-timerd" in message bus configuration file
dbus-daemon[381]: Unknown username "malcontent-timerd" in message bus configuration file
dbus-daemon[381]: [system] Reloaded configuration
kbuildsycoca6 running...
echo: No such process
sed: couldn't flush stdout: Device or resource busy
echo: No such process
echo: No such process
19
20
WARNING:root:Invalid value(s) '100' for scaling_dpi. Using system default.
WARNING:root:Invalid value(s) '100' for scaling_dpi. Using system default.
INFO:selkies.main:Starting mode 'websockets'...
INFO:selkies.main:Starting Selkies in 'websockets' mode.
WARNING:root:Invalid value(s) '100' for scaling_dpi. Using system default.
WARNING:root:Invalid value(s) '100' for scaling_dpi. Using system default.
INFO:data_websocket:pcmflux library found. Audio capture is available.
INFO:data_websocket:pixelflux library found. Striped encoding modes available.
[Wayland] DRINODE unset. Initializing Software Renderer (Pixman).
[Wayland] Socket listening on: "wayland-1"
INFO:root:Expected C js_config_t size (from ctypes): 1354 bytes
INFO:main:Upload directory ensured: /config/Desktop
INFO:main:Legacy Mode ENABLED (SELKIES_MASTER_TOKEN is not set).
INFO:main:Starting Selkies (WebSocket Mode) with settings: {'_setting_definitions': [{'name': 'audio_enabled', 'type': 'bool', 'default': True, 'help': 'Enable server-to-client audio streaming.'}, {'name': 'microphone_enabled', 'type': 'bool', 'default': True, 'help': 'Enable client-to-server microphone forwarding.'}, {'name': 'gamepad_enabled', 'type': 'bool', 'default': True, 'help': 'Enable gamepad support.'}, {'name': 'clipboard_enabled', 'type': 'bool', 'default': True, 'help': 'Enable clipboard synchronization.'}, {'name': 'clipboard_in_enabled', 'type': 'bool', 'default': True, 'help': 'Enable client-to-server clipboard synchronization.'}, {'name': 'clipboard_out_enabled', 'type': 'bool', 'default': True, 'help': 'Enable server-to-client clipboard synchronization.'}, {'name': 'command_enabled', 'type': 'bool', 'default': True, 'help': 'Enable parsing of command websocket messages.'}, {'name': 'file_transfers', 'type': 'list', 'default': 'upload,download', 'meta': {'allowed': ['upload', 'download']}, 'help': 'Allowed file transfer directions (comma-separated: "upload,download"). Set to "" or "none" to disable.'}, {'name': 'framerate', 'type': 'range', 'default': '8-120', 'meta': {'default_value': 60}, 'help': 'Allowed framerate range (e.g., "8-165") or a fixed value (e.g., "60").'}, {'name': 'h264_crf', 'type': 'range', 'default': '5-50', 'meta': {'default_value': 25}, 'help': 'Allowed H.264 CRF range (e.g., "5-50") or a fixed value.'}, {'name': 'video_bitrate', 'type': 'range', 'default': '1-100', 'meta': {'default_value': 8}, 'help': 'Default video-bitrate aka CBR, in Megabits per second (Mbps), allowed range (e.g., "1-100") or a fixed value (e.g., "8" for 8 Mbps)'}, {'name': 'rate_control_mode', 'type': 'enum', 'default': 'crf', 'meta': {'allowed': ['crf', 'cbr']}, 'help': 'Rate control mode for video encoding (cbr or crf). Only effective when enable_rate_control is true.'}, {'name': 'enable_rate_control', 'type': 'bool', 'default': False, 'help': 'Enable rate control for video encoding. Used in association with rate_control_mode.'}, {'name': 'audio_bitrate', 'type': 'enum', 'default': '320000', 'meta': {'allowed': ['64000', '128000', '192000', '256000', '320000']}, 'help': 'The default audio bitrate.'}, {'name': 'is_manual_resolution_mode', 'type': 'bool', 'default': False, 'help': 'Lock the resolution to the manual width/height values.'}, {'name': 'manual_width', 'type': 'int', 'default': 0, 'help': 'Lock width to a fixed value. Setting this forces manual resolution mode.'}, {'name': 'manual_height', 'type': 'int', 'default': 0, 'help': 'Lock height to a fixed value. Setting this forces manual resolution mode.'}, {'name': 'scaling_dpi', 'type': 'enum', 'default': '96', 'meta': {'allowed': ['96']}, 'help': 'The default DPI for UI scaling.'}, {'name': 'enable_binary_clipboard', 'type': 'bool', 'default': False, 'help': 'Allow binary data (e.g., images) on the clipboard.'}, {'name': 'use_browser_cursors', 'type': 'bool', 'default': False, 'help': 'Use browser CSS cursors instead of rendering to canvas.'}, {'name': 'use_css_scaling', 'type': 'bool', 'default': False, 'help': 'HiDPI when false, if true a lower resolution is sent from the client and the canvas is stretched.'}, {'name': 'ui_title', 'type': 'str', 'default': 'Selkies', 'help': 'Title in top left corner of sidebar.'}, {'name': 'ui_show_logo', 'type': 'bool', 'default': True, 'help': 'Show the Selkies logo in the sidebar.'}, {'name': 'ui_show_core_buttons', 'type': 'bool', 'default': True, 'help': 'Show the core components buttons display, audio, microphone, and gamepad.'}, {'name': 'ui_show_sidebar', 'type': 'bool', 'default': True, 'help': 'Show the main sidebar UI.'}, {'name': 'ui_sidebar_show_video_settings', 'type': 'bool', 'default': True, 'help': 'Show the video settings section in the sidebar.'}, {'name': 'ui_sidebar_show_screen_settings', 'type': 'bool', 'default': True, 'help': 'Show the screen settings section in the sidebar.'}, {'name': 'ui_sidebar_show_audio_settings', 'type': 'bool', 'default': True, 'help': 'Show the audio settings section in the sidebar.'}, {'name': 'ui_sidebar_show_stats', 'type': 'bool', 'default': True, 'help': 'Show the stats section in the sidebar.'}, {'name': 'ui_sidebar_show_clipboard', 'type': 'bool', 'default': True, 'help': 'Show the clipboard section in the sidebar.'}, {'name': 'ui_sidebar_show_files', 'type': 'bool', 'default': True, 'help': 'Show the file transfer section in the sidebar.'}, {'name': 'ui_sidebar_show_apps', 'type': 'bool', 'default': True, 'help': 'Show the applications section in the sidebar.'}, {'name': 'ui_sidebar_show_sharing', 'type': 'bool', 'default': True, 'help': 'Show the sharing section in the sidebar.'}, {'name': 'ui_sidebar_show_gamepads', 'type': 'bool', 'default': True, 'help': 'Show the gamepads section in the sidebar.'}, {'name': 'ui_sidebar_show_fullscreen', 'type': 'bool', 'default': True, 'help': 'Show the fullscreen button in the sidebar.'}, {'name': 'ui_sidebar_show_gaming_mode', 'type': 'bool', 'default': True, 'help': 'Show the gaming mode button in the sidebar.'}, {'name': 'ui_sidebar_show_trackpad', 'type': 'bool', 'default': True, 'help': 'Show the virtual trackpad button in the sidebar.'}, {'name': 'ui_sidebar_show_keyboard_button', 'type': 'bool', 'default': True, 'help': 'Show the on-screen keyboard button in the display area.'}, {'name': 'ui_sidebar_show_soft_buttons', 'type': 'bool', 'default': True, 'help': 'Show the soft buttons section in the sidebar.'}, {'name': 'enable_sharing', 'type': 'bool', 'default': True, 'help': 'Master toggle for all sharing features.'}, {'name': 'enable_collab', 'type': 'bool', 'default': True, 'help': 'Enable collaborative (read-write) sharing link.'}, {'name': 'enable_shared', 'type': 'bool', 'default': True, 'help': 'Enable view-only sharing links.'}, {'name': 'enable_player2', 'type': 'bool', 'default': True, 'help': 'Enable sharing link for gamepad player 2.'}, {'name': 'enable_player3', 'type': 'bool', 'default': True, 'help': 'Enable sharing link for gamepad player 3.'}, {'name': 'enable_player4', 'type': 'bool', 'default': True, 'help': 'Enable sharing link for gamepad player 4.'}, {'name': 'debug', 'type': 'bool', 'default': False, 'help': 'Enable debug logging.'}, {'name': 'mode', 'type': 'str', 'default': 'websockets', 'help': "Specify the mode: 'webrtc' or 'websockets'; defaults to websockets"}, {'name': 'enable_dual_mode', 'type': 'bool', 'default': False, 'help': 'Enable switching Streaming modes from UI'}, {'name': 'audio_device_name', 'type': 'str', 'default': 'output.monitor', 'help': 'Audio device name for pcmflux capture.'}, {'name': 'encoder', 'type': 'enum', 'default': 'x264enc', 'meta': {'allowed': ['x264enc', 'x264enc-striped', 'jpeg']}, 'help': 'The default video encoder.'}, {'name': 'jpeg_quality', 'type': 'range', 'default': '1-100', 'meta': {'default_value': 40}, 'help': 'Allowed JPEG quality range (e.g., "1-100") or a fixed value.'}, {'name': 'h264_fullcolor', 'type': 'bool', 'default': False, 'help': 'Enable H.264 full color range for pixelflux encoders.'}, {'name': 'h264_streaming_mode', 'type': 'bool', 'default': False, 'help': 'Enable H.264 streaming mode for pixelflux encoders.'}, {'name': 'use_cpu', 'type': 'bool', 'default': False, 'help': 'Force CPU-based encoding for pixelflux.'}, {'name': 'use_paint_over_quality', 'type': 'bool', 'default': True, 'help': 'Enable high-quality paint-over for static scenes.'}, {'name': 'paint_over_jpeg_quality', 'type': 'range', 'default': '1-100', 'meta': {'default_value': 90}, 'help': 'Allowed JPEG paint-over quality range or a fixed value.'}, {'name': 'h264_paintover_crf', 'type': 'range', 'default': '5-50', 'meta': {'default_value': 18}, 'help': 'Allowed H.264 paint-over CRF range or a fixed value.'}, {'name': 'h264_paintover_burst_frames', 'type': 'range', 'default': '1-30', 'meta': {'default_value': 5}, 'help': 'Allowed H.264 paint-over burst frames range or a fixed value.'}, {'name': 'second_screen', 'type': 'bool', 'default': True, 'help': 'Enable support for a second monitor/display.'}, {'name': 'port', 'type': 'int', 'default': 8081, 'env_var': 'CUSTOM_WS_PORT', 'help': 'Port for the data websocket server.'}, {'name': 'control_port', 'type': 'int', 'default': 8083, 'help': 'Port for the internal control plane API.'}, {'name': 'master_token', 'type': 'str', 'default': '', 'help': 'Master token to enable secure mode and protect the control plane API.'}, {'name': 'dri_node', 'type': 'str', 'default': '', 'env_var': 'DRI_NODE', 'help': 'Path to the DRI render node for VA-API.'}, {'name': 'watermark_path', 'type': 'str', 'default': '', 'env_var': 'WATERMARK_PNG', 'help': 'Absolute path to the watermark PNG file.'}, {'name': 'watermark_location', 'type': 'int', 'default': -1, 'env_var': 'WATERMARK_LOCATION', 'help': 'Watermark location enum (0-6).'}, {'name': 'wayland_socket_index', 'type': 'int', 'default': 0, 'help': 'Index for the Wayland command socket (e.g. 0 for wayland-0).'}], 'audio_enabled': (True, False), 'microphone_enabled': (True, False), 'gamepad_enabled': (False, False), 'clipboard_enabled': (True, False), 'clipboard_in_enabled': (True, False), 'clipboard_out_enabled': (True, False), 'command_enabled': (True, False), 'file_transfers': ['upload', 'download'], 'framerate': (8, 120), 'h264_crf': (5, 50), 'video_bitrate': (1, 100), 'rate_control_mode': 'crf', 'enable_rate_control': (False, False), 'audio_bitrate': '320000', 'is_manual_resolution_mode': (False, False), 'manual_width': 0, 'manual_height': 0, 'scaling_dpi': '96', 'enable_binary_clipboard': (True, 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': (False, 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), 'enable_sharing': (True, False), 'enable_collab': (True, False), 'enable_shared': (True, False), 'enable_player2': (False, False), 'enable_player3': (False, False), 'enable_player4': (True, False), 'debug': (False, False), 'mode': 'websockets', 'enable_dual_mode': (False, False), 'audio_device_name': 'output.monitor', 'encoder': 'x264enc', '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': (False, False), 'port': 8082, 'control_port': 8083, 'master_token': '', 'dri_node': '/dev/dri/renderD128', 'watermark_path': '', 'watermark_location': -1, 'wayland_socket_index': 0}
INFO:main:Initial Encoder: x264enc, Framerate: 60
INFO:main:SelkiesStreamingApp initialized: encoder=x264enc, display=1024x768
INFO:webrtc_input:kwin_wayland detected: enabling Clipboard-Input fallback for Unicode.
INFO:webrtc_input:Wayland input injection initialized.
INFO:webrtc_input:Built Wayland scancode map with 491 keys.
INFO:main:All main components initialized. Running server...
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:webrtc_input:Clipboard monitor running (binary mode: True)
INFO:webrtc_input:Wayland mode: Cursor monitor disabled (handled by compositor callback).
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
INFO:data_websocket:Data WebSocket Server listening on port 8082
No desktop processes found to terminate.
[svc-de] Wayland mode: Waiting for socket at /config/.XDG/wayland-1...
[svc-de] /config/.XDG/wayland-1 found launching de
kbuildsycoca6 running...
INFO:webrtc_input:Clipboard changed. Sending content (text/plain)
WARNING:data_websocket:Cannot send clipboard: no clients or server not ready.
INFO:data_websocket:Legacy client ('127.0.0.1', 58092) connected. Role: controller, Slot: None
INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 58092)
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:data_websocket:DPI changed from None to 96. Applying system-level change.
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=1912x948. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 1912, 'h': 948}}
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=1912x948, Offset=0x0
INFO:main:Parsed DRI node '/dev/dri/renderD128' to index 0.
INFO:data_websocket:Registered Wayland cursor callback for 'primary'
[Wayland] Configuring Output: 1912x948 @ 60.00 FPS (Scale 1.00)
INFO:data_websocket:SUCCESS: Capture started for 'primary'.
[Wayland] Encode Node Index: 0 | Driver: ../../../../bus/pci/drivers/nvidia
[Wayland] Nvidia Encoder detected. Initializing NVENC...
[NVENC] Initializing...
INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 1912, "height": 948}
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:Video chunk sender started for display 'primary'.
[pcmflux] Attempting to connect to PulseAudio device: output.monitor with latency: 10ms
INFO:data_websocket:pcmflux audio capture started successfully.
INFO:data_websocket:pcmflux audio chunk broadcasting task started.
[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 redundant resize request for primary (1912x948). No action taken.
INFO:data_websocket:Received START_AUDIO command from client for server-to-client audio.
INFO:data_websocket:START_AUDIO: pcmflux audio pipeline already active.
[NVENC] Found 1 CUDA devices:
[NVENC] Device 0: NVIDIA GeForce RTX 4070 Ti
[NVENC] Bound to CUDA device via PCI Bus ID: 0000:05:00.0
[NVENC] Initialized successfully (4:4:4 mode: false).
[Wayland] NVENC Encoder initialized successfully.
[Wayland] Decision: Zero-Copy path active.
Stream settings active -> Res: 1912x948 | FPS: 60.0 | Stripes: 1 | Mode: H264 (NVENC) FullFrame | CRF: 25 | PaintOver CRF: 18 (Burst: 5f) | Colorspace: I420 (Limited Range) | Damage Thresh: 10f | Damage Dur: 20f
[pcmflux] First non-silent audio chunk detected! Encoding...
dbus-daemon[381]: [system] Activating service name='org.freedesktop.login1' requested by ':1.28' (uid=1001 pid=4159 comm="/usr/lib/firefox/firefox" label="firefox (unconfined)") (using servicehelper)
dbus-daemon[381]: [system] Activating service name='org.freedesktop.timedate1' requested by ':1.28' (uid=1001 pid=4159 comm="/usr/lib/firefox/firefox" label="firefox (unconfined)") (using servicehelper)
dbus-daemon[381]: [system] Activated service 'org.freedesktop.login1' failed: Failed to execute program org.freedesktop.login1: Permission denied

Activity

  1. github-actions commented on May 18, 2026

    @github-actions

    Thanks for opening your first issue here! Be sure to follow the relevant issue templates, or risk having this issue marked as invalid.

  2. changed the title [-][BUG] KDE Input method is not working on glibc container[/-] [+][BUG] KDE fcitx5 Input method is not working on glibc container[/+] on May 18, 2026
  3. changed the title [-][BUG] KDE fcitx5 Input method is not working on glibc container[/-] [+][BUG] KDE fcitx5 input method is not working on glibc container[/+] on May 18, 2026
  4. thelamer commented on May 18, 2026

    @thelamer
    Member

    I am not sure where you got that docker run config but none of that is really needed:

    • Fonts are installed in all baseimages you just pass -e LC_ALL=zh_CN.UTF-8 to the container to localize it to chinese:
    2026-05-18.09-47-20.mp4
    • You do not need to pass things like seccomp or apparmor unconfined

    • You do not run the translation layer for the input inside the container, the client web browser supports IME as you can see in the video above, you do not need to customize anything like this. You simply land on the container and on your client machine input chinese input.

    • Please test with this example command and ensure you have set the kernel flags as you are using Nvidia https://github.com/linuxserver/docker-webtop#nvidia-proprietary-drivers (GRUB_CMDLINE_LINUX_DEFAULT="<other existing options> nvidia-drm.modeset=1 nvidia_drm.fbdev=1")

    docker run --rm -it \
      --shm-size=1gb \
      -p 3001:3001 \
      --runtime nvidia \
      --gpus all \
      -e AUTO_GPU=true \
      -e LC_ALL=zh_CN.UTF-8 \
      linuxserver/webtop:ubuntu-kde bash
    

    Work your way up from that command to customize it to your needs.

    Just in general to answer your question what you are trying to do is not supported the whole system is designed to take any input in any language and translate from the client to the server to ensure the latin or non latin chracters get typed properly.

  5. xfl12345 commented on May 19, 2026

    @xfl12345
    Author

    @thelamer

    Thanks for your help. But here are my concerns.

    1. Tip: Fonts are installed in all baseimages you just pass -e LC_ALL=zh_CN.UTF-8 to the container to localize it to chinese
      Reason: I mainly use the Webtop APP for a full desktop coding environment.
      To avoid garbled text, compatibility bugs and search difficulties caused by automatic translation,
      I prefer keeping the system interface in English by default.
    2. Tip: You do not need to pass things like seccomp or apparmor unconfined
      Got it, I'll follow this setting. ❤️
    3. Tip: Please test with this example command and ensure you have set the kernel flags as you are using Nvidia.
      I've already configured the kernel flags correctly and everything works fine. The issue may lie in Webtop's video encoding function instead.
      root@server:~# cat /etc/default/grub.d/98-xfl.cfg 
      GRUB_CMDLINE_LINUX_DEFAULT="nvidia-drm.modeset=1 nvidia_drm.fbdev=1 intel_iommu=on systemd.unified_cgroup_hierarchy=1 cgroup_enable=memory swapaccount=1 binder.devices=binder,hwbinder,vndbinder net.ifnames=0 biosdevname=0 splash=verbose plymouth.ignore-serial-consoles i915.force_probe=* loglevel=6"
      GRUB_DISABLE_OS_PROBER=false
      
      # Added by XFL
      GRUB_DEFAULT=saved
      GRUB_SAVEDEFAULT=true
      GRUB_TIMEOUT_STYLE=menu
      GRUB_TIMEOUT=10
      GRUB_FONT="/usr/share/grub/unicode.pf2"
      GRUB_GFXPAYLOAD=keep
      
      # Preload both GPT and MBR modules so that they are not missed
      GRUB_PRELOAD_MODULES="part_gpt part_msdos"           #提前加载GPT和MBR模块
      
      
      root@server:~# nvidia-smi 
      Tue May 19 10:14:01 2026       
      +-----------------------------------------------------------------------------------------+
      | NVIDIA-SMI 590.48.01              Driver Version: 590.48.01      CUDA Version: 13.1     |
      +-----------------------------------------+------------------------+----------------------+
      | GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
      | Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
      |                                         |                        |               MIG M. |
      |=========================================+========================+======================|
      |   0  NVIDIA GeForce RTX 4070 Ti     Off |   00000000:05:00.0 Off |                  N/A |
      |  0%   43C    P8             12W /  300W |     222MiB /  12282MiB |      0%      Default |
      |                                         |                        |                  N/A |
      +-----------------------------------------+------------------------+----------------------+
      
      +-----------------------------------------------------------------------------------------+
      | Processes:                                                                              |
      |  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
      |        ID   ID                                                               Usage      |
      |=========================================================================================|
      |    0   N/A  N/A          306657      G   /lsiopy/bin/python3                       4MiB |
      |    0   N/A  N/A          306876      G   kwin_wayland                             18MiB |
      |    0   N/A  N/A          307026      G   plasmashell                              77MiB |
      |    0   N/A  N/A          307156      G   /usr/bin/kded6                            3MiB |
      |    0   N/A  N/A          309033      G   /usr/bin/konsole                          3MiB |
      |    0   N/A  N/A          320886      G   /usr/bin/Xwayland                         3MiB |
      |    0   N/A  N/A          326060      G   /usr/bin/konsole                          3MiB |
      |    0   N/A  N/A          327567      G   /usr/bin/systemsettings                  41MiB |
      +-----------------------------------------------------------------------------------------+
      
      Image

    I tried the command you suggested, but I still can't switch input methods.

    Docker run logs
    docker run --rm -it \
      --shm-size=1gb \
      -p 3001:3001 \
      --runtime nvidia \
      --gpus all \
      -e AUTO_GPU=true \
      -e LC_ALL=zh_CN.UTF-8 \
      linuxserver/webtop:ubuntu-kde bash
    [migrations] started
    [migrations] no migrations found
    usermod: no changes
    ───────────────────────────────────────
    
      ██╗     ███████╗██╗ ██████╗
      ██║     ██╔════╝██║██╔═══██╗
      ██║     ███████╗██║██║   ██║
      ██║     ╚════██║██║██║   ██║
      ███████╗███████║██║╚██████╔╝
      ╚══════╝╚══════╝╚═╝ ╚═════╝
    

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

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

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

    User UID: 911
    User GID: 911
    ───────────────────────────────────────
    ..........+...+.+.....+......+.+++++++++++++++++++++++++++++++++++++++.+...+.+......+...+.....+.......+.....+.+..+.+............+..+.+......+........+...+....+.........+.........+........+....+........+.+......+......+...+..+.......+..+....+...........+.........+.......+........+......+++++++++++++++++++++++++++++++++++++++...................+..+...............+......+..........+..+..........+.....+......+.+...........+....+......+..+...............+.+..+....+..............+....++++++
    ...+.+++++++++++++++++++++++++++++++++++++++...+......+....+......+...+..+...+......+...................+..+....+......+.....+...+.+........+.......+......+.........+.....+......+...+.+.....+......+...+......+++++++++++++++++++++++++++++++++++++++.......+..++++++

    [ls.io-init] Creating initial backup of menu.xml
    [ls.io-init] Generating labwc rc.xml from template
    /usr/bin/nvidia-smi
    **** adding /dev/dri/renderD128 to video group clock with id 993 ****
    **** adding /dev/dri/card1 to video group video with id 44 ****
    by-path card1 renderD128
    **** NVIDIA GPU detected ****
    **** Setting up OpenCL ICD for NVIDIA ****
    **** Fixing GBM library linkage ****
    cp: '/usr/lib/x86_64-linux-gnu/gbm/nvidia-drm_gbm.so' and '/usr/lib/x86_64-linux-gnu/gbm/nvidia-drm_gbm.so' are the same file
    [custom-init] No custom files found, skipping...
    [svc-de] Wayland mode: Waiting for socket at /config/.XDG/wayland-1...
    [ls.io-init] done.
    root@ef4c9ee70a38:/# 19
    20
    INFO:selkies.main:Starting mode 'websockets'...
    INFO:selkies.main:Starting Selkies in 'websockets' mode.
    INFO:data_websocket:pcmflux library found. Audio capture is available.

    [PixelFlux] Rust Wayland Backend Initialized Globally.
    INFO:data_websocket:pixelflux library found. Striped encoding modes available.
    [Wayland] AUTO_GPU enabled. Selected: /dev/dri/renderD128
    [Wayland] Initializing GL Renderer using device: /dev/dri/renderD128
    INFO:root:Expected C js_config_t size (from ctypes): 1354 bytes
    INFO:main:Upload directory ensured: /config/Desktop
    INFO:main:Legacy Mode ENABLED (SELKIES_MASTER_TOKEN is not set).
    INFO:main:Starting Selkies (WebSocket Mode) with settings: {'_setting_definitions': [{'name': 'audio_enabled', 'type': 'bool', 'default': True, 'help': 'Enable server-to-client audio streaming.'}, {'name': 'microphone_enabled', 'type': 'bool', 'default': True, 'help': 'Enable client-to-server microphone forwarding.'}, {'name': 'gamepad_enabled', 'type': 'bool', 'default': True, 'help': 'Enable gamepad support.'}, {'name': 'clipboard_enabled', 'type': 'bool', 'default': True, 'help': 'Enable clipboard synchronization.'}, {'name': 'clipboard_in_enabled', 'type': 'bool', 'default': True, 'help': 'Enable client-to-server clipboard synchronization.'}, {'name': 'clipboard_out_enabled', 'type': 'bool', 'default': True, 'help': 'Enable server-to-client clipboard synchronization.'}, {'name': 'command_enabled', 'type': 'bool', 'default': True, 'help': 'Enable parsing of command websocket messages.'}, {'name': 'file_transfers', 'type': 'list', 'default': 'upload,download', 'meta': {'allowed': ['upload', 'download']}, 'help': 'Allowed file transfer directions (comma-separated: "upload,download"). Set to "" or "none" to disable.'}, {'name': 'framerate', 'type': 'range', 'default': '8-120', 'meta': {'default_value': 60}, 'help': 'Allowed framerate range (e.g., "8-165") or a fixed value (e.g., "60").'}, {'name': 'h264_crf', 'type': 'range', 'default': '5-50', 'meta': {'default_value': 25}, 'help': 'Allowed H.264 CRF range (e.g., "5-50") or a fixed value.'}, {'name': 'video_bitrate', 'type': 'range', 'default': '1-100', 'meta': {'default_value': 8}, 'help': 'Default video-bitrate aka CBR, in Megabits per second (Mbps), allowed range (e.g., "1-100") or a fixed value (e.g., "8" for 8 Mbps)'}, {'name': 'rate_control_mode', 'type': 'enum', 'default': 'crf', 'meta': {'allowed': ['crf', 'cbr']}, 'help': 'Rate control mode for video encoding (cbr or crf). Only effective when enable_rate_control is true.'}, {'name': 'enable_rate_control', 'type': 'bool', 'default': False, 'help': 'Enable rate control for video encoding. Used in association with rate_control_mode.'}, {'name': 'audio_bitrate', 'type': 'enum', 'default': '320000', 'meta': {'allowed': ['64000', '128000', '192000', '256000', '320000']}, 'help': 'The default audio bitrate.'}, {'name': 'is_manual_resolution_mode', 'type': 'bool', 'default': False, 'help': 'Lock the resolution to the manual width/height values.'}, {'name': 'manual_width', 'type': 'int', 'default': 0, 'help': 'Lock width to a fixed value. Setting this forces manual resolution mode.'}, {'name': 'manual_height', 'type': 'int', 'default': 0, 'help': 'Lock height to a fixed value. Setting this forces manual resolution mode.'}, {'name': 'scaling_dpi', 'type': 'enum', 'default': '96', 'meta': {'allowed': ['96', '120', '144', '168', '192', '216', '240', '264', '288']}, 'help': 'The default DPI for UI scaling.'}, {'name': 'enable_binary_clipboard', 'type': 'bool', 'default': False, 'help': 'Allow binary data (e.g., images) on the clipboard.'}, {'name': 'use_browser_cursors', 'type': 'bool', 'default': False, 'help': 'Use browser CSS cursors instead of rendering to canvas.'}, {'name': 'use_css_scaling', 'type': 'bool', 'default': False, 'help': 'HiDPI when false, if true a lower resolution is sent from the client and the canvas is stretched.'}, {'name': 'ui_title', 'type': 'str', 'default': 'Selkies', 'help': 'Title in top left corner of sidebar.'}, {'name': 'ui_show_logo', 'type': 'bool', 'default': True, 'help': 'Show the Selkies logo in the sidebar.'}, {'name': 'ui_show_core_buttons', 'type': 'bool', 'default': True, 'help': 'Show the core components buttons display, audio, microphone, and gamepad.'}, {'name': 'ui_show_sidebar', 'type': 'bool', 'default': True, 'help': 'Show the main sidebar UI.'}, {'name': 'ui_sidebar_show_video_settings', 'type': 'bool', 'default': True, 'help': 'Show the video settings section in the sidebar.'}, {'name': 'ui_sidebar_show_screen_settings', 'type': 'bool', 'default': True, 'help': 'Show the screen settings section in the sidebar.'}, {'name': 'ui_sidebar_show_audio_settings', 'type': 'bool', 'default': True, 'help': 'Show the audio settings section in the sidebar.'}, {'name': 'ui_sidebar_show_stats', 'type': 'bool', 'default': True, 'help': 'Show the stats section in the sidebar.'}, {'name': 'ui_sidebar_show_clipboard', 'type': 'bool', 'default': True, 'help': 'Show the clipboard section in the sidebar.'}, {'name': 'ui_sidebar_show_files', 'type': 'bool', 'default': True, 'help': 'Show the file transfer section in the sidebar.'}, {'name': 'ui_sidebar_show_apps', 'type': 'bool', 'default': True, 'help': 'Show the applications section in the sidebar.'}, {'name': 'ui_sidebar_show_sharing', 'type': 'bool', 'default': True, 'help': 'Show the sharing section in the sidebar.'}, {'name': 'ui_sidebar_show_gamepads', 'type': 'bool', 'default': True, 'help': 'Show the gamepads section in the sidebar.'}, {'name': 'ui_sidebar_show_fullscreen', 'type': 'bool', 'default': True, 'help': 'Show the fullscreen button in the sidebar.'}, {'name': 'ui_sidebar_show_gaming_mode', 'type': 'bool', 'default': True, 'help': 'Show the gaming mode button in the sidebar.'}, {'name': 'ui_sidebar_show_trackpad', 'type': 'bool', 'default': True, 'help': 'Show the virtual trackpad button in the sidebar.'}, {'name': 'ui_sidebar_show_keyboard_button', 'type': 'bool', 'default': True, 'help': 'Show the on-screen keyboard button in the display area.'}, {'name': 'ui_sidebar_show_soft_buttons', 'type': 'bool', 'default': True, 'help': 'Show the soft buttons section in the sidebar.'}, {'name': 'enable_sharing', 'type': 'bool', 'default': True, 'help': 'Master toggle for all sharing features.'}, {'name': 'enable_collab', 'type': 'bool', 'default': True, 'help': 'Enable collaborative (read-write) sharing link.'}, {'name': 'enable_shared', 'type': 'bool', 'default': True, 'help': 'Enable view-only sharing links.'}, {'name': 'enable_player2', 'type': 'bool', 'default': True, 'help': 'Enable sharing link for gamepad player 2.'}, {'name': 'enable_player3', 'type': 'bool', 'default': True, 'help': 'Enable sharing link for gamepad player 3.'}, {'name': 'enable_player4', 'type': 'bool', 'default': True, 'help': 'Enable sharing link for gamepad player 4.'}, {'name': 'debug', 'type': 'bool', 'default': False, 'help': 'Enable debug logging.'}, {'name': 'mode', 'type': 'str', 'default': 'websockets', 'help': "Specify the mode: 'webrtc' or 'websockets'; defaults to websockets"}, {'name': 'enable_dual_mode', 'type': 'bool', 'default': False, 'help': 'Enable switching Streaming modes from UI'}, {'name': 'audio_device_name', 'type': 'str', 'default': 'output.monitor', 'help': 'Audio device name for pcmflux capture.'}, {'name': 'encoder', 'type': 'enum', 'default': 'x264enc', 'meta': {'allowed': ['x264enc', 'x264enc-striped', 'jpeg']}, 'help': 'The default video encoder.'}, {'name': 'jpeg_quality', 'type': 'range', 'default': '1-100', 'meta': {'default_value': 40}, 'help': 'Allowed JPEG quality range (e.g., "1-100") or a fixed value.'}, {'name': 'h264_fullcolor', 'type': 'bool', 'default': False, 'help': 'Enable H.264 full color range for pixelflux encoders.'}, {'name': 'h264_streaming_mode', 'type': 'bool', 'default': False, 'help': 'Enable H.264 streaming mode for pixelflux encoders.'}, {'name': 'use_cpu', 'type': 'bool', 'default': False, 'help': 'Force CPU-based encoding for pixelflux.'}, {'name': 'use_paint_over_quality', 'type': 'bool', 'default': True, 'help': 'Enable high-quality paint-over for static scenes.'}, {'name': 'paint_over_jpeg_quality', 'type': 'range', 'default': '1-100', 'meta': {'default_value': 90}, 'help': 'Allowed JPEG paint-over quality range or a fixed value.'}, {'name': 'h264_paintover_crf', 'type': 'range', 'default': '5-50', 'meta': {'default_value': 18}, 'help': 'Allowed H.264 paint-over CRF range or a fixed value.'}, {'name': 'h264_paintover_burst_frames', 'type': 'range', 'default': '1-30', 'meta': {'default_value': 5}, 'help': 'Allowed H.264 paint-over burst frames range or a fixed value.'}, {'name': 'second_screen', 'type': 'bool', 'default': True, 'help': 'Enable support for a second monitor/display.'}, {'name': 'port', 'type': 'int', 'default': 8081, 'env_var': 'CUSTOM_WS_PORT', 'help': 'Port for the data websocket server.'}, {'name': 'control_port', 'type': 'int', 'default': 8083, 'help': 'Port for the internal control plane API.'}, {'name': 'master_token', 'type': 'str', 'default': '', 'help': 'Master token to enable secure mode and protect the control plane API.'}, {'name': 'dri_node', 'type': 'str', 'default': '', 'env_var': 'DRI_NODE', 'help': 'Path to the DRI render node for VA-API.'}, {'name': 'watermark_path', 'type': 'str', 'default': '', 'env_var': 'WATERMARK_PNG', 'help': 'Absolute path to the watermark PNG file.'}, {'name': 'watermark_location', 'type': 'int', 'default': -1, 'env_var': 'WATERMARK_LOCATION', 'help': 'Watermark location enum (0-6).'}, {'name': 'wayland_socket_index', 'type': 'int', 'default': 0, 'help': 'Index for the Wayland command socket (e.g. 0 for wayland-0).'}], 'audio_enabled': (True, False), 'microphone_enabled': (True, False), 'gamepad_enabled': (False, False), 'clipboard_enabled': (True, False), 'clipboard_in_enabled': (True, False), 'clipboard_out_enabled': (True, False), 'command_enabled': (True, False), 'file_transfers': ['upload', 'download'], 'framerate': (8, 120), 'h264_crf': (5, 50), 'video_bitrate': (1, 100), 'rate_control_mode': 'crf', 'enable_rate_control': (False, 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': (False, 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), 'enable_sharing': (True, False), 'enable_collab': (True, False), 'enable_shared': (True, False), 'enable_player2': (False, False), 'enable_player3': (False, False), 'enable_player4': (True, False), 'debug': (False, False), 'mode': 'websockets', 'enable_dual_mode': (False, False), 'audio_device_name': 'output.monitor', 'encoder': 'x264enc', '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': (False, False), 'port': 8082, 'control_port': 8083, 'master_token': '', 'dri_node': '/dev/dri/renderD128', 'watermark_path': '', 'watermark_location': -1, 'wayland_socket_index': 0}
    INFO:main:Initial Encoder: x264enc, Framerate: 60
    INFO:main:SelkiesStreamingApp initialized: encoder=x264enc, display=1024x768
    INFO:webrtc_input:kwin_wayland detected: enabling Clipboard-Input fallback for Unicode.
    INFO:webrtc_input:Wayland input injection initialized.
    INFO:webrtc_input:Built Wayland scancode map with 491 keys.
    INFO:main:All main components initialized. Running server...
    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:webrtc_input:Clipboard monitor running (binary mode: False)
    INFO:webrtc_input:Wayland mode: Cursor monitor disabled (handled by compositor callback).
    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
    INFO:data_websocket:Data WebSocket Server listening on port 8082
    [Wayland] Socket listening on: "wayland-1"
    [svc-de] /config/.XDG/wayland-1 found launching de
    Applying KWin clipboard rule...
    dbus-daemon[384]: [system] Reloaded configuration
    kbuildsycoca6 running...
    INFO:data_websocket:Legacy client ('127.0.0.1', 56826) connected. Role: controller, Slot: None
    INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 56826)
    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:data_websocket:DPI changed from None to 96. Applying system-level change.
    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=1912x948. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 1912, 'h': 948}}
    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=1912x948, Offset=0x0
    INFO:main:Parsed DRI node '/dev/dri/renderD128' to index 0.
    INFO:data_websocket:Registered Wayland cursor callback for 'primary'
    [Wayland] Configuring Output: 1912x948 @ 60.00 FPS (Scale 1.00)
    INFO:data_websocket:SUCCESS: Capture started for 'primary'.
    INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 1912, "height": 948}
    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:Video chunk sender started for display 'primary'.
    [pcmflux] Attempting to connect to PulseAudio device: output.monitor with latency: 10ms
    [Wayland] Encode Node Index: 0 | Driver: ../../../../bus/pci/drivers/nvidia
    [Wayland] Nvidia Encoder detected. Initializing NVENC...
    [NVENC] Initializing...
    INFO:data_websocket:pcmflux audio capture started successfully.
    INFO:data_websocket:pcmflux audio chunk broadcasting task started.
    [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:Client is taking over existing display 'primary'. Updating state for new connection.
    INFO:data_websocket:Applying and sanitizing client settings for 'primary' (initial=False)
    INFO:data_websocket:Received redundant resize request for primary (1912x948). No action taken.
    INFO:data_websocket:Received START_AUDIO command from client for server-to-client audio.
    INFO:data_websocket:START_AUDIO: pcmflux audio pipeline already active.
    [NVENC] Found 1 CUDA devices:
    [NVENC] Device 0: NVIDIA GeForce RTX 4070 Ti
    [NVENC] Bound to CUDA device via PCI Bus ID: 0000:05:00.0
    [NVENC] Initialized successfully (4:4:4 mode: false).
    [Wayland] NVENC Encoder initialized successfully.
    [Wayland] Decision: Zero-Copy path active.
    Stream settings active -> Res: 1912x948 | FPS: 60.0 | Stripes: 1 | Mode: H264 (NVENC) FullFrame | CRF: 25 | PaintOver CRF: 18 (Burst: 5f) | Colorspace: I420 (Limited Range) | Damage Thresh: 10f | Damage Dur: 20f
    [pcmflux] First non-silent audio chunk detected! Encoding...
    dbus-daemon[384]: [system] Activating service name='org.freedesktop.login1' requested by ':1.30' (uid=0 pid=1353 comm="su -" label="docker-default (enforce)") (using servicehelper)
    dbus-daemon[384]: [system] Activated service 'org.freedesktop.login1' failed: Failed to execute program org.freedesktop.login1: Permission denied
    INFO:data_websocket:Received STOP_VIDEO for 'primary'. Stopping stream.
    INFO:data_websocket:Stopping all streams for display 'primary'...
    [Wayland] Capture loop stopped.
    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.
    INFO:data_websocket:Received START_VIDEO for 'primary'. Starting its stream.
    INFO:data_websocket:Found existing layout for 'primary'. Starting capture with: {'x': 0, 'y': 0, 'w': 1912, 'h': 948}
    INFO:data_websocket:Preparing to start capture for display='primary': Res=1912x948, Offset=0x0
    INFO:main:Parsed DRI node '/dev/dri/renderD128' to index 0.
    INFO:data_websocket:Registered Wayland cursor callback for 'primary'
    [Wayland] Encode Node Index: 0 | Driver: ../../../../bus/pci/drivers/nvidia
    [Wayland] Nvidia Encoder detected. Initializing NVENC...
    [NVENC] Initializing...
    INFO:data_websocket:Video chunk sender started for display 'primary'.
    INFO:data_websocket:SUCCESS: Capture started for 'primary'.
    [NVENC] Found 1 CUDA devices:
    [NVENC] Device 0: NVIDIA GeForce RTX 4070 Ti
    [NVENC] Bound to CUDA device via PCI Bus ID: 0000:05:00.0
    [NVENC] Initialized successfully (4:4:4 mode: false).
    [Wayland] NVENC Encoder initialized successfully.
    [Wayland] Decision: Zero-Copy path active.
    Stream settings active -> Res: 1912x948 | FPS: 60.0 | Stripes: 1 | Mode: H264 (NVENC) FullFrame | CRF: 25 | PaintOver CRF: 18 (Burst: 5f) | Colorspace: I420 (Limited Range) | Damage Thresh: 10f | Damage Dur: 20f
    INFO:webrtc_input:Set clipboard content, length: 184
    INFO:webrtc_input:Set clipboard content, length: 184
    INFO:webrtc_input:Set clipboard content, length: 184
    INFO:webrtc_input:Clipboard changed. Sending content (text/plain)
    dbus-daemon[384]: [system] Activating service name='org.freedesktop.PackageKit' requested by ':1.31' (uid=0 pid=1591 comm="/usr/bin/gdbus call --system --dest org.freedeskto" label="docker-default (enforce)") (using servicehelper)
    dbus-daemon[384]: [system] Activated service 'org.freedesktop.PackageKit' failed: Failed to execute program org.freedesktop.PackageKit: Permission denied
    dbus-daemon[384]: [system] Activating service name='org.freedesktop.PackageKit' requested by ':1.31' (uid=0 pid=1591 comm="/usr/bin/gdbus call --system --dest org.freedeskto" label="docker-default (enforce)") (using servicehelper)
    dbus-daemon[384]: [system] Activated service 'org.freedesktop.PackageKit' failed: Failed to execute program org.freedesktop.PackageKit: Permission denied
    dbus-daemon[384]: [system] Activating service name='org.freedesktop.login1' requested by ':1.32' (uid=0 pid=1710 comm="apt install -y ubuntu-standard wget curl" label="docker-default (enforce)") (using servicehelper)
    dbus-daemon[384]: [system] Activated service 'org.freedesktop.login1' failed: Failed to execute program org.freedesktop.login1: Permission denied
    INFO:data_websocket:Received STOP_VIDEO for 'primary'. Stopping stream.
    INFO:data_websocket:Stopping all streams for display 'primary'...
    [Wayland] Capture loop stopped.
    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.
    dbus-daemon[384]: [system] Activating service name='org.freedesktop.PackageKit' requested by ':1.33' (uid=0 pid=3737 comm="/usr/bin/gdbus call --system --dest org.freedeskto" label="docker-default (enforce)") (using servicehelper)
    dbus-daemon[384]: [system] Activated service 'org.freedesktop.PackageKit' failed: Failed to execute program org.freedesktop.PackageKit: Permission denied
    dbus-daemon[384]: [system] Activating service name='org.freedesktop.PackageKit' requested by ':1.33' (uid=0 pid=3737 comm="/usr/bin/gdbus call --system --dest org.freedeskto" label="docker-default (enforce)") (using servicehelper)
    dbus-daemon[384]: [system] Activated service 'org.freedesktop.PackageKit' failed: Failed to execute program org.freedesktop.PackageKit: Permission denied
    INFO:data_websocket:Received START_VIDEO for 'primary'. Starting its stream.
    INFO:data_websocket:Found existing layout for 'primary'. Starting capture with: {'x': 0, 'y': 0, 'w': 1912, 'h': 948}
    INFO:data_websocket:Preparing to start capture for display='primary': Res=1912x948, Offset=0x0
    INFO:main:Parsed DRI node '/dev/dri/renderD128' to index 0.
    INFO:data_websocket:Registered Wayland cursor callback for 'primary'
    INFO:data_websocket:Video chunk sender started for display 'primary'.
    [Wayland] Encode Node Index: 0 | Driver: ../../../../bus/pci/drivers/nvidia
    [Wayland] Nvidia Encoder detected. Initializing NVENC...
    [NVENC] Initializing...
    INFO:data_websocket:SUCCESS: Capture started for 'primary'.
    [NVENC] Found 1 CUDA devices:
    [NVENC] Device 0: NVIDIA GeForce RTX 4070 Ti
    [NVENC] Bound to CUDA device via PCI Bus ID: 0000:05:00.0
    INFO:webrtc_input:Set clipboard content, length: 61
    INFO:webrtc_input:Clipboard changed. Sending content (text/plain)
    [NVENC] Initialized successfully (4:4:4 mode: false).
    [Wayland] NVENC Encoder initialized successfully.
    [Wayland] Decision: Zero-Copy path active.
    Stream settings active -> Res: 1912x948 | FPS: 60.0 | Stripes: 1 | Mode: H264 (NVENC) FullFrame | CRF: 25 | PaintOver CRF: 18 (Burst: 5f) | Colorspace: I420 (Limited Range) | Damage Thresh: 10f | Damage Dur: 20f
    INFO:data_websocket:Received STOP_VIDEO for 'primary'. Stopping stream.
    INFO:data_websocket:Stopping all streams for display 'primary'...
    [Wayland] Capture loop stopped.
    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.
    INFO:data_websocket:Received START_VIDEO for 'primary'. Starting its stream.
    INFO:data_websocket:Found existing layout for 'primary'. Starting capture with: {'x': 0, 'y': 0, 'w': 1912, 'h': 948}
    INFO:data_websocket:Preparing to start capture for display='primary': Res=1912x948, Offset=0x0
    INFO:main:Parsed DRI node '/dev/dri/renderD128' to index 0.
    INFO:data_websocket:Registered Wayland cursor callback for 'primary'
    INFO:data_websocket:Video chunk sender started for display 'primary'.
    [Wayland] Encode Node Index: 0 | Driver: ../../../../bus/pci/drivers/nvidia
    [Wayland] Nvidia Encoder detected. Initializing NVENC...
    [NVENC] Initializing...
    INFO:data_websocket:SUCCESS: Capture started for 'primary'.
    [NVENC] Found 1 CUDA devices:
    [NVENC] Device 0: NVIDIA GeForce RTX 4070 Ti
    [NVENC] Bound to CUDA device via PCI Bus ID: 0000:05:00.0
    INFO:webrtc_input:Set clipboard content, length: 82
    INFO:webrtc_input:Clipboard changed. Sending content (text/plain)
    [NVENC] Initialized successfully (4:4:4 mode: false).
    [Wayland] NVENC Encoder initialized successfully.
    [Wayland] Decision: Zero-Copy path active.
    Stream settings active -> Res: 1912x948 | FPS: 60.0 | Stripes: 1 | Mode: H264 (NVENC) FullFrame | CRF: 25 | PaintOver CRF: 18 (Burst: 5f) | Colorspace: I420 (Limited Range) | Damage Thresh: 10f | Damage Dur: 20f
    dbus-daemon[384]: [system] Activating service name='org.freedesktop.login1' requested by ':1.34' (uid=0 pid=3789 comm="apt install -y fcitx5 fcitx5-chinese-addons kde-co" label="docker-default (enforce)") (using servicehelper)
    dbus-daemon[384]: [system] Activated service 'org.freedesktop.login1' failed: Failed to execute program org.freedesktop.login1: Permission denied
    dbus-daemon[384]: [system] Activating service name='org.freedesktop.PackageKit' requested by ':1.35' (uid=0 pid=4901 comm="/usr/bin/gdbus call --system --dest org.freedeskto" label="docker-default (enforce)") (using servicehelper)
    dbus-daemon[384]: [system] Activated service 'org.freedesktop.PackageKit' failed: Failed to execute program org.freedesktop.PackageKit: Permission denied
    dbus-daemon[384]: [system] Activating service name='org.freedesktop.PackageKit' requested by ':1.35' (uid=0 pid=4901 comm="/usr/bin/gdbus call --system --dest org.freedeskto" label="docker-default (enforce)") (using servicehelper)
    dbus-daemon[384]: [system] Activated service 'org.freedesktop.PackageKit' failed: Failed to execute program org.freedesktop.PackageKit: Permission denied
    dbus-daemon[384]: [system] Activating service name='org.freedesktop.login1' requested by ':1.36' (uid=0 pid=4935 comm="apt install -y fonts-noto-mono fonts-noto-extra fo" label="docker-default (enforce)") (using servicehelper)
    dbus-daemon[384]: [system] Activated service 'org.freedesktop.login1' failed: Failed to execute program org.freedesktop.login1: Permission denied
    dbus-daemon[384]: [system] Activating service name='org.freedesktop.PackageKit' requested by ':1.37' (uid=0 pid=5185 comm="/usr/bin/gdbus call --system --dest org.freedeskto" label="docker-default (enforce)") (using servicehelper)
    dbus-daemon[384]: [system] Activated service 'org.freedesktop.PackageKit' failed: Failed to execute program org.freedesktop.PackageKit: Permission denied
    dbus-daemon[384]: [system] Activating service name='org.freedesktop.PackageKit' requested by ':1.37' (uid=0 pid=5185 comm="/usr/bin/gdbus call --system --dest org.freedeskto" label="docker-default (enforce)") (using servicehelper)
    dbus-daemon[384]: [system] Activated service 'org.freedesktop.PackageKit' failed: Failed to execute program org.freedesktop.PackageKit: Permission denied
    dbus-daemon[384]: [system] Activating service name='org.freedesktop.PolicyKit1' requested by ':1.41' (uid=911 pid=5287 comm="/usr/bin/systemsettings" label="docker-default (enforce)") (using servicehelper)
    dbus-daemon[384]: [system] Activated service 'org.freedesktop.PolicyKit1' failed: Failed to execute program org.freedesktop.PolicyKit1: Permission denied
    dbus-daemon[384]: [system] Activating service name='org.freedesktop.PolicyKit1' requested by ':1.49' (uid=911 pid=6267 comm="/usr/bin/systemsettings" label="docker-default (enforce)") (using servicehelper)
    dbus-daemon[384]: [system] Activated service 'org.freedesktop.PolicyKit1' failed: Failed to execute program org.freedesktop.PolicyKit1: Permission denied
    INFO:data_websocket:Received STOP_VIDEO for 'primary'. Stopping stream.
    INFO:data_websocket:Stopping all streams for display 'primary'...
    [Wayland] Capture loop stopped.
    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.
    INFO:data_websocket:Received START_VIDEO for 'primary'. Starting its stream.
    INFO:data_websocket:Found existing layout for 'primary'. Starting capture with: {'x': 0, 'y': 0, 'w': 1912, 'h': 948}
    INFO:data_websocket:Preparing to start capture for display='primary': Res=1912x948, Offset=0x0
    INFO:main:Parsed DRI node '/dev/dri/renderD128' to index 0.
    INFO:data_websocket:Registered Wayland cursor callback for 'primary'
    INFO:data_websocket:Video chunk sender started for display 'primary'.
    [Wayland] Encode Node Index: 0 | Driver: ../../../../bus/pci/drivers/nvidia
    [Wayland] Nvidia Encoder detected. Initializing NVENC...
    [NVENC] Initializing...
    INFO:data_websocket:SUCCESS: Capture started for 'primary'.
    [NVENC] Found 1 CUDA devices:
    [NVENC] Device 0: NVIDIA GeForce RTX 4070 Ti
    [NVENC] Bound to CUDA device via PCI Bus ID: 0000:05:00.0
    INFO:webrtc_input:Set clipboard content, length: 82
    [NVENC] Initialized successfully (4:4:4 mode: false).
    [Wayland] NVENC Encoder initialized successfully.
    [Wayland] Decision: Zero-Copy path active.
    Stream settings active -> Res: 1912x948 | FPS: 60.0 | Stripes: 1 | Mode: H264 (NVENC) FullFrame | CRF: 25 | PaintOver CRF: 18 (Burst: 5f) | Colorspace: I420 (Limited Range) | Damage Thresh: 10f | Damage Dur: 20f
    INFO:data_websocket:Received STOP_VIDEO for 'primary'. Stopping stream.
    INFO:data_websocket:Stopping all streams for display 'primary'...
    [Wayland] Capture loop stopped.
    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.
    INFO:data_websocket:Received START_VIDEO for 'primary'. Starting its stream.
    INFO:data_websocket:Found existing layout for 'primary'. Starting capture with: {'x': 0, 'y': 0, 'w': 1912, 'h': 948}
    INFO:data_websocket:Preparing to start capture for display='primary': Res=1912x948, Offset=0x0
    INFO:main:Parsed DRI node '/dev/dri/renderD128' to index 0.
    INFO:data_websocket:Registered Wayland cursor callback for 'primary'
    INFO:data_websocket:Video chunk sender started for display 'primary'.
    [Wayland] Encode Node Index: 0 | Driver: ../../../../bus/pci/drivers/nvidia
    [Wayland] Nvidia Encoder detected. Initializing NVENC...
    [NVENC] Initializing...
    INFO:data_websocket:SUCCESS: Capture started for 'primary'.
    [NVENC] Found 1 CUDA devices:
    [NVENC] Device 0: NVIDIA GeForce RTX 4070 Ti
    [NVENC] Bound to CUDA device via PCI Bus ID: 0000:05:00.0
    INFO:webrtc_input:Set clipboard content, length: 4016
    [NVENC] Initialized successfully (4:4:4 mode: false).
    [Wayland] NVENC Encoder initialized successfully.
    [Wayland] Decision: Zero-Copy path active.
    Stream settings active -> Res: 1912x948 | FPS: 60.0 | Stripes: 1 | Mode: H264 (NVENC) FullFrame | CRF: 25 | PaintOver CRF: 18 (Burst: 5f) | Colorspace: I420 (Limited Range) | Damage Thresh: 10f | Damage Dur: 20f
    INFO:webrtc_input:Clipboard changed. Sending content (text/plain)
    INFO:data_websocket:Received STOP_VIDEO for 'primary'. Stopping stream.
    INFO:data_websocket:Stopping all streams for display 'primary'...
    [Wayland] Capture loop stopped.
    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.
    INFO:data_websocket:Received START_VIDEO for 'primary'. Starting its stream.
    INFO:data_websocket:Found existing layout for 'primary'. Starting capture with: {'x': 0, 'y': 0, 'w': 1912, 'h': 948}
    INFO:data_websocket:Preparing to start capture for display='primary': Res=1912x948, Offset=0x0
    INFO:main:Parsed DRI node '/dev/dri/renderD128' to index 0.
    INFO:data_websocket:Registered Wayland cursor callback for 'primary'
    INFO:data_websocket:Video chunk sender started for display 'primary'.
    [Wayland] Encode Node Index: 0 | Driver: ../../../../bus/pci/drivers/nvidia
    [Wayland] Nvidia Encoder detected. Initializing NVENC...
    [NVENC] Initializing...
    INFO:data_websocket:SUCCESS: Capture started for 'primary'.
    [NVENC] Found 1 CUDA devices:
    [NVENC] Device 0: NVIDIA GeForce RTX 4070 Ti
    [NVENC] Bound to CUDA device via PCI Bus ID: 0000:05:00.0
    [NVENC] Initialized successfully (4:4:4 mode: false).
    [Wayland] NVENC Encoder initialized successfully.
    [Wayland] Decision: Zero-Copy path active.
    Stream settings active -> Res: 1912x948 | FPS: 60.0 | Stripes: 1 | Mode: H264 (NVENC) FullFrame | CRF: 25 | PaintOver CRF: 18 (Burst: 5f) | Colorspace: I420 (Limited Range) | Damage Thresh: 10f | Damage Dur: 20f
    INFO:data_websocket:Received STOP_VIDEO for 'primary'. Stopping stream.
    INFO:data_websocket:Stopping all streams for display 'primary'...
    [Wayland] Capture loop stopped.
    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.

  6. thelamer commented on May 19, 2026

    @thelamer
    Member

    You can run the image in English mode if you want just simply leave out that env var.

    docker run --rm -it \
      --shm-size=1gb \
      -p 3001:3001 \
      --runtime nvidia \
      --gpus all \
      -e AUTO_GPU=true \
      linuxserver/webtop:ubuntu-kde bash
    

    Then on the client machine change from English or Chinese Pinyin on the fly. You don't need to set anything server side, the client handles everything and the server will type anything you send it. This goes for any language, no special settings are needed for the container.

  7. xfl12345 commented on May 19, 2026

    @xfl12345
    Author

    You can run the image in English mode if you want just simply leave out that env var.

    docker run --rm -it \
      --shm-size=1gb \
      -p 3001:3001 \
      --runtime nvidia \
      --gpus all \
      -e AUTO_GPU=true \
      linuxserver/webtop:ubuntu-kde bash
    

    Then on the client machine change from English or Chinese Pinyin on the fly. You don't need to set anything server side, the client handles everything and the server will type anything you send it. This goes for any language, no special settings are needed for the container.

    Yes! It works with the Microsoft input method, but not with the Sogou one.
    Can we configure the native input method inside the container to work the same way as the Alpine one?

    Image Image
  8. thelamer commented on May 19, 2026

    @thelamer
    Member

    I can only capture composition events in the browser client side https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent if soguo does not do this no, there is nothing I can do. Any customization inside the container to create an input bridge where English characters are translated on the server will not be officially supported by me as I do not use these input methods or have any transparency into their actual functionality.
    This is the best I can do, these are full Linux desktop environments running inside docker containers not to mention different distributions handle things differently as you are seeing. The testing matrix is too wide and environment is too restrictive to give you some kind of silver bullet answer.

  9. xfl12345 commented on May 19, 2026

    @xfl12345
    Author

    I have tried using the following method to force the program to use X11 rendering mode, and fcitx can switch input methods normally.
    Additionally, Alpine KDE can make fcitx work properly in Wayland mode.
    Therefore, I suspect a minor bug in glibc-based KDE environments causes input method switching failures in Wayland mode.

    QT_IM_MODULE=fcitx5 konsole
    GTK_IM_MODULE=fcitx5 firefox
    codium --ozone-platform=x11
  10. LinuxServer-CI commented on Jun 18, 2026

    @LinuxServer-CI
    Contributor

    This issue has been automatically marked as stale because it has not had recent activity. This might be due to missing feedback from OP. It will be closed if no further activity occurs. Thank you for your contributions.

  11. LinuxServer-CI commented on Jul 31, 2026

    @LinuxServer-CI
    Contributor

    This issue has been automatically marked as stale because it has not had recent activity. This might be due to missing feedback from OP. It will be closed if no further activity occurs. Thank you for your contributions.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions