Skip to content

[BUG] Selkies "Download Files" don't work #131

Description

@marcadetd

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

The button "Download Files" shows as initial folder /config/Desktop. The "Parent directory/" link is not initially displayed.

Image

When clicking on "FILE NAME" column, the "Parent directory/" link is shown briefly but don't stayed displayed.
When clicking on "FILE SIZE" or "DATE" column, the "Parent directory/" link is shown and stayed displayed.

Image

When clicking on the displayed "Parent directory/" link, an error message is displayed on the bottom of the window : "Connection Terminated: a new primary client connected connection killed".

Image

The window created by clicking on "Download Files" display the webtop desktop.

Image

Expected Behavior

The initial display by the button "Download Files" should have the "Parent directory/" link.
Clicking on this link should display the parent folder.

Steps To Reproduce

  1. docker run -d --name=webtop -p 3000:3000 lscr.io/linuxserver/webtop:latest
  2. open browser for http://localhost:3000
  3. display the Selkies dashboard
  4. click on "Files" and "Download Files" buttons

Environment

- OS: macOS Sequoia 15.6.1
- How docker service was installed: Docker Desktop
- Browsers: tried Safary, Firefox, Google Chrome

CPU architecture

x86-64

Docker creation

`docker run -d --name=webtop -p 3000:3000 lscr.io/linuxserver/webtop:latest`

Container logs

[migrations] started
[migrations] no migrations found
usermod: no changes
───────────────────────────────────────

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

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

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

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

User UID:    911
User GID:    911
───────────────────────────────────────
....+.+...+......+...+.....+++++++++++++++++++++++++++++++++++++++*.....+....+...........+...+..........+.....+.+.....+.+..............+.+..+...+...+....+..+...+......+.......+++++++++++++++++++++++++++++++++++++++*...+.....+.............+.....+.....................+...+............+.+........+....+...............+......+.....+.......+.....+.......+..+................+..+......+.+..............+.+.....+.+............+.....+.+......+...+..+................+...+..+.......+...........+.+......+..+.+.....+......+.+..+...+....+...+...+.....+............+.+..............+.......+......+..+.+......+......+..+.+............+..+...+...+............+...+.+.........+..+..........+..+.......+.........+.....+...............+.+...+...++++++
.....+...+..+...+.+++++++++++++++++++++++++++++++++++++++*...........+.+++++++++++++++++++++++++++++++++++++++*......+..+..................+.+..+...+..........+..+.......+..+....+......+.....+.+...+..+..........+............+...+........+......+........................+.+...+......+.....+.........+......+.+........+.......+........+...+....+.....+......+.............+.........+......+..+.......+.....+......+......+.+...+.....+.......+...............+..+.......+..................+........+.........+..................+...+...+..........+............+...+..+....+...+..+.+..............+.+........+....+......+..+....+........+.....................+....+.....+......+......+.++++++
-----
[ls.io-init] Creating initial backup of menu.xml
[ls.io-init] Creating initial backup of system rc.xml
[custom-init] No custom files found, skipping...
[ls.io-init] done.
_XSERVTransmkdir: ERROR: euid != 0,directory /tmp/.X11-unix will not be created.
screen 0 shmid 0
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:Starting Selkies (WebSocket Mode) with settings: {'audio_enabled': (True, False), 'microphone_enabled': (True, False), 'gamepad_enabled': (True, False), 'clipboard_enabled': (True, False), 'command_enabled': (True, False), 'file_transfers': ['upload', 'download'], 'encoder': 'x264enc', 'framerate': (8, 120), 'h264_crf': (5, 50), 'jpeg_quality': (1, 100), 'h264_fullcolor': (False, False), 'h264_streaming_mode': (False, False), 'use_cpu': (False, False), 'use_paint_over_quality': (True, False), 'paint_over_jpeg_quality': (1, 100), 'h264_paintover_crf': (5, 50), 'h264_paintover_burst_frames': (1, 30), 'second_screen': (True, False), 'audio_bitrate': '320000', 'is_manual_resolution_mode': (False, False), 'manual_width': 0, 'manual_height': 0, 'scaling_dpi': '96', 'enable_binary_clipboard': (False, False), 'use_browser_cursors': (False, False), 'use_css_scaling': (False, False), 'ui_title': 'Selkies', 'ui_show_logo': (True, False), 'ui_show_core_buttons': (True, False), 'ui_show_sidebar': (True, False), 'ui_sidebar_show_video_settings': (True, False), 'ui_sidebar_show_screen_settings': (True, False), 'ui_sidebar_show_audio_settings': (True, False), 'ui_sidebar_show_stats': (True, False), 'ui_sidebar_show_clipboard': (True, False), 'ui_sidebar_show_files': (True, False), 'ui_sidebar_show_apps': (True, False), 'ui_sidebar_show_sharing': (True, False), 'ui_sidebar_show_gamepads': (True, False), 'ui_sidebar_show_fullscreen': (True, False), 'ui_sidebar_show_gaming_mode': (True, False), 'ui_sidebar_show_trackpad': (True, False), 'ui_sidebar_show_keyboard_button': (True, False), 'ui_sidebar_show_soft_buttons': (True, False), 'port': 8082, 'dri_node': '', 'audio_device_name': 'output.monitor', 'watermark_path': '', 'watermark_location': -1, 'debug': (False, False), 'enable_sharing': (True, False), 'enable_collab': (True, False), 'enable_shared': (True, False), 'enable_player2': (True, False), 'enable_player3': (True, False), 'enable_player4': (True, False)}
INFO:main:Initial Encoder: x264enc, Framerate: 60
INFO:main:SelkiesStreamingApp initialized: encoder=x264enc, display=1024x768
INFO:main:All main components initialized. Running server...
INFO:webrtc_input:System DPI detected as ~96. Cursor size cap set to 32x32px.
INFO:webrtc_input:Resetting keyboard modifiers.
INFO:webrtc_input:Clipboard monitor running (binary mode: False)
INFO:webrtc_input:Found XFIXES version 4.0
INFO:webrtc_input:starting cursor monitor
INFO:webrtc_input:watching for cursor changes
WARNING:data_websocket:Cannot broadcast cursor data: no clients connected or server not ready.
INFO:data_websocket:Data WebSocket Server listening on port 8082
WARNING:data_websocket:Cannot broadcast cursor data: no clients connected or server not ready.
WARNING:data_websocket:Cannot broadcast cursor data: no clients connected or server not ready.
WARNING:data_websocket:Cannot broadcast cursor data: no clients connected or server not ready.
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:Data WebSocket connected from ('127.0.0.1', 41622)
INFO:data_websocket:Sending last known cursor to new client ('127.0.0.1', 41622)
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:gst_app_resize:XFCE detected. Applying xfconf-query for DPI 96.
INFO:gst_app_resize:Found active XFCE session environment. Commands will be executed within this context.
INFO:gst_app_resize:Successfully set XFCE DPI to 96 using xfconf-query.
INFO:gst_app_resize:Attempting to set cursor size to: 32 (based on DPI 96)
INFO:gst_app_resize:Successfully set cursor size to 32
INFO:data_websocket:Initial setup or dimensional change detected for 'primary'. Performing full display reconfiguration.
INFO:data_websocket:Starting display reconfiguration...
INFO:data_websocket:Calculating new extended desktop layout from ALL clients...
INFO:data_websocket:Layout calculated: Total Size=1512x1104. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 1512, 'h': 1104}}
INFO:data_websocket:Mode 1512x1104 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=1512x1104, 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": 1512, "height": 1104}
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.
X Shared Memory Extension available.
XShm setup complete for 1512x1104.
CPU cores available: 8
Stream settings active -> Res: 1512x1104 | 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: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 (1512x1104). No action taken.
[pcmflux] First non-silent audio chunk detected! Encoding...
INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 37176)
INFO:data_websocket:Sending last known cursor to new client ('127.0.0.1', 37176)
INFO:data_websocket:Attempting to establish PulseAudio connection...
INFO:data_websocket:PulseAudio connection established.
WARNING:data_websocket:Killing old client for 'primary' at ('127.0.0.1', 41622). Reason: a new primary client connected connection killed
INFO:data_websocket:Cleaning up Data WS handler for ('127.0.0.1', 41622) (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:Registering new client for display: primary
INFO:data_websocket:Applying and sanitizing client settings for 'primary' (initial=True)
Capture loop stopped. X resources released.
INFO:data_websocket:All capture instances, senders, and backpressure tasks stopped.
INFO:data_websocket:Calculating new extended desktop layout from ALL clients...
ERROR:data_websocket:Calculated total display size is zero. Aborting reconfiguration.
INFO:data_websocket:Reconfiguration process complete (state unlocked).
INFO:data_websocket:Data WS handler for ('127.0.0.1', 41622) finished all cleanup.
INFO:data_websocket:Video chunk sender for 'primary' cancelled.
INFO:data_websocket:Video chunk sender for 'primary' finished.
INFO:data_websocket:DPI changed from None to 96. Applying system-level change.
INFO:gst_app_resize:XFCE detected. Applying xfconf-query for DPI 96.
INFO:gst_app_resize:Found active XFCE session environment. Commands will be executed within this context.
INFO:gst_app_resize:Successfully set XFCE DPI to 96 using xfconf-query.
INFO:gst_app_resize:Attempting to set cursor size to: 32 (based on DPI 96)
INFO:gst_app_resize:Successfully set cursor size to 32
INFO:data_websocket:Restarting audio pipeline due to settings update.
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:Stats sender: WS connection closed.
[pcmflux] Stop requested. Cleaning up capture loop...
[pcmflux] Audio capture loop finished. Resources released.
INFO:data_websocket:pcmflux audio pipeline stopped.
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...
INFO:data_websocket:pcmflux audio capture started successfully.
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=1168x842. Layouts: {'primary': {'x': 0, 'y': 0, 'w': 1168, 'h': 842}}
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:Mode 1168x842 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=1168x842, 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": 1168, "height": 842}
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:Frame-based backpressure logic task started for display 'primary'.
INFO:data_websocket:Client settings received, proceeding with backpressure loop for 'primary'.
X Shared Memory Extension available.
XShm setup complete for 1168x842.
CPU cores available: 8
Stream settings active -> Res: 1168x842 | 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 (1168x842). No action taken.
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.
[pcmflux] First non-silent audio chunk detected! Encoding...

Activity

  1. github-actions commented on Nov 5, 2025

    @github-actions

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

  2. marcadetd commented on Nov 5, 2025

    @marcadetd
    Author

    I forgot to change the CPU architecture to arm64.
    But I have also tried to run the container on a remote x86_64 server: same behavior.

  3. thelamer commented on Nov 28, 2025

    @thelamer
    Member

    So this is a side effect of using Nginx to serve up files. It is not very customize able but I do my best to ensure it is cleaned up, that js conly runs when landing on that page so clicking the sort brings back what was stripped.

    it is specifically this logic:

    https://github.com/selkies-project/selkies/blob/main/addons/gst-web-core/nginx/footer.html

    I do not think this is worth fixing basically, we should just rethink how file downloads work (NGINX was chosen because of reliability and feature set for file downloads)

    There is all kinds of nuance stuff that you miss when you just serve files from a python server like byte ranging and stuff. NGINX is the best lowest resource usage option but it is very hard to customize to do something like this.

  4. LinuxServer-CI commented on Dec 29, 2025

    @LinuxServer-CI
    Collaborator

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

  5. github-actions commented on Feb 11, 2026

    @github-actions

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

  6. LinuxServer-CI commented on Mar 15, 2026

    @LinuxServer-CI
    Collaborator

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

  7. thelamer commented on Mar 25, 2026

    @thelamer
    Member

    unstale

  8. 2 remaining items

  9. junkerderprovinz commented on Aug 9, 2026

    @junkerderprovinz
    Contributor

    Correcting my last comment above — I mis-traced the branch history, apologies.

    The download-attribute / sort-independent parent-link fix I described (commit 06b80f10200e95bb9721fa8c573deaa61662a120, "fix(core): Stream fixes", 2026-07-15) only exists on selkies-project/selkies's main branch. The Dockerfile here pins 348bc4f61da66198573e7e57db9a266aca1991d5, which is not on main at all — it's the current tip of a separate lsio branch in that same repo, diverged well before the fix landed on main. Diffing footer.html at the two commits confirms the lsio-branch copy is still the old pre-fix version.

    So a plain rebuild/docker pull will NOT pick up that fix today. If this is worth carrying, it'd need either the fix ported onto the lsio branch upstream, or a small local patch step added to this Dockerfile after the git checkout -f (already done elsewhere here, e.g. labwc-ipc.patch and several sed -i calls) — happy to send that as a PR if wanted. Given the "not worth fixing, rethink file downloads" comment above, let me know which direction (if any) makes sense.

  10. thelamer commented on Aug 10, 2026

    @thelamer
    Member

    Selkies main is going to be moving fast and breaking things for a while. On the LSIO side we are gonna stay pretty static for a bit and link out to their head desktop images for people to beta test.

    This will all land in our baseimages eventually, but for right now we are like Debian and they are gonna be like Arch.

    I am only going to make modifications to the LSIO branch in the case of absolute critical bugs for at least a month.

  11. junkerderprovinz commented on Sep 3, 2026

    @junkerderprovinz
    Contributor

    Following up on my two comments above with something concrete, and thanks to @marcadetd for the screenshots that pinned this down: the hardening now exists upstream as selkies-project/selkies#325.

    It removes the Parent directory/ row at the browse root outright instead of hiding it after load, and it fixes the root detection itself (raw-path comparison that a missing trailing slash defeats, plus two mount-matching corner cases). That closes the session-kill path from my first comment, where root ../ resolves to the desktop page and the new primary client terminates the session.

    @thelamer thanks for pointing at footer.html, that is exactly where it sits. On the sort behaviour you described, the js-only-runs-on-landing read: the sort links are full server-side reloads with an unchanged pathname, so as far as I can tell the footer script does run again on each load. I still cannot explain marcadetd's per-column split (row staying after sorting by size or date but not by name), so I am treating that as unconfirmed rather than covered by the fix; removing the row instead of hiding it should make it moot at the root either way.

    Since the Dockerfile here pins the selkies lsio branch, this only lands if that branch takes it, and I understand the plan is to stay static for now. Until then everything below the root works normally; it is only the top-level Parent directory/ row that terminates the session.

  12. junkerderprovinz commented on Sep 23, 2026

    @junkerderprovinz
    Contributor

    Selkies 2.0.0 is now in the debiantrixie, ubunturesolute, alpine324, arch, fedora44 and kali base tags. There Download Files is served by Selkies itself instead of the nginx fancyindex page, with no parent row at the file manager root and no sort links, so the row that killed the session is gone and files download instead of opening inline. The root is still FILE_MANAGER_PATH (default /config/Desktop), which also sets where uploads land, so change that if you want to browse higher up. webtop:latest has not been rebuilt on the new base yet, but webtop:debian-xfce already is, while alpine323, el9, fedora42, fedora43 and ubuntunoble still behave as reported. @marcadetd could you check whether debian-xfce works for you?

  13. marcadetd commented on Sep 24, 2026

    @marcadetd
    Author

    Yes, webtop:debian-xfce is fine for me.
    Thanks

  14. thelamer commented on Sep 26, 2026

    @thelamer
    Member

    v2 has been built out now, closing.

  15. moved this from Issues to Done in Issue & PR Trackeron Sep 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions