Light Desktop¶
Reemo’s Light Desktop is a complete Linux desktop, exposed securely via a Reemo session directly in the user’s browser. It includes a browser, the ONLYOFFICE office suite, a PDF reader, an archive manager, and the KeePass password manager.
Unlike other images in the catalog, which publish one application, this one publishes the desktop itself: no application is launched at startup, the user opens the ones they need, arranges their windows, and keeps their files.
This guide covers first the deployment (administrator side), then usage in daily work (end user side).
Template¶
This template is importable from the Images page of the administration interface. Refer to the Import and Export of Images section for the import and update procedure.
{
"name": "Light Desktop",
"type": "ALU",
"comments": "Light Desktop: XFCE + ONLYOFFICE + Chromium + 7zip + KeePass + PDF viewer. Optional persistent home directory.",
"reference": "registry.reemo.io/reemosblightdesktop",
"icon": "<svg width=\"512\" height=\"512\" viewBox=\"0 0 512 512\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"50\" y=\"150\" width=\"412\" height=\"300\" rx=\"20\" fill=\"#2496ED\"/>\n <path d=\"M50 150L256 50L462 150\" stroke=\"#1D84D1\" stroke-width=\"10\" stroke-linejoin=\"round\"/>\n \n <rect x=\"120\" y=\"200\" width=\"272\" height=\"180\" rx=\"10\" fill=\"white\"/>\n <rect x=\"135\" y=\"215\" width=\"242\" height=\"130\" rx=\"5\" fill=\"#f0f0f0\"/>\n \n <rect x=\"135\" y=\"325\" width=\"242\" height=\"20\" rx=\"2\" fill=\"#3D4C5F\"/>\n \n <circle cx=\"160\" cy=\"245\" r=\"15\" fill=\"#DE3121\"/> <circle cx=\"210\" cy=\"245\" r=\"15\" fill=\"#4285F4\"/> <circle cx=\"260\" cy=\"245\" r=\"15\" fill=\"#6FB342\"/> <rect x=\"236\" y=\"380\" width=\"40\" height=\"30\" fill=\"white\"/>\n <rect x=\"196\" y=\"410\" width=\"120\" height=\"10\" rx=\"5\" fill=\"white\"/>\n</svg>",
"config": [
{
"conditionOp": "EQUAL",
"conditionVal": "true",
"conditionVar": "REEMO_PERSISTENT_SESSION",
"defaultValue": null,
"editable": true,
"hint": "Disk mounted on the user home directory: desktop files, downloads, browser profile and KeePass database survive the session.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Persistent Disk",
"optional": false,
"placeholder": null,
"type": "VOLUME",
"uiPriority": 1100,
"value": "",
"variable": "REEMO_PERSISTENT_HOME",
"volumeAccessMode": "READ_WRITE_ONCE",
"volumeMode": "FILESYSTEM",
"volumeName": "home",
"volumeRequestSize": 10,
"volumeRequestSizeOverhead": 8,
"volumeStorageClass": "csi-rbd",
"volumeTarget": "/home/reemo/"
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": "reemo",
"editable": true,
"hint": "Look of the desktop: Reemo (dark) or Windows-like (light theme, blue wallpaper).",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Desktop Appearance",
"optional": false,
"placeholder": null,
"type": "SELECT",
"uiPriority": 1090,
"value": "",
"variable": "REEMO_DESKTOP_THEME",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Reemo",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 20,
"value": "reemo",
"variable": "REEMO_DESKTOP_THEME",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Windows-like",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 10,
"value": "windows",
"variable": "REEMO_DESKTOP_THEME",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": true,
"hint": "Folders created on the desktop. Letters, digits and spaces only, comma-separated.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Desktop Folders",
"optional": true,
"placeholder": "Documents,Projects",
"type": "STRING",
"uiPriority": 1070,
"value": "",
"variable": "REEMO_DESKTOP_FOLDERS",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": true,
"hint": "Files downloaded onto the desktop at startup, comma-separated URLs.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Desktop Files (URLs)",
"optional": true,
"placeholder": "https://host/file1.pdf,https://host/file2.pdf",
"type": "STRING",
"uiPriority": 1060,
"value": "",
"variable": "REEMO_FILE_DESKTOP",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": true,
"hint": "KeePass database to open, base64-encoded. Left empty, KeePass starts without one.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "KeePass Database",
"optional": true,
"placeholder": null,
"type": "TEXT",
"uiPriority": 1050,
"value": "",
"variable": "REEMO_KEEPASS_DB",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": "https://reemo.io",
"editable": true,
"hint": "Page loaded when the browser starts, and target of the Home button.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Start URL / Homepage",
"optional": false,
"placeholder": "https://reemo.io",
"type": "STRING",
"uiPriority": 1000,
"value": "",
"variable": "REEMO_HOME",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": "BLANK",
"editable": true,
"hint": "What a new tab shows.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "New Tab Page",
"optional": false,
"placeholder": null,
"type": "SELECT",
"uiPriority": 990,
"value": "",
"variable": "REEMO_NEW_TAB",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Blank page",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 20,
"value": "BLANK",
"variable": "REEMO_NEW_TAB",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Custom URL",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 10,
"value": "CUSTOM",
"variable": "REEMO_NEW_TAB",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": "EQUAL",
"conditionVal": "CUSTOM",
"conditionVar": "REEMO_NEW_TAB",
"defaultValue": null,
"editable": true,
"hint": "URL opened on each new tab.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "New Tab URL",
"optional": true,
"placeholder": null,
"type": "STRING",
"uiPriority": 980,
"value": "",
"variable": "REEMO_NEW_TAB_URL",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": "NONE",
"editable": true,
"hint": "How the browser reaches the web. Direct: no proxy. Upstream proxy: all traffic is routed through the proxy below.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Proxy Mode",
"optional": false,
"placeholder": null,
"type": "SELECT",
"uiPriority": 900,
"value": "",
"variable": "REEMO_PROXY",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Direct",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 20,
"value": "NONE",
"variable": "REEMO_PROXY",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Upstream proxy",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 10,
"value": "EXTERNAL",
"variable": "REEMO_PROXY",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": "EQUAL",
"conditionVal": "EXTERNAL",
"conditionVar": "REEMO_PROXY",
"defaultValue": null,
"editable": true,
"hint": "Proxy the browser routes all its traffic through.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Upstream Proxy (host:port)",
"optional": false,
"placeholder": null,
"type": "STRING",
"uiPriority": 890,
"value": "",
"variable": "REEMO_EXTERNAL_PROXY",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": "EQUAL",
"conditionVal": "EXTERNAL",
"conditionVar": "REEMO_PROXY",
"defaultValue": null,
"editable": true,
"hint": "Hosts reached directly, bypassing the proxy. Comma-separated.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Proxy Bypass List",
"optional": true,
"placeholder": "intranet.local,.internal",
"type": "STRING",
"uiPriority": 880,
"value": "",
"variable": "REEMO_NO_PROXY",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": true,
"hint": "Only these are reachable; everything else is blocked. Comma-separated. Takes precedence over the blocked list.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Allowed Websites",
"optional": true,
"placeholder": "https://example.com/*",
"type": "STRING",
"uiPriority": 870,
"value": "",
"variable": "REEMO_ALLOWLIST",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": true,
"hint": "These are blocked; everything else is allowed. Comma-separated. Ignored when an allowed list is set.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Blocked Websites",
"optional": true,
"placeholder": "https://example.com/*",
"type": "STRING",
"uiPriority": 860,
"value": "",
"variable": "REEMO_BLOCKLIST",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": "false",
"editable": true,
"hint": "Lets the browser open local files through file:// URLs.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Local File Navigation (file://)",
"optional": false,
"placeholder": null,
"type": "SELECT",
"uiPriority": 850,
"value": "",
"variable": "REEMO_ALLOW_FILE_PROTOCOL",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Enabled",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 20,
"value": "true",
"variable": "REEMO_ALLOW_FILE_PROTOCOL",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Disabled",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 10,
"value": "false",
"variable": "REEMO_ALLOW_FILE_PROTOCOL",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": "false",
"editable": true,
"hint": "Lets a website prompt the user to pick a file from the session.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "File Picker Dialogs",
"optional": false,
"placeholder": null,
"type": "SELECT",
"uiPriority": 840,
"value": "",
"variable": "REEMO_ALLOW_FILE_DIALOGS",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Enabled",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 20,
"value": "true",
"variable": "REEMO_ALLOW_FILE_DIALOGS",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Disabled",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 10,
"value": "false",
"variable": "REEMO_ALLOW_FILE_DIALOGS",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": "false",
"editable": true,
"hint": "Lets the user proceed past certificate errors (expired or self-signed). When disabled, those pages cannot be dismissed.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Allow SSL Certificate Override",
"optional": false,
"placeholder": null,
"type": "SELECT",
"uiPriority": 830,
"value": "",
"variable": "REEMO_SSL_ERROR_OVERRIDE",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Enabled",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 20,
"value": "true",
"variable": "REEMO_SSL_ERROR_OVERRIDE",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Disabled",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 10,
"value": "false",
"variable": "REEMO_SSL_ERROR_OVERRIDE",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": "false",
"editable": true,
"hint": "Dark rendering inside the browser only. The desktop itself follows Desktop Appearance above.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Browser Dark Mode",
"optional": false,
"placeholder": null,
"type": "SELECT",
"uiPriority": 820,
"value": "",
"variable": "REEMO_DARK_MODE",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Enabled",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 20,
"value": "true",
"variable": "REEMO_DARK_MODE",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Disabled",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 10,
"value": "false",
"variable": "REEMO_DARK_MODE",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": true,
"hint": "Overrides the browser user agent. Left empty, Chromium uses its own.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "User Agent",
"optional": true,
"placeholder": null,
"type": "STRING",
"uiPriority": 810,
"value": "",
"variable": "REEMO_USER_AGENT",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": true,
"hint": "Name of the bookmarks folder shown in the bar.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Bookmarks Folder Name",
"optional": true,
"placeholder": null,
"type": "STRING",
"uiPriority": 800,
"value": "",
"variable": "REEMO_BOOKMARKS_NAME",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": true,
"hint": "Bookmarks as Name|URL pairs, comma-separated.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Bookmarks",
"optional": true,
"placeholder": "Reemo|https://reemo.io,Docs|https://docs.reemo.io",
"type": "STRING",
"uiPriority": 790,
"value": "",
"variable": "REEMO_BOOKMARKS",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": true,
"hint": "Desktop icons opening a website, as Name|URL pairs, comma-separated.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Desktop Web Shortcuts",
"optional": true,
"placeholder": "Intranet|https://intranet.local",
"type": "STRING",
"uiPriority": 780,
"value": "",
"variable": "REEMO_CHROME_SHORTCUT",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": true,
"hint": "Certificate authority to trust, in PEM format (-----BEGIN CERTIFICATE-----).",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "CA Certificate",
"optional": true,
"placeholder": null,
"type": "TEXT",
"uiPriority": 700,
"value": "",
"variable": "REEMO_CERT",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": true,
"hint": "Client certificate presented to sites requiring one (mTLS), in PEM format.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "User Certificate",
"optional": true,
"placeholder": null,
"type": "TEXT",
"uiPriority": 690,
"value": "",
"variable": "REEMO_USER_CERT",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": true,
"hint": "Private key matching the client certificate above, in PEM format.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "User Key",
"optional": true,
"placeholder": null,
"type": "TEXT",
"uiPriority": 680,
"value": "",
"variable": "REEMO_USER_KEY",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": "5",
"editable": true,
"hint": "Maximum number of screens the user may open. Hard cap: 5.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Monitor Limit",
"optional": false,
"placeholder": null,
"type": "SELECT",
"uiPriority": 500,
"value": "",
"variable": "REEMO_LIMIT_MONITOR",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "5",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 50,
"value": "5",
"variable": "REEMO_LIMIT_MONITOR",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "4",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 40,
"value": "4",
"variable": "REEMO_LIMIT_MONITOR",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "3",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 30,
"value": "3",
"variable": "REEMO_LIMIT_MONITOR",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "2",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 20,
"value": "2",
"variable": "REEMO_LIMIT_MONITOR",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "1",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 10,
"value": "1",
"variable": "REEMO_LIMIT_MONITOR",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": "fr",
"editable": true,
"hint": "Keyboard layout for the session.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Keyboard",
"optional": false,
"placeholder": null,
"type": "SELECT",
"uiPriority": 480,
"value": "",
"variable": "REEMO_KEYMAP",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "French",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 30,
"value": "fr",
"variable": "REEMO_KEYMAP",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "English",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 20,
"value": "us",
"variable": "REEMO_KEYMAP",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Swedish",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 10,
"value": "sv",
"variable": "REEMO_KEYMAP",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": "fr",
"editable": true,
"hint": "Language of the desktop and its applications.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Language",
"optional": false,
"placeholder": null,
"type": "SELECT",
"uiPriority": 470,
"value": "",
"variable": "REEMO_LANGUAGE",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "French",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 20,
"value": "fr",
"variable": "REEMO_LANGUAGE",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "English",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 10,
"value": "en",
"variable": "REEMO_LANGUAGE",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": "Europe/Paris",
"editable": true,
"hint": "Time zone for the session.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Timezone",
"optional": false,
"placeholder": null,
"type": "SELECT",
"uiPriority": 460,
"value": "",
"variable": "REEMO_TIMEZONE",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Europe/Paris",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 30,
"value": "Europe/Paris",
"variable": "REEMO_TIMEZONE",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Europe/London",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 20,
"value": "Europe/London",
"variable": "REEMO_TIMEZONE",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Europe/Stockholm",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 10,
"value": "Europe/Stockholm",
"variable": "REEMO_TIMEZONE",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": "2.0.0",
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "REEMO_TEMPLATE_VERSION",
"optional": false,
"placeholder": null,
"type": "STRING",
"uiPriority": 0,
"value": "",
"variable": "REEMO_TEMPLATE_VERSION",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": "false",
"editable": true,
"hint": "Keeps the user home directory across sessions. Disabled: everything is lost when the session ends.",
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Persistent Session",
"optional": false,
"placeholder": null,
"type": "SELECT",
"uiPriority": 1110,
"value": "",
"variable": "REEMO_PERSISTENT_SESSION",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Enabled",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 20,
"value": "true",
"variable": "REEMO_PERSISTENT_SESSION",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"editable": false,
"hint": null,
"intMax": null,
"intMin": null,
"intStep": null,
"name": "Disabled",
"optional": false,
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 10,
"value": "false",
"variable": "REEMO_PERSISTENT_SESSION",
"volumeAccessMode": null,
"volumeMode": null,
"volumeName": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"volumeStorageClass": null,
"volumeTarget": null
}
],
"links": [],
"usePushNotifications": false,
"assignableToProvider": true,
"os": null,
"vmStartMode": null,
"vmCreationMode": null,
"vmCreationDate": null,
"vmPersistentDisk": true,
"official": false
}
Configuration and Deployment¶
Image Information¶
Image :
registry.reemo.io/reemosblightdesktop:latest
Internal Desktop: XFCE (window manager, desktop icons) and tint2 (taskbar)
Internal Browser: Chromium
Included Applications: ONLYOFFICE, PDF reader, archive manager, KeePass
Choosing Desktop Appearance¶
The Desktop Appearance selector determines what the desktop looks like when the user opens their session.
Option |
Appearance Obtained |
|---|---|
Reemo (default) |
Reemo’s dark desktop: Reemo wallpaper, dark theme, and dark title bars. This is the default appearance of all images in the fleet. |
Windows-like |
Light theme, colorful icon set, blue wallpaper, and light title bars. Choose this for users coming from a Windows workstation and who should not have to relearn where things are. |
Note
This setting changes only the appearance. The applications, desktop icons, and taskbar menu are the same in both cases. The taskbar itself remains dark regardless: it is styled by the platform, not by this setting.
Tip
On a persistent session (see below), the appearance is applied only at first startup. A user who then changes their wallpaper will find it again in subsequent sessions. Changing Desktop Appearance in the form takes control back: the new appearance is reapplied and overwrites the user’s choice. This is an operator instruction, not a suggestion.
Keeping Files Between Sessions¶
By default, a session is disposable: everything the user creates disappears when it closes. Two fields, linked together, change that.
Field |
Description |
|---|---|
Persistent Session |
Disabled (default): nothing is kept. Enabled: makes the following field appear and keeps the user’s home directory. |
Persistent Disk |
The disk mounted on the home directory. Default is 10 GiB. Visible only when Persistent Session is enabled. |
What then survives the end of a session: desktop files, downloads, browser profile (tabs, zoom, permissions), KeePass database, and wallpaper and appearance settings the user chose themselves.
Important
This image serves both use cases, and that’s why the disk is behind a switch: a named workstation that the user finds again each morning, or an ephemeral workstation opened for a task then closed. Choose deliberately — an ephemeral workstation with a persistent disk accumulates indefinitely, a named workstation without a disk loses everything each evening.
Warning
If Persistent Session is enabled but the platform does not actually attach a disk,
the session starts normally and the user loses everything at the end. This case
produces an explicit ERROR line in the container logs at startup: that’s where you
see it, not on screen.
Preparing the User’s Desktop¶
Three optional fields fill the desktop before the user opens their session. They avoid having to ask them to find themselves what they will need.
Field |
Description |
|---|---|
Desktop Folders |
Folders created on the desktop, separated by commas (e.g., Documents,Projects). Letters, numbers, and spaces only: a name containing anything else is ignored, and the log says which. |
Desktop Files (URLs) |
Files downloaded to the desktop at startup, designated by their web addresses separated by commas. Useful for an instruction, a document template, a procedure. |
Desktop Web Shortcuts |
Desktop icons that open a website in one click, in the form Name|URL separated by commas (e.g., Intranet|https://intranet.local). |
Note
A Desktop Files (URLs) address that is unreachable at startup does not prevent the session from opening: the file is missing, and startup is flagged as degraded in the container logs, naming the address in question. On a persistent disk, a file already present is not re-downloaded.
Tip
Web shortcuts are desktop icons, not taskbar menu entries: that menu contains only the five applications, and its content is frozen in the image.
Providing a KeePass Database¶
Field |
Description |
|---|---|
KeePass Database |
KeePass database opened by the desktop icon, base64-encoded. Left empty, KeePass starts without a database and the user creates one. |
Warning
On a persistent session, the database already present on the disk takes precedence over this field: it is never overwritten by the one in the form. This is what prevents losing passwords added by the user each restart — but it also means updating this field does not update a database already in place.
Note
Content that is not valid base64 is refused: no database is written, an ERROR line
says so in the logs, and KeePass opens without a database rather than on a truncated file
and an “invalid database” message.
Choosing the Startup Page and New Tabs¶
Field |
Description |
|---|---|
Start URL / Homepage |
Page loaded when the browser opens, and target of the Home button. Default: https://reemo.io. |
New Tab Page |
Blank page (default): empty tab. Custom URL: makes the following field appear. |
New Tab URL |
Address opened in each new tab. Visible only in Custom URL. |
Tip
For an internal portal, put the same address in Start URL / Homepage and in New Tab URL: the user returns to it both when opening their session and when opening a tab or clicking Home.
Opening Local Files from the Browser¶
Two selectors, often confused, which do not govern the same thing.
Field |
Behavior |
|---|---|
Local File Navigation (file://) |
Disabled (default): file:// addresses are blocked, the browser cannot serve as an explorer of the container. Enabled: it can resolve and display them. |
File Picker Dialogs |
Disabled (default): a site cannot open the “choose a file” dialog. Enabled: it can. |
Tip
File Picker Dialogs is the one to enable so a user can upload a document from their session to a web application. This is the most frequent use case on this image, since the user produces files with ONLYOFFICE.
Warning
Enable Local File Navigation only if a specific use case requires it. Disabled, it prevents the end user from browsing the container’s internal file system from the address bar.
Adjusting Browser Rendering¶
Field |
Description |
|---|---|
Browser Dark Mode |
Disabled (default). Enabled, forces dark rendering inside the browser only. The desktop follows Desktop Appearance above: the two settings are independent. |
Allow SSL Certificate Override |
Disabled (default): a page whose certificate is expired or self-signed cannot be forced by the user. Enabled, they can override. Prefer loading the authority in CA Certificate below rather than opening this door. |
User Agent |
Replaces the browser’s user agent. Left empty, Chromium uses its own. Useful for a web application that refuses a browser it does not recognize. |
Note
A User Agent value containing unexpected characters (notably quotes) is refused outright: the default agent is kept and a warning says so in the logs. The value is not cleaned at best, it is rejected.
Publishing Bookmarks¶
Field |
Description |
|---|---|
Bookmarks |
List of Name|URL pairs separated by commas, e.g., Reemo|https://reemo.io,Docs|https://docs.reemo.io. |
Bookmarks Folder Name |
Name of the folder displayed in the bookmark bar. Default: Bookmarks. |
The folder is pushed by policy: the end user can neither modify nor delete it. Filling Bookmarks at the same time makes the bookmark bar visible; without bookmarks, it remains hidden.
Loading Certificates¶
Three optional fields feed the session’s certificate stores. They are taken into account at startup: modifying one of them requires restarting the session.
Field |
Description |
|---|---|
CA Certificate |
Certification authority to be recognized by the browser, in PEM format. A single field accepts an entire chain: each certificate it contains is installed separately. |
User Certificate |
Client certificate presented by the browser to sites that require one (mTLS), in PEM format. RSA or EC key. |
User Key |
Private key corresponding to the client certificate, in PEM format and unencrypted (no passphrase). |
CA Certificate covers two distinct needs:
internal sites signed by your own authority — without it, the browser displays a security warning that the end user must work around themselves, at each session;
a corporate proxy that inspects TLS traffic — it resigns connections with its own authority, to be declared here in addition to the Upstream Proxy (host:port) field.
User Certificate and User Key always go together: if either field remains empty, nothing is imported.
Note
The three fields expect PEM text, that is, blocks delimited by —–BEGIN CERTIFICATE—–. A binary DER or PFX file must be converted first:
openssl x509 -inform der -in autorite.der -out autorite.pem
openssl pkcs12 -in identite.pfx -clcerts -nokeys -out client.pem
openssl pkcs12 -in identite.pfx -nocerts -noenc -out client.key
Warning
An unreadable certificate or key is ignored, and the session starts anyway. Actual loading is verified in the container logs, where each imported certificate and each rejection are recorded.
Configuring the Session¶
Field |
Description |
|---|---|
Monitor Limit |
Maximum number of screens usable in the session, from 1 to 5. Default: 5. Lower it to curb resource consumption of a large session; it is a ceiling, not a number of screens imposed. |
Keyboard |
Session keyboard layout: French (default), English, Swedish. |
Language |
Desktop and application language: French (default), English. It changes the labels of the desktop, menus, and applications. |
Timezone |
Session timezone: Europe/Paris (default), Europe/London, Europe/Stockholm. It determines the time displayed and the date of files created in the session. |
Note
These four fields are closed lists: the form offers only the values above. A value outside the list is refused and logged, never applied partially — but the fallback is not always the form default: Language falls back to an English interface, and Timezone to UTC.
Usage Guide¶
Opening the Session¶
When the Reemo session opens, the user arrives at a complete desktop. No application is launched: it is they who open the ones they need. No installation or configuration is asked of them.
The Desktop and Its Icons¶
The desktop bears one icon per application, plus a Home Folder icon that opens the file manager, as well as folders, files, and web shortcuts added at deployment.
Icon |
What it opens |
|---|---|
Chromium |
The browser, on the session’s startup page. |
ONLYOFFICE |
The office suite: documents, spreadsheets, presentations. It also opens PDFs. |
PDF Viewer |
The PDF document reader. |
7zip |
The archive manager: ZIP, 7z, XZ, BZ2, GZIP, and TAR, for reading and creation. |
KeePass |
The password manager, on the database provided at deployment if applicable. The selected password is copied to the session clipboard. |
The Taskbar¶
A taskbar is present at the bottom of each screen in the session. It lists the open windows of its screen: a window moved to the second screen appears in that screen’s taskbar, not the other.
The button with the Reemo logo, to the left of the taskbar, opens a menu that lists the five applications: this is the second way to launch them, without having to find the icon under open windows.
Note
This menu contains the five applications and nothing else. Web shortcuts added at deployment remain desktop icons.
Gesture on a window button |
Effect |
|---|---|
Click |
Shows the window, or minimizes it if it is already in the foreground. |
Middle click |
Closes the window. |
Hover |
Shows the full title, useful when it is truncated. |
Drag to another button |
Reorders the windows in the taskbar. |
The window in the foreground is signaled by a purple underline under its button.
Tip
To minimize, maximize, or close a window from a menu, right-click on its title bar.
Working on Multiple Screens¶
The user can open additional screens from their browser, within the limit set by Monitor Limit, and close them during the session. Each screen gets its own taskbar and the session wallpaper as soon as it appears.
Transferring Files¶
When file transfer is enabled for the session, the image exposes a transfer directory accessible from the Files menu of the Reemo browser. This directory is also the browser’s download folder: a file downloaded in the session is placed directly there, ready to be retrieved on the workstation.
Warning
On a non-persistent session, this directory is ephemeral like the rest. Remember to retrieve your files to your local workstation before closing the session.
What Remains Between Sessions¶
Element |
Persistent Session |
Disposable Session |
|---|---|---|
Desktop files and folders |
Kept |
Lost |
Downloads |
Kept |
Lost |
Browser profile (tabs, zoom, permissions) |
Kept |
Lost |
KeePass database |
Kept |
Lost |
User-chosen wallpaper and appearance |
Kept |
Lost |
Folders, files, and shortcuts from deployment |
Recreated at each startup |
Recreated at each startup |
Security Constraints¶
The browser is locked down permanently. This is not a deployment option: the following restrictions apply to all sessions.
No access to browser configuration: settings pages, the extensions manager, and internal pages chrome:// and about:// are inaccessible.
No developer tools: console and inspector are disabled.
Extensions locked: no extension can be installed by the end user.
Functions disabled: account synchronization, built-in password manager, browsing history, printing, private browsing, search suggestions, and telemetry.
Local file navigation refused by default: file:// addresses are blocked unless a deployment explicitly allows them.
Important
The lockdown applies to the browser. This image delivers a desktop: the user has applications that read and write files, and a file manager. It is made to provide a workstation, not to confine a user to a single application — if that is the need, it is the HTTPS Bastion that should be deployed.
Changelog¶
v1.0.0 (2026-09-22)¶
First public release of the Light Desktop Reemo image: a complete Linux desktop delivered in the browser through Reemo, with a web browser, an office suite, a PDF viewer, an archive manager and a password manager already installed. Unlike the other images in the catalogue, which publish a single application, what this one delivers is the desktop itself: the user opens the applications they need, arranges their windows and keeps their files.
Added
A ready-to-use desktop in the browser. The session opens on a desktop with a taskbar and five applications the user launches from an icon or from the taskbar menu: a web browser, the ONLYOFFICE suite (documents, spreadsheets, presentations), a PDF viewer, an archive manager that opens ZIP, 7z, XZ, BZ2, GZIP and TAR, and the KeePass password manager. Nothing is installed on the user’s workstation, and no application is imposed at startup: the desktop is what the session serves.
A home directory that survives the session. A deployment can attach a persistent disk to the user’s home directory. Desktop files, downloads, the browser profile and the KeePass database are then found again at the next session, along with the wallpaper and the desktop settings the user chose themselves. Left off, the session is disposable and everything is released when it ends. When a disk is promised but the platform does not attach one, the container logs say so at startup rather than letting the session run and lose its contents at the end.
A choice of desktop appearance. Two looks are available: the Reemo appearance, dark, which is the default, and a Windows-like appearance with a light theme, a matching icon set and a blue wallpaper — for users moving over from a Windows workstation who should not have to relearn where things are.
A desktop prepared for the user before they arrive. A deployment can create folders on the desktop, place files there by giving their web addresses, add icons that open a website in one click, and supply the KeePass database the session opens. An existing database on a persistent disk is never overwritten by the one declared at deployment.
A locked-down browser. The browser cannot be reconfigured or repurposed by the end user: the settings pages, the extension manager, the internal browser pages and the developer tools are unreachable, and browsing local files through
file://addresses is refused unless a deployment enables it explicitly. Sync, the built-in password manager, browsing history, printing, private browsing, search suggestions and telemetry are disabled.Website filtering, allowlist or blocklist. The session can be turned into a filtered gateway: either everything is blocked except the websites you list, or everything is allowed except those you list. Filtering applies to any navigation, including a link followed from inside a page, and a refused address shows a block page instead of loading. Alternatively, all browser traffic can be routed through an existing corporate proxy, with a list of hosts reached directly.
Managed bookmarks and a start page. A read-only bookmarks folder can be pushed into the browser bar, under a name of your choosing, and the page the browser opens on — as well as what a new tab shows — is chosen at deployment.
Certificates supplied at deployment. A deployment can hand the session a certificate authority to trust, so internal sites signed by your own authority — or reached through a proxy that inspects TLS — open without a security warning for the end user. A client certificate and its key can be supplied the same way, which the browser presents to sites that require one. Material that cannot be read is reported in the container logs rather than silently dropped.
A multi-screen desktop. The session can use up to five screens, added or removed on the fly during the session, each with its own taskbar and the correct wallpaper as soon as it appears. The maximum number of screens is set at deployment.
Downloads within reach. What the browser downloads lands in the folder the session exposes for file transfer, ready to be retrieved on the user’s workstation, instead of somewhere the transfer cannot see.
Keyboard layout, language and time zone chosen at deployment. The desktop and its applications follow the language selected, the keyboard matches the user’s own, and timestamps are in the right time zone.
Versions¶
Images published on registry.reemo.io/reemosblightdesktop.
Each build exposes these pullable tags:
Latest (
:latest) – the latest published releaseRelease (
:vX.Y.Z) – always tracks the latest build of this versionBuild (
:vX.Y.Z-N) – a specific, frozen weekly buildImage (
:<id>) – immutable reference to this exact build
Example: docker pull registry.reemo.io/reemosblightdesktop:vX.Y.Z-N
v1.0.0-1 (2026-09-22)