It is expected that these buttons work and I can quickly flip between plates using the viewport.
This issue doesn't require anything special, just click new project. You can use your existing settings or completely blow away the appdata files and start fresh. The issue is there no matter what.
[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: 99
User GID: 100
───────────────────────────────────────
Linuxserver.io version: v2.3.1-ls115
Build-date: 2025-12-23T12:27:21+00:00
───────────────────────────────────────
[ls.io-init] Creating initial backup of system rc.xml
[custom-init] No custom files found, skipping...
[ls.io-init] done.
xsettingsd: Loaded 5 settings from /config/.xsettingsd
xsettingsd: Unable to open connection to X server
_XSERVTransmkdir: ERROR: euid != 0,directory /tmp/.X11-unix will not be created.
screen 0 shmid 0
The XKEYBOARD keymap compiler (xkbcomp) reports:
> Warning: Could not resolve keysym XF86CameraAccessEnable
> Warning: Could not resolve keysym XF86CameraAccessDisable
> Warning: Could not resolve keysym XF86CameraAccessToggle
> Warning: Could not resolve keysym XF86NextElement
> Warning: Could not resolve keysym XF86PreviousElement
> Warning: Could not resolve keysym XF86AutopilotEngageToggle
> Warning: Could not resolve keysym XF86MarkWaypoint
> Warning: Could not resolve keysym XF86Sos
> Warning: Could not resolve keysym XF86NavChart
> Warning: Could not resolve keysym XF86FishingChart
> Warning: Could not resolve keysym XF86SingleRangeRadar
> Warning: Could not resolve keysym XF86DualRangeRadar
> Warning: Could not resolve keysym XF86RadarOverlay
> Warning: Could not resolve keysym XF86TraditionalSonar
> Warning: Could not resolve keysym XF86ClearvuSonar
> Warning: Could not resolve keysym XF86SidevuSonar
> Warning: Could not resolve keysym XF86NavInfo
Errors from xkbcomp are not fatal to the X server
19
20
INFO:data_websocket:pcmflux library found. Audio capture is available.
INFO:data_websocket:pixelflux library found. Striped encoding modes available.
INFO:root:Expected C js_config_t size (from ctypes): 1354 bytes
INFO:main:Upload directory ensured: /config/Desktop
INFO:main:Legacy Mode ENABLED (SELKIES_MASTER_TOKEN is not set).
INFO:main:Starting Selkies (WebSocket Mode) with settings: {'audio_enabled': (True, False), 'microphone_enabled': (True, False), 'gamepad_enabled': (False, False), 'clipboard_enabled': (True, False), 'command_enabled': (True, False), 'file_transfers': ['upload', 'download'], 'encoder': 'x264enc', 'framerate': (8, 120), 'h264_crf': (5, 50), 'jpeg_quality': (1, 100), 'h264_fullcolor': (False, False), 'h264_streaming_mode': (False, False), 'use_cpu': (False, False), 'use_paint_over_quality': (True, False), 'paint_over_jpeg_quality': (1, 100), 'h264_paintover_crf': (5, 50), 'h264_paintover_burst_frames': (1, 30), 'second_screen': (True, False), 'audio_bitrate': '320000', 'is_manual_resolution_mode': (False, False), 'manual_width': 0, 'manual_height': 0, 'scaling_dpi': '96', 'enable_binary_clipboard': (False, False), 'use_browser_cursors': (False, False), 'use_css_scaling': (False, False), 'ui_title': 'Selkies', 'ui_show_logo': (True, False), 'ui_show_core_buttons': (True, False), 'ui_show_sidebar': (True, False), 'ui_sidebar_show_video_settings': (True, False), 'ui_sidebar_show_screen_settings': (True, False), 'ui_sidebar_show_audio_settings': (True, False), 'ui_sidebar_show_stats': (True, False), 'ui_sidebar_show_clipboard': (True, False), 'ui_sidebar_show_files': (True, False), 'ui_sidebar_show_apps': (True, False), 'ui_sidebar_show_sharing': (True, False), 'ui_sidebar_show_gamepads': (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), 'port': 8082, 'control_port': 8083, 'master_token': '', 'dri_node': '', 'audio_device_name': 'output.monitor', 'watermark_path': '', 'watermark_location': -1, 'debug': (False, False), 'enable_sharing': (True, False), 'enable_collab': (True, False), 'enable_shared': (True, False), 'enable_player2': (False, False), 'enable_player3': (False, False), 'enable_player4': (True, False)}
INFO:main:Initial Encoder: x264enc, Framerate: 60
INFO:main:SelkiesStreamingApp initialized: encoder=x264enc, display=1024x768
INFO:main:All main components initialized. Running server...
INFO:webrtc_input:System DPI detected as ~96. Cursor size cap set to 32x32px.
INFO:webrtc_input:Resetting keyboard modifiers.
INFO:webrtc_input:Clipboard monitor running (binary mode: False)
INFO:webrtc_input:Found XFIXES version 4.0
INFO:webrtc_input:starting cursor monitor
INFO:webrtc_input:watching for cursor changes
WARNING:data_websocket:Cannot broadcast cursor data: no clients connected or server not ready.
INFO:data_websocket:Data WebSocket Server listening on port 8082
xsettingsd: Loaded 5 settings from /config/.xsettingsd
xsettingsd: Created window 0x1200001 on screen 0 with timestamp 94259174
xsettingsd: Selection _XSETTINGS_S0 is owned by 0x0
xsettingsd: Took ownership of selection _XSETTINGS_S0
INFO:data_websocket:Legacy client ('127.0.0.1', 43628) connected. Role: controller, Slot: None
INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 43628)
INFO:data_websocket:Sending last known cursor to new client ('127.0.0.1', 43628)
INFO:data_websocket:Attempting to establish PulseAudio connection...
INFO:data_websocket:PulseAudio connection established.
INFO:webrtc_input:Initializing 4 persistent gamepad instances...
INFO:root:Packed js_config payload for 'Microsoft X-Box 360 pad' (js0): len=1360 bytes. Name='Microsoft X-Box 360 pad', Vendor=0x045e, Product=0x028e, Version=0x0100, Reported Buttons=11 (Array capacity: 512), Reported Axes=8 (Array capacity: 64)
INFO:selkies_gamepad:Gamepad configured. JS socket: /tmp/selkies_js0.sock, EVDEV socket: /tmp/selkies_event1000.sock. Using fixed config: Microsoft X-Box 360 pad
INFO:webrtc_input:Initialized and started persistent gamepad instance for index 0 (Name: 'Microsoft X-Box 360 pad', JS: /tmp/selkies_js0.sock, EVDEV: /tmp/selkies_event1000.sock).
INFO:root:Packed js_config payload for 'Microsoft X-Box 360 pad' (js1): len=1360 bytes. Name='Microsoft X-Box 360 pad', Vendor=0x045e, Product=0x028e, Version=0x0100, Reported Buttons=11 (Array capacity: 512), Reported Axes=8 (Array capacity: 64)
INFO:selkies_gamepad:Gamepad configured. JS socket: /tmp/selkies_js1.sock, EVDEV socket: /tmp/selkies_event1001.sock. Using fixed config: Microsoft X-Box 360 pad
INFO:webrtc_input:Initialized and started persistent gamepad instance for index 1 (Name: 'Microsoft X-Box 360 pad', JS: /tmp/selkies_js1.sock, EVDEV: /tmp/selkies_event1001.sock).
INFO:root:Packed js_config payload for 'Microsoft X-Box 360 pad' (js2): len=1360 bytes. Name='Microsoft X-Box 360 pad', Vendor=0x045e, Product=0x028e, Version=0x0100, Reported Buttons=11 (Array capacity: 512), Reported Axes=8 (Array capacity: 64)
INFO:selkies_gamepad:Gamepad configured. JS socket: /tmp/selkies_js2.sock, EVDEV socket: /tmp/selkies_event1002.sock. Using fixed config: Microsoft X-Box 360 pad
INFO:webrtc_input:Initialized and started persistent gamepad instance for index 2 (Name: 'Microsoft X-Box 360 pad', JS: /tmp/selkies_js2.sock, EVDEV: /tmp/selkies_event1002.sock).
INFO:root:Packed js_config payload for 'Microsoft X-Box 360 pad' (js3): len=1360 bytes. Name='Microsoft X-Box 360 pad', Vendor=0x045e, Product=0x028e, Version=0x0100, Reported Buttons=11 (Array capacity: 512), Reported Axes=8 (Array capacity: 64)
INFO:selkies_gamepad:Gamepad configured. JS socket: /tmp/selkies_js3.sock, EVDEV socket: /tmp/selkies_event1003.sock. Using fixed config: Microsoft X-Box 360 pad
INFO:webrtc_input:Initialized and started persistent gamepad instance for index 3 (Name: 'Microsoft X-Box 360 pad', JS: /tmp/selkies_js3.sock, EVDEV: /tmp/selkies_event1003.sock).
INFO:selkies_gamepad:Gamepad /tmp/selkies_js0.sock: Event processor started.
INFO:selkies_gamepad:JS interposer server listening on /tmp/selkies_js0.sock
INFO:selkies_gamepad:Gamepad /tmp/selkies_js1.sock: Event processor started.
INFO:selkies_gamepad:JS interposer server listening on /tmp/selkies_js1.sock
INFO:selkies_gamepad:Gamepad /tmp/selkies_js2.sock: Event processor started.
INFO:selkies_gamepad:JS interposer server listening on /tmp/selkies_js2.sock
INFO:selkies_gamepad:Gamepad /tmp/selkies_js3.sock: Event processor started.
INFO:selkies_gamepad:JS interposer server listening on /tmp/selkies_js3.sock
INFO:selkies_gamepad:EVDEV interposer server listening on /tmp/selkies_event1000.sock
INFO:selkies_gamepad:EVDEV interposer server listening on /tmp/selkies_event1001.sock
INFO:selkies_gamepad:EVDEV interposer server listening on /tmp/selkies_event1002.sock
INFO:selkies_gamepad:EVDEV interposer server listening on /tmp/selkies_event1003.sock
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:gst_app_resize:Openbox detected. Applying xrdb for DPI 96.
INFO:gst_app_resize:Wrote 'Xft.dpi: 96' to /config/.Xresources.
INFO:gst_app_resize:Successfully loaded /config/.Xresources using xrdb.
INFO:gst_app_resize:Wrote font and DPI settings to /config/.xsettingsd.
INFO:gst_app_resize:Found xsettingsd process with PID: 481.
xsettingsd: Reloading configuration
xsettingsd: Loaded 5 settings from /config/.xsettingsd
INFO:gst_app_resize:Sent SIGHUP to xsettingsd process 481 to reload config.
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=3440x1288. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 3440, 'h': 1288}}
INFO:data_websocket:Mode 3440x1288 not found. Creating it.
INFO:data_websocket:Defining logical monitors for the window manager...
INFO:data_websocket:Starting separate capture instances for each ACTIVE display region...
INFO:data_websocket:Client 'primary' is active. Starting its capture.
INFO:data_websocket:Preparing to start capture for display='primary': Res=3440x1288, Offset=0x0
INFO:data_websocket:Video chunk sender started for display 'primary'.
INFO:data_websocket:SUCCESS: Capture started for 'primary'.
INFO:data_websocket:New frame backpressure task started for display 'primary'.
INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 3440, "height": 1288}
INFO:data_websocket:Broadcasting display config update: DISPLAY_CONFIG_UPDATE,{"type": "display_config_update", "displays": ["primary"]}
INFO:data_websocket:Display reconfiguration finished successfully.
INFO:data_websocket:Reconfiguration process complete (state unlocked).
INFO:data_websocket:Initial client settings message processed by ws_handler.
INFO:data_websocket:Initial setup: Primary client connected, audio not active, attempting start.
INFO:data_websocket:Starting pcmflux audio pipeline...
INFO:data_websocket:pcmflux settings: device='output.monitor', bitrate=320000, channels=2
INFO:data_websocket:Frame-based backpressure logic task started for display 'primary'.
INFO:data_websocket:Client settings received, proceeding with backpressure loop for 'primary'.
[pcmflux] Attempting to connect to PulseAudio device: output.monitor...
INFO:data_websocket:pcmflux audio capture started successfully.
INFO:data_websocket:pcmflux audio chunk broadcasting task started.
[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
X Shared Memory Extension available.
XShm setup complete for 3440x1288.
CPU cores available: 16
Stream settings active -> Res: 3440x1288 | 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 (3440x1288). No action taken.
[pcmflux] First non-silent audio chunk detected! Encoding...
INFO:webrtc_input:Set clipboard content, length: 10
INFO:data_websocket:Cleaning up Data WS handler for ('127.0.0.1', 43628) (Display ID: primary)...
INFO:data_websocket:Client for 'primary' disconnected. Removing and triggering full display reconfiguration.
INFO:data_websocket:Starting display reconfiguration...
INFO:data_websocket:Stopping all existing capture and backpressure tasks...
Capture loop stopped. X resources released.
INFO:data_websocket:All capture instances, senders, and backpressure tasks stopped.
WARNING:data_websocket:No display clients connected. Video pipelines remain stopped.
INFO:data_websocket:Video chunk sender for 'primary' cancelled.
INFO:data_websocket:Video chunk sender for 'primary' finished.
INFO:data_websocket:Reconfiguration process complete (state unlocked).
INFO:data_websocket:Last client (('127.0.0.1', 43628)) disconnected. All pipelines should have been stopped by reconfigure_displays.
INFO:main:Initiating unified pipeline shutdown...
WARNING:data_websocket:Reconfiguration already in progress. Ignoring concurrent request.
INFO:data_websocket:Stopping pcmflux audio pipeline...
INFO:data_websocket:pcmflux audio chunk broadcasting task cancelled.
INFO:data_websocket:pcmflux audio chunk broadcasting task finished.
INFO:data_websocket:Legacy client ('127.0.0.1', 38614) connected. Role: controller, Slot: None
INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 38614)
INFO:data_websocket:Sending last known cursor to new client ('127.0.0.1', 38614)
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)
[pcmflux] Stop requested. Cleaning up capture loop...
[pcmflux] Audio capture loop finished. Resources released.
INFO:data_websocket:pcmflux audio pipeline stopped.
INFO:main:Unified pipeline shutdown complete.
INFO:data_websocket:Data WS handler for ('127.0.0.1', 43628) finished all cleanup.
INFO:data_websocket:DPI changed from None to 96. Applying system-level change.
INFO:gst_app_resize:Openbox detected. Applying xrdb for DPI 96.
INFO:gst_app_resize:Wrote 'Xft.dpi: 96' to /config/.Xresources.
INFO:gst_app_resize:Successfully loaded /config/.Xresources using xrdb.
INFO:gst_app_resize:Wrote font and DPI settings to /config/.xsettingsd.
INFO:gst_app_resize:Found xsettingsd process with PID: 481.
xsettingsd: Reloading configuration
INFO:gst_app_resize:Sent SIGHUP to xsettingsd process 481 to reload config.
xsettingsd: Loaded 5 settings from /config/.xsettingsd
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=3440x1288. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 3440, 'h': 1288}}
INFO:data_websocket:Defining logical monitors for the window manager...
INFO:data_websocket:Starting separate capture instances for each ACTIVE display region...
INFO:data_websocket:Client 'primary' is active. Starting its capture.
INFO:data_websocket:Preparing to start capture for display='primary': Res=3440x1288, Offset=0x0
INFO:data_websocket:Video chunk sender started for display 'primary'.
INFO:data_websocket:SUCCESS: Capture started for 'primary'.
INFO:data_websocket:New frame backpressure task started for display 'primary'.
INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 3440, "height": 1288}
INFO:data_websocket:Broadcasting display config update: DISPLAY_CONFIG_UPDATE,{"type": "display_config_update", "displays": ["primary"]}
INFO:data_websocket:Display reconfiguration finished successfully.
INFO:data_websocket:Reconfiguration process complete (state unlocked).
INFO:data_websocket:Initial client settings message processed by ws_handler.
INFO:data_websocket:Initial setup: Primary client connected, audio not active, attempting start.
INFO:data_websocket:Starting pcmflux audio pipeline...
INFO:data_websocket:pcmflux settings: device='output.monitor', bitrate=320000, channels=2
INFO:data_websocket:Frame-based backpressure logic task started for display 'primary'.
INFO:data_websocket:Client settings received, proceeding with backpressure loop for 'primary'.
[pcmflux] Attempting to connect to PulseAudio device: output.monitor...
INFO:data_websocket:pcmflux audio capture started successfully.
INFO:data_websocket:pcmflux audio chunk broadcasting task started.
X Shared Memory Extension available.
XShm setup complete for 3440x1288.
CPU cores available: 16
Stream settings active -> Res: 3440x1288 | FPS: 60.0 | Stripes: 1 | Mode: H264 (CPU) FullFrame | CRF: 25 | PaintOver CRF: 18 (Burst: 5f) | Colorspace: I420 (Limited Range) | Damage Thresh: 10f | Damage Dur: 20f
[pcmflux] SUCCESS: Connected to PulseAudio.
[pcmflux] SUCCESS: Opus encoder created.
[pcmflux] Capture loop started. Device: output.monitor, Rate: 48000, Channels: 2, Bitrate: 320 kbps, VBR: On, Silence Gate: Off, Debug Logging: Off, PCM Chunk: 3840 bytes
INFO:data_websocket:Received START_AUDIO command from client for server-to-client audio.
INFO:data_websocket:START_AUDIO: pcmflux audio pipeline already active.
INFO:data_websocket:Received redundant resize request for primary (3440x1288). No action taken.
[pcmflux] First non-silent audio chunk detected! Encoding...
INFO:data_websocket:Stats sender: WS connection closed.
INFO:data_websocket:Received STOP_VIDEO for 'primary'. Stopping stream.
INFO:data_websocket:Stopping all streams for display 'primary'...
INFO:data_websocket:Backpressure logic task for 'primary' cancelled.
INFO:data_websocket:Backpressure logic task for 'primary' finished.
INFO:data_websocket:Backpressure task for 'primary' was stopped. Resetting its frame IDs.
INFO:data_websocket:Resetting frame IDs for display 'primary'.
INFO:data_websocket:Broadcasting primary pipeline reset to all 1 clients: PIPELINE_RESETTING primary
Capture loop stopped. X resources released.
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.
Is there an existing issue for this?
Current Behavior
Starting with v2.3.1-ls115 I am no longer able to click any of the buttons that live on the side of the plate. Technically they click but don't do anything. This issue impacts the rename button at the top of the plate and all the buttons on the right side of the plate in the viewport. Also when adding new plates I am unable to switch between plates in the viewport by clicking on them.
Expected Behavior
It is expected that these buttons work and I can quickly flip between plates using the viewport.
Steps To Reproduce
This issue doesn't require anything special, just click new project. You can use your existing settings or completely blow away the appdata files and start fresh. The issue is there no matter what.
If I rollback to v2.3.1-ls114 these buttons start working once again.
Environment
CPU architecture
x86-64
Docker creation
Container logs
[migrations] started [migrations] no migrations found ─────────────────────────────────────── ██╗ ███████╗██╗ ██████╗ ██║ ██╔════╝██║██╔═══██╗ ██║ ███████╗██║██║ ██║ ██║ ╚════██║██║██║ ██║ ███████╗███████║██║╚██████╔╝ ╚══════╝╚══════╝╚═╝ ╚═════╝ Brought to you by linuxserver.io ─────────────────────────────────────── To support LSIO projects visit: https://www.linuxserver.io/donate/ ─────────────────────────────────────── GID/UID ─────────────────────────────────────── User UID: 99 User GID: 100 ─────────────────────────────────────── Linuxserver.io version: v2.3.1-ls115 Build-date: 2025-12-23T12:27:21+00:00 ─────────────────────────────────────── [ls.io-init] Creating initial backup of system rc.xml [custom-init] No custom files found, skipping... [ls.io-init] done. xsettingsd: Loaded 5 settings from /config/.xsettingsd xsettingsd: Unable to open connection to X server _XSERVTransmkdir: ERROR: euid != 0,directory /tmp/.X11-unix will not be created. screen 0 shmid 0 The XKEYBOARD keymap compiler (xkbcomp) reports: > Warning: Could not resolve keysym XF86CameraAccessEnable > Warning: Could not resolve keysym XF86CameraAccessDisable > Warning: Could not resolve keysym XF86CameraAccessToggle > Warning: Could not resolve keysym XF86NextElement > Warning: Could not resolve keysym XF86PreviousElement > Warning: Could not resolve keysym XF86AutopilotEngageToggle > Warning: Could not resolve keysym XF86MarkWaypoint > Warning: Could not resolve keysym XF86Sos > Warning: Could not resolve keysym XF86NavChart > Warning: Could not resolve keysym XF86FishingChart > Warning: Could not resolve keysym XF86SingleRangeRadar > Warning: Could not resolve keysym XF86DualRangeRadar > Warning: Could not resolve keysym XF86RadarOverlay > Warning: Could not resolve keysym XF86TraditionalSonar > Warning: Could not resolve keysym XF86ClearvuSonar > Warning: Could not resolve keysym XF86SidevuSonar > Warning: Could not resolve keysym XF86NavInfo Errors from xkbcomp are not fatal to the X server 19 20 INFO:data_websocket:pcmflux library found. Audio capture is available. INFO:data_websocket:pixelflux library found. Striped encoding modes available. INFO:root:Expected C js_config_t size (from ctypes): 1354 bytes INFO:main:Upload directory ensured: /config/Desktop INFO:main:Legacy Mode ENABLED (SELKIES_MASTER_TOKEN is not set). INFO:main:Starting Selkies (WebSocket Mode) with settings: {'audio_enabled': (True, False), 'microphone_enabled': (True, False), 'gamepad_enabled': (False, False), 'clipboard_enabled': (True, False), 'command_enabled': (True, False), 'file_transfers': ['upload', 'download'], 'encoder': 'x264enc', 'framerate': (8, 120), 'h264_crf': (5, 50), 'jpeg_quality': (1, 100), 'h264_fullcolor': (False, False), 'h264_streaming_mode': (False, False), 'use_cpu': (False, False), 'use_paint_over_quality': (True, False), 'paint_over_jpeg_quality': (1, 100), 'h264_paintover_crf': (5, 50), 'h264_paintover_burst_frames': (1, 30), 'second_screen': (True, False), 'audio_bitrate': '320000', 'is_manual_resolution_mode': (False, False), 'manual_width': 0, 'manual_height': 0, 'scaling_dpi': '96', 'enable_binary_clipboard': (False, False), 'use_browser_cursors': (False, False), 'use_css_scaling': (False, False), 'ui_title': 'Selkies', 'ui_show_logo': (True, False), 'ui_show_core_buttons': (True, False), 'ui_show_sidebar': (True, False), 'ui_sidebar_show_video_settings': (True, False), 'ui_sidebar_show_screen_settings': (True, False), 'ui_sidebar_show_audio_settings': (True, False), 'ui_sidebar_show_stats': (True, False), 'ui_sidebar_show_clipboard': (True, False), 'ui_sidebar_show_files': (True, False), 'ui_sidebar_show_apps': (True, False), 'ui_sidebar_show_sharing': (True, False), 'ui_sidebar_show_gamepads': (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), 'port': 8082, 'control_port': 8083, 'master_token': '', 'dri_node': '', 'audio_device_name': 'output.monitor', 'watermark_path': '', 'watermark_location': -1, 'debug': (False, False), 'enable_sharing': (True, False), 'enable_collab': (True, False), 'enable_shared': (True, False), 'enable_player2': (False, False), 'enable_player3': (False, False), 'enable_player4': (True, False)} INFO:main:Initial Encoder: x264enc, Framerate: 60 INFO:main:SelkiesStreamingApp initialized: encoder=x264enc, display=1024x768 INFO:main:All main components initialized. Running server... INFO:webrtc_input:System DPI detected as ~96. Cursor size cap set to 32x32px. INFO:webrtc_input:Resetting keyboard modifiers. INFO:webrtc_input:Clipboard monitor running (binary mode: False) INFO:webrtc_input:Found XFIXES version 4.0 INFO:webrtc_input:starting cursor monitor INFO:webrtc_input:watching for cursor changes WARNING:data_websocket:Cannot broadcast cursor data: no clients connected or server not ready. INFO:data_websocket:Data WebSocket Server listening on port 8082 xsettingsd: Loaded 5 settings from /config/.xsettingsd xsettingsd: Created window 0x1200001 on screen 0 with timestamp 94259174 xsettingsd: Selection _XSETTINGS_S0 is owned by 0x0 xsettingsd: Took ownership of selection _XSETTINGS_S0 INFO:data_websocket:Legacy client ('127.0.0.1', 43628) connected. Role: controller, Slot: None INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 43628) INFO:data_websocket:Sending last known cursor to new client ('127.0.0.1', 43628) INFO:data_websocket:Attempting to establish PulseAudio connection... INFO:data_websocket:PulseAudio connection established. INFO:webrtc_input:Initializing 4 persistent gamepad instances... INFO:root:Packed js_config payload for 'Microsoft X-Box 360 pad' (js0): len=1360 bytes. Name='Microsoft X-Box 360 pad', Vendor=0x045e, Product=0x028e, Version=0x0100, Reported Buttons=11 (Array capacity: 512), Reported Axes=8 (Array capacity: 64) INFO:selkies_gamepad:Gamepad configured. JS socket: /tmp/selkies_js0.sock, EVDEV socket: /tmp/selkies_event1000.sock. Using fixed config: Microsoft X-Box 360 pad INFO:webrtc_input:Initialized and started persistent gamepad instance for index 0 (Name: 'Microsoft X-Box 360 pad', JS: /tmp/selkies_js0.sock, EVDEV: /tmp/selkies_event1000.sock). INFO:root:Packed js_config payload for 'Microsoft X-Box 360 pad' (js1): len=1360 bytes. Name='Microsoft X-Box 360 pad', Vendor=0x045e, Product=0x028e, Version=0x0100, Reported Buttons=11 (Array capacity: 512), Reported Axes=8 (Array capacity: 64) INFO:selkies_gamepad:Gamepad configured. JS socket: /tmp/selkies_js1.sock, EVDEV socket: /tmp/selkies_event1001.sock. Using fixed config: Microsoft X-Box 360 pad INFO:webrtc_input:Initialized and started persistent gamepad instance for index 1 (Name: 'Microsoft X-Box 360 pad', JS: /tmp/selkies_js1.sock, EVDEV: /tmp/selkies_event1001.sock). INFO:root:Packed js_config payload for 'Microsoft X-Box 360 pad' (js2): len=1360 bytes. Name='Microsoft X-Box 360 pad', Vendor=0x045e, Product=0x028e, Version=0x0100, Reported Buttons=11 (Array capacity: 512), Reported Axes=8 (Array capacity: 64) INFO:selkies_gamepad:Gamepad configured. JS socket: /tmp/selkies_js2.sock, EVDEV socket: /tmp/selkies_event1002.sock. Using fixed config: Microsoft X-Box 360 pad INFO:webrtc_input:Initialized and started persistent gamepad instance for index 2 (Name: 'Microsoft X-Box 360 pad', JS: /tmp/selkies_js2.sock, EVDEV: /tmp/selkies_event1002.sock). INFO:root:Packed js_config payload for 'Microsoft X-Box 360 pad' (js3): len=1360 bytes. Name='Microsoft X-Box 360 pad', Vendor=0x045e, Product=0x028e, Version=0x0100, Reported Buttons=11 (Array capacity: 512), Reported Axes=8 (Array capacity: 64) INFO:selkies_gamepad:Gamepad configured. JS socket: /tmp/selkies_js3.sock, EVDEV socket: /tmp/selkies_event1003.sock. Using fixed config: Microsoft X-Box 360 pad INFO:webrtc_input:Initialized and started persistent gamepad instance for index 3 (Name: 'Microsoft X-Box 360 pad', JS: /tmp/selkies_js3.sock, EVDEV: /tmp/selkies_event1003.sock). INFO:selkies_gamepad:Gamepad /tmp/selkies_js0.sock: Event processor started. INFO:selkies_gamepad:JS interposer server listening on /tmp/selkies_js0.sock INFO:selkies_gamepad:Gamepad /tmp/selkies_js1.sock: Event processor started. INFO:selkies_gamepad:JS interposer server listening on /tmp/selkies_js1.sock INFO:selkies_gamepad:Gamepad /tmp/selkies_js2.sock: Event processor started. INFO:selkies_gamepad:JS interposer server listening on /tmp/selkies_js2.sock INFO:selkies_gamepad:Gamepad /tmp/selkies_js3.sock: Event processor started. INFO:selkies_gamepad:JS interposer server listening on /tmp/selkies_js3.sock INFO:selkies_gamepad:EVDEV interposer server listening on /tmp/selkies_event1000.sock INFO:selkies_gamepad:EVDEV interposer server listening on /tmp/selkies_event1001.sock INFO:selkies_gamepad:EVDEV interposer server listening on /tmp/selkies_event1002.sock INFO:selkies_gamepad:EVDEV interposer server listening on /tmp/selkies_event1003.sock 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:gst_app_resize:Openbox detected. Applying xrdb for DPI 96. INFO:gst_app_resize:Wrote 'Xft.dpi: 96' to /config/.Xresources. INFO:gst_app_resize:Successfully loaded /config/.Xresources using xrdb. INFO:gst_app_resize:Wrote font and DPI settings to /config/.xsettingsd. INFO:gst_app_resize:Found xsettingsd process with PID: 481. xsettingsd: Reloading configuration xsettingsd: Loaded 5 settings from /config/.xsettingsd INFO:gst_app_resize:Sent SIGHUP to xsettingsd process 481 to reload config. 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=3440x1288. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 3440, 'h': 1288}} INFO:data_websocket:Mode 3440x1288 not found. Creating it. INFO:data_websocket:Defining logical monitors for the window manager... INFO:data_websocket:Starting separate capture instances for each ACTIVE display region... INFO:data_websocket:Client 'primary' is active. Starting its capture. INFO:data_websocket:Preparing to start capture for display='primary': Res=3440x1288, Offset=0x0 INFO:data_websocket:Video chunk sender started for display 'primary'. INFO:data_websocket:SUCCESS: Capture started for 'primary'. INFO:data_websocket:New frame backpressure task started for display 'primary'. INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 3440, "height": 1288} INFO:data_websocket:Broadcasting display config update: DISPLAY_CONFIG_UPDATE,{"type": "display_config_update", "displays": ["primary"]} INFO:data_websocket:Display reconfiguration finished successfully. INFO:data_websocket:Reconfiguration process complete (state unlocked). INFO:data_websocket:Initial client settings message processed by ws_handler. INFO:data_websocket:Initial setup: Primary client connected, audio not active, attempting start. INFO:data_websocket:Starting pcmflux audio pipeline... INFO:data_websocket:pcmflux settings: device='output.monitor', bitrate=320000, channels=2 INFO:data_websocket:Frame-based backpressure logic task started for display 'primary'. INFO:data_websocket:Client settings received, proceeding with backpressure loop for 'primary'. [pcmflux] Attempting to connect to PulseAudio device: output.monitor... INFO:data_websocket:pcmflux audio capture started successfully. INFO:data_websocket:pcmflux audio chunk broadcasting task started. [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 X Shared Memory Extension available. XShm setup complete for 3440x1288. CPU cores available: 16 Stream settings active -> Res: 3440x1288 | 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 (3440x1288). No action taken. [pcmflux] First non-silent audio chunk detected! Encoding... INFO:webrtc_input:Set clipboard content, length: 10 INFO:data_websocket:Cleaning up Data WS handler for ('127.0.0.1', 43628) (Display ID: primary)... INFO:data_websocket:Client for 'primary' disconnected. Removing and triggering full display reconfiguration. INFO:data_websocket:Starting display reconfiguration... INFO:data_websocket:Stopping all existing capture and backpressure tasks... Capture loop stopped. X resources released. INFO:data_websocket:All capture instances, senders, and backpressure tasks stopped. WARNING:data_websocket:No display clients connected. Video pipelines remain stopped. INFO:data_websocket:Video chunk sender for 'primary' cancelled. INFO:data_websocket:Video chunk sender for 'primary' finished. INFO:data_websocket:Reconfiguration process complete (state unlocked). INFO:data_websocket:Last client (('127.0.0.1', 43628)) disconnected. All pipelines should have been stopped by reconfigure_displays. INFO:main:Initiating unified pipeline shutdown... WARNING:data_websocket:Reconfiguration already in progress. Ignoring concurrent request. INFO:data_websocket:Stopping pcmflux audio pipeline... INFO:data_websocket:pcmflux audio chunk broadcasting task cancelled. INFO:data_websocket:pcmflux audio chunk broadcasting task finished. INFO:data_websocket:Legacy client ('127.0.0.1', 38614) connected. Role: controller, Slot: None INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 38614) INFO:data_websocket:Sending last known cursor to new client ('127.0.0.1', 38614) 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) [pcmflux] Stop requested. Cleaning up capture loop... [pcmflux] Audio capture loop finished. Resources released. INFO:data_websocket:pcmflux audio pipeline stopped. INFO:main:Unified pipeline shutdown complete. INFO:data_websocket:Data WS handler for ('127.0.0.1', 43628) finished all cleanup. INFO:data_websocket:DPI changed from None to 96. Applying system-level change. INFO:gst_app_resize:Openbox detected. Applying xrdb for DPI 96. INFO:gst_app_resize:Wrote 'Xft.dpi: 96' to /config/.Xresources. INFO:gst_app_resize:Successfully loaded /config/.Xresources using xrdb. INFO:gst_app_resize:Wrote font and DPI settings to /config/.xsettingsd. INFO:gst_app_resize:Found xsettingsd process with PID: 481. xsettingsd: Reloading configuration INFO:gst_app_resize:Sent SIGHUP to xsettingsd process 481 to reload config. xsettingsd: Loaded 5 settings from /config/.xsettingsd 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=3440x1288. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 3440, 'h': 1288}} INFO:data_websocket:Defining logical monitors for the window manager... INFO:data_websocket:Starting separate capture instances for each ACTIVE display region... INFO:data_websocket:Client 'primary' is active. Starting its capture. INFO:data_websocket:Preparing to start capture for display='primary': Res=3440x1288, Offset=0x0 INFO:data_websocket:Video chunk sender started for display 'primary'. INFO:data_websocket:SUCCESS: Capture started for 'primary'. INFO:data_websocket:New frame backpressure task started for display 'primary'. INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 3440, "height": 1288} INFO:data_websocket:Broadcasting display config update: DISPLAY_CONFIG_UPDATE,{"type": "display_config_update", "displays": ["primary"]} INFO:data_websocket:Display reconfiguration finished successfully. INFO:data_websocket:Reconfiguration process complete (state unlocked). INFO:data_websocket:Initial client settings message processed by ws_handler. INFO:data_websocket:Initial setup: Primary client connected, audio not active, attempting start. INFO:data_websocket:Starting pcmflux audio pipeline... INFO:data_websocket:pcmflux settings: device='output.monitor', bitrate=320000, channels=2 INFO:data_websocket:Frame-based backpressure logic task started for display 'primary'. INFO:data_websocket:Client settings received, proceeding with backpressure loop for 'primary'. [pcmflux] Attempting to connect to PulseAudio device: output.monitor... INFO:data_websocket:pcmflux audio capture started successfully. INFO:data_websocket:pcmflux audio chunk broadcasting task started. X Shared Memory Extension available. XShm setup complete for 3440x1288. CPU cores available: 16 Stream settings active -> Res: 3440x1288 | FPS: 60.0 | Stripes: 1 | Mode: H264 (CPU) FullFrame | CRF: 25 | PaintOver CRF: 18 (Burst: 5f) | Colorspace: I420 (Limited Range) | Damage Thresh: 10f | Damage Dur: 20f [pcmflux] SUCCESS: Connected to PulseAudio. [pcmflux] SUCCESS: Opus encoder created. [pcmflux] Capture loop started. Device: output.monitor, Rate: 48000, Channels: 2, Bitrate: 320 kbps, VBR: On, Silence Gate: Off, Debug Logging: Off, PCM Chunk: 3840 bytes INFO:data_websocket:Received START_AUDIO command from client for server-to-client audio. INFO:data_websocket:START_AUDIO: pcmflux audio pipeline already active. INFO:data_websocket:Received redundant resize request for primary (3440x1288). No action taken. [pcmflux] First non-silent audio chunk detected! Encoding... INFO:data_websocket:Stats sender: WS connection closed. INFO:data_websocket:Received STOP_VIDEO for 'primary'. Stopping stream. INFO:data_websocket:Stopping all streams for display 'primary'... INFO:data_websocket:Backpressure logic task for 'primary' cancelled. INFO:data_websocket:Backpressure logic task for 'primary' finished. INFO:data_websocket:Backpressure task for 'primary' was stopped. Resetting its frame IDs. INFO:data_websocket:Resetting frame IDs for display 'primary'. INFO:data_websocket:Broadcasting primary pipeline reset to all 1 clients: PIPELINE_RESETTING primary Capture loop stopped. X resources released. 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.