I did an upgrade run on my server today that pulled in Calibre 9.8.0. When I tried bringing it up, I just got a black screen (except for the Selkies pullout on the left). Downgrading to 9.7.0 restored normal operation.
Calibre 9.8.0 should start and run, same as older versions.
Edit my docker-compose build to pull in lscr.io/linuxserver/calibre:9.8.0 and then docker compose up -d.
[migrations] started
[migrations] no migrations found
───────────────────────────────────────
██╗ ███████╗██╗ ██████╗
██║ ██╔════╝██║██╔═══██╗
██║ ███████╗██║██║ ██║
██║ ╚════██║██║██║ ██║
███████╗███████║██║╚██████╔╝
╚══════╝╚══════╝╚═╝ ╚═════╝
Brought to you by linuxserver.io
───────────────────────────────────────
To support LSIO projects visit:
https://www.linuxserver.io/donate/
───────────────────────────────────────
GID/UID
───────────────────────────────────────
User UID: 1000
User GID: 1000
───────────────────────────────────────
Linuxserver.io version: v9.8.0-ls399
Build-date: 2026-05-01T04:52:03+00:00
───────────────────────────────────────
[ls.io-init] Generating labwc rc.xml from template
[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.
No desktop processes found to terminate.
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.
[svc-de] Wayland mode: Waiting for socket at /config/.XDG/wayland-1...
[svc-de] /config/.XDG/wayland-1 found launching de
No desktop processes found to terminate.
[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', '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', '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': '', '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:Wayland input injection initialized.
INFO:webrtc_input:Built Wayland scancode map with 456 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
INFO:data_websocket:Legacy client ('127.0.0.1', 37502) connected. Role: controller, Slot: None
INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 37502)
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:Wayland Settings: Executing 'wlr-randr --output WL-1 --scale 1.0' on wayland-0
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=2560x1352. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 2560, 'h': 1352}}
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=2560x1352, Offset=0x0
INFO:data_websocket:Registered Wayland cursor callback for 'primary'
[Wayland] Configuring Output: 2560x1352 @ 60.00 FPS (Scale 1.00)
INFO:data_websocket:Video chunk sender started for display 'primary'.
[Wayland] CPU encoding selected (use_cpu=true or vaapi_node=-1).
[Wayland] Decision: No GPU Encoder available -> Using CPU Software Encoding.
Stream settings active -> Res: 2560x1352 | 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:SUCCESS: Capture started for 'primary'.
INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 2560, "height": 1352}
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:pcmflux audio capture started successfully.
[pcmflux] Attempting to connect to PulseAudio device: output.monitor with latency: 10ms
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 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 (2560x1352). No action taken.
[svc-de] Wayland mode: Waiting for socket at /config/.XDG/wayland-1...
[svc-de] /config/.XDG/wayland-1 found launching de
[pcmflux] First non-silent audio chunk detected! Encoding...
INFO:webrtc_input:Set clipboard content, length: 1115
INFO:webrtc_input:Clipboard changed. Sending content (text/plain)
INFO:data_websocket:Cleaning up Data WS handler for ('127.0.0.1', 37502) (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...
[Wayland] Capture loop stopped.
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:Keyboard reset completed (('127.0.0.1', 37502)) disconnect.
INFO:data_websocket:Last client (('127.0.0.1', 37502)) 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.
[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', 37502) finished all cleanup.
INFO:data_websocket:Legacy client ('127.0.0.1', 60014) connected. Role: controller, Slot: None
INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 60014)
INFO:data_websocket:Sending last known cursor to new client ('127.0.0.1', 60014)
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:Wayland Settings: Executing 'wlr-randr --output WL-1 --scale 1.0' on wayland-0
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=2560x1352. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 2560, 'h': 1352}}
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=2560x1352, Offset=0x0
INFO:data_websocket:Registered Wayland cursor callback for 'primary'
INFO:data_websocket:Video chunk sender started for display 'primary'.
[Wayland] CPU encoding selected (use_cpu=true or vaapi_node=-1).
[Wayland] Decision: No GPU Encoder available -> Using CPU Software Encoding.
Stream settings active -> Res: 2560x1352 | 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:SUCCESS: Capture started for 'primary'.
INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 2560, "height": 1352}
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.
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 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 (2560x1352). No action taken.
INFO:data_websocket:Stats sender: WS connection closed.
INFO:data_websocket:Cleaning up Data WS handler for ('127.0.0.1', 60014) (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...
[Wayland] Capture loop stopped.
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:Keyboard reset completed (('127.0.0.1', 60014)) disconnect.
INFO:data_websocket:Last client (('127.0.0.1', 60014)) 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.
[pcmflux] First non-silent audio chunk detected! Encoding...
[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', 60014) finished all cleanup.
INFO:data_websocket:Legacy client ('127.0.0.1', 60028) connected. Role: controller, Slot: None
INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 60028)
INFO:data_websocket:Sending last known cursor to new client ('127.0.0.1', 60028)
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:Wayland Settings: Executing 'wlr-randr --output WL-1 --scale 1.0' on wayland-0
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=2560x1352. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 2560, 'h': 1352}}
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=2560x1352, Offset=0x0
INFO:data_websocket:Registered Wayland cursor callback for 'primary'
INFO:data_websocket:Video chunk sender started for display 'primary'.
[Wayland] CPU encoding selected (use_cpu=true or vaapi_node=-1).
[Wayland] Decision: No GPU Encoder available -> Using CPU Software Encoding.
Stream settings active -> Res: 2560x1352 | 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:SUCCESS: Capture started for 'primary'.
INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 2560, "height": 1352}
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.
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 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 (2560x1352). No action taken.
INFO:data_websocket:Cleaning up Data WS handler for ('127.0.0.1', 60028) (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...
[Wayland] Capture loop stopped.
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:Keyboard reset completed (('127.0.0.1', 60028)) disconnect.
INFO:data_websocket:Last client (('127.0.0.1', 60028)) 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', 60032) connected. Role: controller, Slot: None
INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 60032)
INFO:data_websocket:Sending last known cursor to new client ('127.0.0.1', 60032)
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] First non-silent audio chunk detected! Encoding...
[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', 60028) finished all cleanup.
INFO:data_websocket:DPI changed from None to 96. Applying system-level change.
INFO:data_websocket:Wayland Settings: Executing 'wlr-randr --output WL-1 --scale 1.0' on wayland-0
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=2560x1352. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 2560, 'h': 1352}}
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=2560x1352, Offset=0x0
INFO:data_websocket:Registered Wayland cursor callback for 'primary'
INFO:data_websocket:Video chunk sender started for display 'primary'.
[Wayland] CPU encoding selected (use_cpu=true or vaapi_node=-1).
[Wayland] Decision: No GPU Encoder available -> Using CPU Software Encoding.
Stream settings active -> Res: 2560x1352 | 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:SUCCESS: Capture started for 'primary'.
INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 2560, "height": 1352}
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.
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 (2560x1352). 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.
INFO:data_websocket:Cleaning up Data WS handler for ('127.0.0.1', 60032) (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...
INFO:data_websocket:All capture instances, senders, and backpressure tasks stopped.
WARNING:data_websocket:No display clients connected. Video pipelines remain stopped.
[Wayland] Capture loop 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:Keyboard reset completed (('127.0.0.1', 60032)) disconnect.
INFO:data_websocket:Last client (('127.0.0.1', 60032)) 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', 60046) connected. Role: controller, Slot: None
INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 60046)
INFO:data_websocket:Sending last known cursor to new client ('127.0.0.1', 60046)
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:Legacy client ('127.0.0.1', 60048) connected. Role: controller, Slot: None
INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 60048)
INFO:data_websocket:Sending last known cursor to new client ('127.0.0.1', 60048)
INFO:data_websocket:Attempting to establish PulseAudio connection...
INFO:data_websocket:PulseAudio connection established.
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=True)
INFO:data_websocket:Stats sender: WS connection closed.
[pcmflux] First non-silent audio chunk detected! Encoding...
[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', 60032) finished all cleanup.
INFO:data_websocket:DPI changed from None to 96. Applying system-level change.
INFO:data_websocket:Wayland Settings: Executing 'wlr-randr --output WL-1 --scale 1.0' on wayland-0
INFO:data_websocket:Initial setup or dimensional change detected for 'primary'. Performing full display reconfiguration.
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=2560x1352. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 2560, 'h': 1352}}
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=2560x1352, Offset=0x0
INFO:data_websocket:Registered Wayland cursor callback for 'primary'
INFO:data_websocket:Video chunk sender started for display 'primary'.
[Wayland] CPU encoding selected (use_cpu=true or vaapi_node=-1).
[Wayland] Decision: No GPU Encoder available -> Using CPU Software Encoding.
Stream settings active -> Res: 2560x1352 | 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:SUCCESS: Capture started for 'primary'.
INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 2560, "height": 1352}
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:Starting display reconfiguration...
INFO:data_websocket:Stopping all existing capture and backpressure tasks...
[Wayland] Capture loop stopped.
INFO:data_websocket:All capture instances, senders, and backpressure tasks stopped.
INFO:data_websocket:Calculating new extended desktop layout from ALL clients...
INFO:data_websocket:Layout calculated: Total Size=2560x1352. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 2560, 'h': 1352}}
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=2560x1352, Offset=0x0
INFO:data_websocket:Registered Wayland cursor callback for 'primary'
INFO:data_websocket:Video chunk sender for 'primary' cancelled.
INFO:data_websocket:Video chunk sender for 'primary' finished.
INFO:data_websocket:Video chunk sender started for display 'primary'.
[Wayland] CPU encoding selected (use_cpu=true or vaapi_node=-1).
[Wayland] Decision: No GPU Encoder available -> Using CPU Software Encoding.
Stream settings active -> Res: 2560x1352 | 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:SUCCESS: Capture started for 'primary'.
INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 2560, "height": 1352}
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.
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 (2560x1352). No action taken.
INFO:data_websocket:Cleaning up Data WS handler for ('127.0.0.1', 60046) (Display ID: primary)...
INFO:data_websocket:Unregistered client at ('127.0.0.1', 60046) disconnected. No display reconfiguration needed.
INFO:data_websocket:Keyboard reset completed (('127.0.0.1', 60046)) disconnect.
INFO:data_websocket:Data WS handler for ('127.0.0.1', 60046) finished all cleanup.
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 (2560x1352). 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.
INFO:data_websocket:Stats sender: WS connection closed.
Is there an existing issue for this?
Current Behavior
I did an upgrade run on my server today that pulled in Calibre 9.8.0. When I tried bringing it up, I just got a black screen (except for the Selkies pullout on the left). Downgrading to 9.7.0 restored normal operation.
Expected Behavior
Calibre 9.8.0 should start and run, same as older versions.
Steps To Reproduce
Edit my docker-compose build to pull in lscr.io/linuxserver/calibre:9.8.0 and then
docker compose up -d.Environment
CPU architecture
x86-64
Docker creation
services: calibre: image: lscr.io/linuxserver/calibre:9.7.0 container_name: calibre restart: unless-stopped environment: PUID: 1000 PGID: 1000 TZ: US/Pacific volumes: - "/mnt/storage/books/Calibre Library:/config" - "/tmp:/tmp" networks: - www security_opt: - seccomp=unconfined labels: caddy: calibre.alfter.us #caddy.basic_auth.salfter: "$PASSWD" caddy.import: secure * caddy.reverse_proxy: calibre.www:8181 caddy.reverse_proxy.transport: http caddy.reverse_proxy.transport.tls: caddy.reverse_proxy.transport.tls_insecure_skip_verify: caddy.log.output: discard calibre-bookserver: restart: unless-stopped container_name: calibre-bookserver image: "busybox:uclibc" networks: - www command: [ "tail", "-f", "/dev/null" ] labels: caddy: books.alfter.us #caddy.import: secure * caddy.reverse_proxy: calibre.www:8081 caddy.log.output: discard networks: www: name: www external: trueContainer logs
[migrations] started [migrations] no migrations found ─────────────────────────────────────── ██╗ ███████╗██╗ ██████╗ ██║ ██╔════╝██║██╔═══██╗ ██║ ███████╗██║██║ ██║ ██║ ╚════██║██║██║ ██║ ███████╗███████║██║╚██████╔╝ ╚══════╝╚══════╝╚═╝ ╚═════╝ Brought to you by linuxserver.io ─────────────────────────────────────── To support LSIO projects visit: https://www.linuxserver.io/donate/ ─────────────────────────────────────── GID/UID ─────────────────────────────────────── User UID: 1000 User GID: 1000 ─────────────────────────────────────── Linuxserver.io version: v9.8.0-ls399 Build-date: 2026-05-01T04:52:03+00:00 ─────────────────────────────────────── [ls.io-init] Generating labwc rc.xml from template [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. No desktop processes found to terminate. 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. [svc-de] Wayland mode: Waiting for socket at /config/.XDG/wayland-1... [svc-de] /config/.XDG/wayland-1 found launching de No desktop processes found to terminate. [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', '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', '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': '', '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:Wayland input injection initialized. INFO:webrtc_input:Built Wayland scancode map with 456 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 INFO:data_websocket:Legacy client ('127.0.0.1', 37502) connected. Role: controller, Slot: None INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 37502) 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:Wayland Settings: Executing 'wlr-randr --output WL-1 --scale 1.0' on wayland-0 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=2560x1352. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 2560, 'h': 1352}} 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=2560x1352, Offset=0x0 INFO:data_websocket:Registered Wayland cursor callback for 'primary' [Wayland] Configuring Output: 2560x1352 @ 60.00 FPS (Scale 1.00) INFO:data_websocket:Video chunk sender started for display 'primary'. [Wayland] CPU encoding selected (use_cpu=true or vaapi_node=-1). [Wayland] Decision: No GPU Encoder available -> Using CPU Software Encoding. Stream settings active -> Res: 2560x1352 | 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:SUCCESS: Capture started for 'primary'. INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 2560, "height": 1352} 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:pcmflux audio capture started successfully. [pcmflux] Attempting to connect to PulseAudio device: output.monitor with latency: 10ms 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 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 (2560x1352). No action taken. [svc-de] Wayland mode: Waiting for socket at /config/.XDG/wayland-1... [svc-de] /config/.XDG/wayland-1 found launching de [pcmflux] First non-silent audio chunk detected! Encoding... INFO:webrtc_input:Set clipboard content, length: 1115 INFO:webrtc_input:Clipboard changed. Sending content (text/plain) INFO:data_websocket:Cleaning up Data WS handler for ('127.0.0.1', 37502) (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... [Wayland] Capture loop stopped. 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:Keyboard reset completed (('127.0.0.1', 37502)) disconnect. INFO:data_websocket:Last client (('127.0.0.1', 37502)) 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. [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', 37502) finished all cleanup. INFO:data_websocket:Legacy client ('127.0.0.1', 60014) connected. Role: controller, Slot: None INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 60014) INFO:data_websocket:Sending last known cursor to new client ('127.0.0.1', 60014) 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:Wayland Settings: Executing 'wlr-randr --output WL-1 --scale 1.0' on wayland-0 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=2560x1352. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 2560, 'h': 1352}} 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=2560x1352, Offset=0x0 INFO:data_websocket:Registered Wayland cursor callback for 'primary' INFO:data_websocket:Video chunk sender started for display 'primary'. [Wayland] CPU encoding selected (use_cpu=true or vaapi_node=-1). [Wayland] Decision: No GPU Encoder available -> Using CPU Software Encoding. Stream settings active -> Res: 2560x1352 | 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:SUCCESS: Capture started for 'primary'. INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 2560, "height": 1352} 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. 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 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 (2560x1352). No action taken. INFO:data_websocket:Stats sender: WS connection closed. INFO:data_websocket:Cleaning up Data WS handler for ('127.0.0.1', 60014) (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... [Wayland] Capture loop stopped. 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:Keyboard reset completed (('127.0.0.1', 60014)) disconnect. INFO:data_websocket:Last client (('127.0.0.1', 60014)) 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. [pcmflux] First non-silent audio chunk detected! Encoding... [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', 60014) finished all cleanup. INFO:data_websocket:Legacy client ('127.0.0.1', 60028) connected. Role: controller, Slot: None INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 60028) INFO:data_websocket:Sending last known cursor to new client ('127.0.0.1', 60028) 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:Wayland Settings: Executing 'wlr-randr --output WL-1 --scale 1.0' on wayland-0 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=2560x1352. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 2560, 'h': 1352}} 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=2560x1352, Offset=0x0 INFO:data_websocket:Registered Wayland cursor callback for 'primary' INFO:data_websocket:Video chunk sender started for display 'primary'. [Wayland] CPU encoding selected (use_cpu=true or vaapi_node=-1). [Wayland] Decision: No GPU Encoder available -> Using CPU Software Encoding. Stream settings active -> Res: 2560x1352 | 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:SUCCESS: Capture started for 'primary'. INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 2560, "height": 1352} 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. 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 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 (2560x1352). No action taken. INFO:data_websocket:Cleaning up Data WS handler for ('127.0.0.1', 60028) (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... [Wayland] Capture loop stopped. 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:Keyboard reset completed (('127.0.0.1', 60028)) disconnect. INFO:data_websocket:Last client (('127.0.0.1', 60028)) 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', 60032) connected. Role: controller, Slot: None INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 60032) INFO:data_websocket:Sending last known cursor to new client ('127.0.0.1', 60032) 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] First non-silent audio chunk detected! Encoding... [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', 60028) finished all cleanup. INFO:data_websocket:DPI changed from None to 96. Applying system-level change. INFO:data_websocket:Wayland Settings: Executing 'wlr-randr --output WL-1 --scale 1.0' on wayland-0 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=2560x1352. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 2560, 'h': 1352}} 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=2560x1352, Offset=0x0 INFO:data_websocket:Registered Wayland cursor callback for 'primary' INFO:data_websocket:Video chunk sender started for display 'primary'. [Wayland] CPU encoding selected (use_cpu=true or vaapi_node=-1). [Wayland] Decision: No GPU Encoder available -> Using CPU Software Encoding. Stream settings active -> Res: 2560x1352 | 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:SUCCESS: Capture started for 'primary'. INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 2560, "height": 1352} 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. 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 (2560x1352). 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. INFO:data_websocket:Cleaning up Data WS handler for ('127.0.0.1', 60032) (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... INFO:data_websocket:All capture instances, senders, and backpressure tasks stopped. WARNING:data_websocket:No display clients connected. Video pipelines remain stopped. [Wayland] Capture loop 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:Keyboard reset completed (('127.0.0.1', 60032)) disconnect. INFO:data_websocket:Last client (('127.0.0.1', 60032)) 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', 60046) connected. Role: controller, Slot: None INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 60046) INFO:data_websocket:Sending last known cursor to new client ('127.0.0.1', 60046) 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:Legacy client ('127.0.0.1', 60048) connected. Role: controller, Slot: None INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 60048) INFO:data_websocket:Sending last known cursor to new client ('127.0.0.1', 60048) INFO:data_websocket:Attempting to establish PulseAudio connection... INFO:data_websocket:PulseAudio connection established. 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=True) INFO:data_websocket:Stats sender: WS connection closed. [pcmflux] First non-silent audio chunk detected! Encoding... [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', 60032) finished all cleanup. INFO:data_websocket:DPI changed from None to 96. Applying system-level change. INFO:data_websocket:Wayland Settings: Executing 'wlr-randr --output WL-1 --scale 1.0' on wayland-0 INFO:data_websocket:Initial setup or dimensional change detected for 'primary'. Performing full display reconfiguration. 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=2560x1352. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 2560, 'h': 1352}} 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=2560x1352, Offset=0x0 INFO:data_websocket:Registered Wayland cursor callback for 'primary' INFO:data_websocket:Video chunk sender started for display 'primary'. [Wayland] CPU encoding selected (use_cpu=true or vaapi_node=-1). [Wayland] Decision: No GPU Encoder available -> Using CPU Software Encoding. Stream settings active -> Res: 2560x1352 | 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:SUCCESS: Capture started for 'primary'. INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 2560, "height": 1352} 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:Starting display reconfiguration... INFO:data_websocket:Stopping all existing capture and backpressure tasks... [Wayland] Capture loop stopped. INFO:data_websocket:All capture instances, senders, and backpressure tasks stopped. INFO:data_websocket:Calculating new extended desktop layout from ALL clients... INFO:data_websocket:Layout calculated: Total Size=2560x1352. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 2560, 'h': 1352}} 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=2560x1352, Offset=0x0 INFO:data_websocket:Registered Wayland cursor callback for 'primary' INFO:data_websocket:Video chunk sender for 'primary' cancelled. INFO:data_websocket:Video chunk sender for 'primary' finished. INFO:data_websocket:Video chunk sender started for display 'primary'. [Wayland] CPU encoding selected (use_cpu=true or vaapi_node=-1). [Wayland] Decision: No GPU Encoder available -> Using CPU Software Encoding. Stream settings active -> Res: 2560x1352 | 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:SUCCESS: Capture started for 'primary'. INFO:data_websocket:Broadcasting primary stream resolution to all clients: {"type": "stream_resolution", "width": 2560, "height": 1352} 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. 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 (2560x1352). No action taken. INFO:data_websocket:Cleaning up Data WS handler for ('127.0.0.1', 60046) (Display ID: primary)... INFO:data_websocket:Unregistered client at ('127.0.0.1', 60046) disconnected. No display reconfiguration needed. INFO:data_websocket:Keyboard reset completed (('127.0.0.1', 60046)) disconnect. INFO:data_websocket:Data WS handler for ('127.0.0.1', 60046) finished all cleanup. 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 (2560x1352). 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. INFO:data_websocket:Stats sender: WS connection closed.