https://github.com/junkerderprovinz/krusader
Krusader twin-panel file manager for Unraid — fast KasmVNC web desktop with native Dark Mode, Kate, krename and RAR support.
https://github.com/junkerderprovinz/krusader
community-applications docker file-manager ghcr kasmvnc kde krusader self-hosted unraid
Last synced: about 2 months ago
JSON representation
Krusader twin-panel file manager for Unraid — fast KasmVNC web desktop with native Dark Mode, Kate, krename and RAR support.
- Host: GitHub
- URL: https://github.com/junkerderprovinz/krusader
- Owner: junkerderprovinz
- License: mit
- Created: 2026-05-08T22:38:22.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-06-11T10:33:19.000Z (about 2 months ago)
- Last Synced: 2026-06-11T12:15:18.876Z (about 2 months ago)
- Topics: community-applications, docker, file-manager, ghcr, kasmvnc, kde, krusader, self-hosted, unraid
- Language: Dockerfile
- Homepage: https://github.com/junkerderprovinz/krusader
- Size: 1.62 MB
- Stars: 3
- Watchers: 0
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Notice: NOTICE
Awesome Lists containing this project
README
A modern, plug-and-play Docker image for Krusader on Unraid. Twin-pane file
management in your browser, powered by KasmVNC, with Dark Mode, Kate as
external editor, full archive support and 25 UI languages — all configurable
from the Unraid template, no SSH or config-file editing required.
## Table of Contents
1. [Overview](#1-overview)
2. [Screenshots](#2-screenshots)
3. [Quick Start](#3-quick-start)
4. [Configuration](#4-configuration)
5. [Languages](#5-languages)
6. [Right-Click Actions](#6-right-click-actions)
7. [Customisation & Persistence](#7-customisation--persistence)
8. [Building Locally](#8-building-locally)
9. [Updating](#9-updating)
10. [Troubleshooting](#10-troubleshooting)
11. [Architecture](#11-architecture)
12. [Contributing / License](#12-contributing--license)
13. [Support this project](#13-support-this-project)
## 1. Overview
This image packages [Krusader](https://krusader.org) — KDE's twin-pane file manager — into a self-contained Docker container that runs in any modern web browser. It is built on top of [`linuxserver/baseimage-kasmvnc`](https://github.com/linuxserver/docker-baseimage-kasmvnc), so it benefits from LSIO's hardware-accelerated KasmVNC stack and weekly security updates, while everything Krusader-specific (theme, archive tools, right-click actions, language packs, default configs) is layered on top in this repo.
What's included beyond bare Krusader:
- **KasmVNC** instead of noVNC — hardware-accelerated rendering, real browser clipboard, native file upload and download, high-DPI ready
- **Dark Mode** pre-applied to Krusader, Kate and the whole KDE stack; switch to light with one variable
- **Kate** wired up as Krusader's external editor, also Dark Mode, with spell-check
- **krename** — KDE's batch-rename dialog bundled; rename hundreds of files at once using regex, counters, case transforms and metadata patterns
- **Full archive support** — RAR, 7z, ZIP, TAR, GZ, BZ2, XZ, LHA, ARJ, ACE, RPM, CPIO; right-click "Extract RAR here" works out of the box
- **25 UI languages** picked from a dropdown in the Unraid template
- **Update-safe configs** — first-run-only seeding, your customisations in `/config` survive every `docker pull`
- **Multi-arch** — amd64 and arm64
| | **This image** | binhex | jlesage | ich777 |
|---|:---:|:---:|:---:|:---:|
| Web stack | **KasmVNC** | noVNC | noVNC | noVNC |
| HW-accelerated rendering | ✅ | ❌ | ❌ | ❌ |
| Browser clipboard | ✅ | ⚠️ | ⚠️ | ⚠️ |
| File upload via WebUI | ✅ | ❌ | ❌ | ❌ |
| Dark Mode default | ✅ | ❌ | ❌ | ❌ |
| Kate as editor | ✅ | ❌ | ❌ | ❌ |
| Batch rename (krename) | ✅ | ❌ | ❌ | ❌ |
| RAR right-click | ✅ | ❌ | ❌ | ❌ |
| Language dropdown | ✅ (25) | ❌ | ❌ | ❌ |
| Multi-arch | ✅ amd64 + arm64 | amd64 | ✅ | amd64 |
| Base | LinuxServer | binhex/Arch | jlesage/Alpine | ich777/Debian |
## 2. Screenshots
Twin-pane file manager — Dark Mode, F-key shortcuts, in-browser via KasmVNC.
Configurator → Colors: full control over panel foreground / background / selection.
## 3. Quick Start
### Step 1 — Install the template
On Unraid: **Apps** → search for **Krusader** → click **Install**. The Community Applications
template is published from the
[`unraid-docker-templates`](https://github.com/junkerderprovinz/unraid-docker-templates) feed
(one feed for all of junkerderprovinz's apps).
To load it by hand, pull it into Unraid's user-template folder via the console / SSH:
```bash
mkdir -p /boot/config/plugins/dockerMan/templates-user && \
curl -fsSL -o /boot/config/plugins/dockerMan/templates-user/my-Krusader.xml \
https://raw.githubusercontent.com/junkerderprovinz/unraid-docker-templates/main/krusader/krusader.xml
```
### Step 2 — Add the container
In the Unraid Web UI: **Docker** tab → **Add Container** → in the **Template** dropdown, pick **Krusader** under *User templates*. All fields are pre-filled.
### Step 3 — Adjust paths and start
The defaults work out of the box, but you may want to tweak:
- **Storage (`/storage`)** — defaults to `/mnt`, which exposes all shares and disks. Restrict to e.g. `/mnt/user` if you want.
- **UI Language** — dropdown, default `de`.
- **Theme** — `dark` or `light`.
- **KasmVNC Password** — leave empty for LAN-only, set anything for exposure beyond the LAN.
Hit **Apply**. The first start takes 30–60 seconds while the container seeds its config and KasmVNC generates a self-signed certificate.
### Step 4 — Open the WebUI
`https://:3001/` (HTTPS, self-signed — accept the certificate once). **Use HTTPS:** browsers only allow seamless clipboard sync over HTTPS, so the template's WebUI button points here. `http://:3000/` is an optional fallback without clipboard support.
> Once Community Applications has accepted this image it will also be installable via **Apps** → search `Krusader`.
Plain Docker (no Unraid)
```bash
docker run -d \
--name krusader \
--restart unless-stopped \
--shm-size=1gb \
-p 3000:3000 -p 3001:3001 \
-e PUID=99 -e PGID=100 \
-e TZ=Europe/Vienna \
-e KRUSADER_LANG=de \
-e KRUSADER_THEME=dark \
-v /mnt/user/appdata/krusader:/config \
-v /mnt:/storage \
junkerderprovinz/krusader:latest
```
**`--shm-size=1gb`** is required for smooth KDE rendering. The Unraid template sets it for you.
## 4. Configuration
| Variable | Default | Description |
|---|---|---|
| `PUID` | `99` | User ID — Unraid's *nobody* |
| `PGID` | `100` | Group ID — Unraid's *users* |
| `TZ` | `Etc/UTC` | Timezone, e.g. `Europe/Vienna` |
| `KRUSADER_LANG` | `de` | UI language — see [Languages](#5-languages) |
| `KRUSADER_THEME` | `dark` | `dark` (Dark Mode) or `light` (Breeze) |
| `CUSTOM_USER` | `abc` | KasmVNC HTTP-basic-auth username |
| `PASSWORD` | *(empty)* | KasmVNC password — **set this if exposed beyond LAN** |
| `TITLE` | `Krusader` | Browser tab / KasmVNC top-bar title |
| `UMASK` | `022` | File-creation mask |
| Port | Purpose | | Volume | Purpose |
|---|---|---|---|---|
| `3001` | KasmVNC HTTPS *(self-signed)* — **default WebUI, needed for clipboard** | | `/config` | Persistent KDE / Krusader / Kate configs |
| `3000` | KasmVNC HTTP *(optional fallback)* | | `/storage` | Files to manage — default host `/mnt` |
## 5. Languages
The Unraid template ships a **dropdown** with **25 UI languages** (German default, plus `system` fallback). Each language has its `language-pack-` and `language-pack-kde-` baked in — switching is instant after a restart.
| Region | Languages |
|---|---|
| **Western Europe** | 🇩🇪 `de` Deutsch · 🇬🇧 `en` English · 🇫🇷 `fr` Français · 🇪🇸 `es` Español · 🇮🇹 `it` Italiano · 🇵🇹 `pt` Português · 🇳🇱 `nl` Nederlands · 🇪🇸 `ca` Català · 🇪🇸 `eu` Euskara · 🇮🇪 `ga` Gaeilge |
| **Northern Europe** | 🇩🇰 `da` Dansk · 🇸🇪 `sv` Svenska · 🇳🇴 `nb` Norsk Bokmål · 🇫🇮 `fi` Suomi · 🇮🇸 `is` Íslenska |
| **Central / Eastern Europe** | 🇵🇱 `pl` Polski · 🇨🇿 `cs` Čeština · 🇸🇰 `sk` Slovenčina · 🇭🇺 `hu` Magyar · 🇷🇴 `ro` Română · 🇸🇮 `sl` Slovenščina · 🇭🇷 `hr` Hrvatski · 🇷🇸 `sr` Српски · 🇧🇬 `bg` Български · 🇺🇦 `uk` Українська · 🇷🇺 `ru` Русский · 🇬🇷 `el` Ελληνικά |
| **Middle East** | 🇹🇷 `tr` Türkçe · 🇮🇱 `he` עברית · 🇸🇦 `ar` العربية |
| **Asia / CJK** | 🇯🇵 `ja` 日本語 · 🇰🇷 `ko` 한국어 · 🇨🇳 `zh` 中文 |
| **Fallback** | `system` — use the container's default locale |
*Default: `de` (Deutsch). Set via `KRUSADER_LANG` or the Unraid dropdown.*
> **How it works:** Unraid renders any `a|b|c` value with at least one `|` as a native `` dropdown. The cont-init hook re-applies the language on every start.
## 6. Right-Click Actions
Krusader's *UserActions* are pre-loaded with extras:
| Action | Command |
|---|---|
| **Extract RAR here** | `unrar x -o+` into the current directory |
| **Extract RAR to subfolder** | Same, but into a folder named after the archive |
| **Open with Kate** | Opens the selected file(s) in Kate |
| **Open Konsole here** | New Konsole tab in the current directory |
> For generic archive extraction (7z, ZIP, TAR, …) use Ark's built-in right-click menu — it is already installed and avoids a duplicate "Extract" entry in the context menu.
Edit them via *Krusader → Settings → Configure UserActions*, or directly at `/config/.local/share/krusader/useractions.xml`.
## 7. Customisation & Persistence
On the **first start only**, the container seeds defaults from `/defaults/` into `/config/`:
```
/config/
├── .config/
│ ├── kdeglobals # KDE color scheme + Dark Mode
│ ├── krusaderrc # Editor=kate, theme, panel layout
│ └── katerc # Kate Dark Mode
└── .local/share/krusader/
└── useractions.xml # right-click actions
```
A marker file `/config/.krusader-firstrun.done` is written so subsequent container starts **never overwrite your customisations**. To re-seed defaults, delete the marker and restart.
The two env-driven knobs (`KRUSADER_LANG`, `KRUSADER_THEME`) are re-applied on **every** start via a `cont-init.d` hook, so you can flip them freely.
The base image also supports `/config/custom-cont-init.d/` for your own init scripts — see the [LinuxServer docs](https://docs.linuxserver.io/general/container-customization/).
## 8. Building Locally
```bash
git clone https://github.com/junkerderprovinz/krusader.git
cd krusader
# amd64 only (your local arch)
docker build -t krusader:dev .
# Multi-arch (amd64 + arm64) – needs buildx
docker buildx build --platform linux/amd64,linux/arm64 -t krusader:dev --load .
# Test run
docker run --rm -it \
-p 3000:3000 \
-v "$PWD/.dev-config:/config" \
-v "$PWD:/storage" \
krusader:dev
```
## 9. Updating
```bash
docker pull junkerderprovinz/krusader:latest
docker stop krusader && docker rm krusader
# re-create with the same template / docker run args
```
On Unraid: **Docker** tab → click the container → **Force Update**. Your `/config` is untouched.
> The image is rebuilt **weekly** via GitHub Actions for upstream KasmVNC, Ubuntu and KDE patches.
## 10. Troubleshooting
WebUI is black / desktop never appears
- Make sure `--shm-size` is at least `512mb` (Unraid template sets `1gb`)
- Check the container log for KasmVNC startup errors
- Try opening on `https://:3001/` (self-signed) — sometimes browsers block ws over plain http
- Wait 30–60 seconds on first start; KDE caches need to be built once
WebUI is unreachable
- Check the host port isn't already taken: `netstat -tlnp | grep 3000`
- Disable the host firewall briefly to rule it out
- Verify the container is listening: `docker exec krusader ss -tlnp`
- Confirm the network is `bridge` (or `host`), not a custom `br0` whose IP isn't reachable from your client
Right-click "Extract RAR here" does nothing
- Open a Konsole inside the container: `which unrar` should print `/usr/bin/unrar`. If empty, file an issue.
Language change doesn't take effect
- Restart the container — language is applied at start, not live
- Check the env value matches a code from the [Languages](#5-languages) table
- The script writes `/etc/profile.d/zz-krusader-lang.sh` and updates `kdeglobals[Translations]`
Files outside /storage not visible
- That's by design. Map another path: `-v /mnt/disks/somepool:/storage/somepool`
"Permission denied" on /storage/...
- Check `PUID` / `PGID`. On Unraid, `99:100` (nobody:users) match share permissions.
KasmVNC password not accepted
- Open in a private window once — your browser may have cached old credentials.
Container fails to start — "mkdir /etc/localtime: file exists"
You have a `/etc/localtime:/etc/localtime:ro` bind-mount configured (e.g. from an old template version). The LSIO base image manages `/etc/localtime` internally as a symlink; a bind-mount on top causes the conflict.
**Fix:** Remove the `/etc/localtime` path mapping from your container settings and use the `TZ` environment variable instead (e.g. `TZ=Europe/Vienna`). The `TZ` variable is the correct and supported way to set the timezone in LSIO-based containers.
Bottom status bar reappears after a restart (known limitation)
Krusader **2.8.1 does not persist the bottom (KDE) status bar's visibility**. Even with `[Startup] Show statusbar=false` in `krusaderrc` the bar is shown again on the next start, and Krusader only saves such UI state on a *clean* exit — which a hard `docker stop` never performs. The container can't force-hide it either: the only reliable mechanism (a Qt application stylesheet) also disables Krusader's **custom status-bar colours**, which are deliberately kept user-configurable.
**Workaround:** hide it per session via **View → Show Statusbar**. The per-panel (upper) status bar with the free-space / device info is unaffected and stays fully configurable.
## 11. Architecture
```
┌─────────────────────────────────────────────────────────────────┐
│ ghcr.io/linuxserver/baseimage-kasmvnc:ubuntunoble │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ s6-overlay v3 init │ │
│ │ ↓ │ │
│ │ s6-rc.d/init-krusader/run │ │
│ │ ↓ seeds /config from /defaults (first run only) │ │
│ │ ↓ sets theme, locale → s6 container environment │ │
│ │ ↓ │ │
│ │ KasmVNC ← /defaults/autostart │ │
│ │ → dbus-launch krusader-session │ │
│ │ → ksmserver (KDE session manager) │ │
│ │ → krusader │ │
│ └───────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
```
## 12. Contributing / License
Pull requests welcome. Issues: .
**Licensing — dual:**
- This **wrapper repository** (Dockerfile, `rootfs/`, scripts, Unraid templates, README and banner/icon artwork) is licensed under the [MIT License](LICENSE).
- **Krusader itself** and the bundled KDE / Qt / KasmVNC / unrar / LSIO base-image components retain their upstream licenses (mostly GPL-2.0+ / GPL-3.0+ / LGPL-2.1+, plus unrar's non-free terms). When you run, redistribute or rebuild the resulting container image, you must comply with **all** of those licenses, not only with this wrapper's MIT license. See the `LICENSE` file for the full notice.
```bash
# Run lints locally (CI runs them too)
docker run --rm -i hadolint/hadolint < Dockerfile
docker run --rm -v "$PWD:/mnt" koalaman/shellcheck:stable rootfs/etc/cont-init.d/* rootfs/usr/local/bin/*
xmllint --noout unraid-template.xml ca_profile.xml
```
### Credits
- [**Krusader**](https://krusader.org) — KDE community, the actual file manager
- [**LinuxServer.io**](https://www.linuxserver.io) — for the excellent [`baseimage-kasmvnc`](https://github.com/linuxserver/docker-baseimage-kasmvnc)
- [**KasmVNC**](https://github.com/kasmtech/KasmVNC) — for finally fixing remote-desktop-in-a-browser
- [**Kate**](https://kate-editor.org) — best lightweight editor on Linux
- Inspiration: binhex, jlesage and ich777 Krusader containers — they paved the way
## 13. Support this project
If this template saves you a setup hassle or a debug night, consider buying me a coffee: