Add Remote Desktop app (XFCE + Fiji via noVNC)#1
Merged
Conversation
Browser-based Linux desktop running on a cluster node under rootless Apptainer, using the seamless service contract (auto_url + FG_SERVICE_PORT/FG_SERVICE_TOKEN). A custom image, built and published to GHCR by the new build-desktop workflow, bundles XFCE, TigerVNC, noVNC/websockify, and Fiji; the user's home directory is bind-mounted and writable as with the other apps. Security: websockify tunnels only WebSocket connections presenting the per-job token (UnixDomainSocketDirectory plugin); Xvnc listens solely on a unix socket in a 0700 node-local directory (TCP disabled); the X display requires an xauth cookie. Other users on a shared node are kept out by kernel file permissions, not network auth. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a
desktop/app: a full XFCE Linux desktop with Fiji preinstalled, streamed to the browser via TigerVNC + noVNC, running entirely inside Apptainer on a cluster node using the seamless service contract (auto_url+$FG_SERVICE_PORT/$FG_SERVICE_TOKEN, one-click tokenized access). The user's home directory is bind-mounted and writable (settings and files persist across sessions), and an optional Data Folder parameter bind-mounts an extra file-share folder and links it on the desktop.Unlike the existing apps, no upstream image fits (Docker desktop images assume root/s6 and writable image homes; none bundles Fiji), so this adds a custom image at
ghcr.io/janeliascicomp/fg-interactive-apps/desktopand abuild-desktopworkflow: PRs touchingdesktop/get a validation build, and pushing adesktop-v*tag publishes the versioned image.Security model
Every hop is protected, including against other users on the same shared compute node — via kernel file permissions rather than network auth:
UnixDomainSocketDirectorytoken plugin: token = socket filename in a private directory).-rfbport -1disables TCP entirely, which is what makesSecurityTypes Nonesafe./tmp/.X11-unix.ps.Verification done
runnables.yamlparses against Fileglancer'sAppManifestmodel;build_commandoutput verified with and without the Data Folder parameter, and theservice_url_suffixpasses its shell-safety validator.start-desktop.shandfiji-wrapper.share shellcheck-clean.UnixDomainSocketDirectoryplugin (pinned websockify 0.13.0) was unit-tested directly: valid token resolves to the socket; wrong tokens, path traversal, and non-socket files are rejected.-rfbunixpath/-rfbunixmodeand-rfbport -1; noVNC 1.6.0 documents theautoconnect/resize/pathquery params; the Fijifiji-latest-linux64-jdk.zipURL returns 200.After merge (required before the app is launchable)
desktop-v1.0.0to build and publish the image (runnables.yamlalready pins:1.0.0).🤖 Generated with Claude Code