KasmVNC Base Images from LinuxServer¶
The purpose of these images is to provide a full featured web native Linux desktop experience for any Linux application or desktop environment. These images replace our old base images at Rdesktop Web for greatly increased performance, fidelity, and feature set. They ship with passwordless sudo to allow easy package installation, testing, and customization. By default they have no logic to mount out anything but the users home directory, meaning on image updates anything outside of /config
will be lost.
These images contain the following services:
- KasmVNC - The core technology for interacting with a containerized desktop from a web browser.
- Kclient - NodeJS Iframe wrapper for KasmVNC providing audio and file access.
- NGINX - Used to serve the mix of KasmVNC and Kclient with the appropriate headers and provide basic auth.
- Docker - Can be used for interacting with a mounted in Docker socket or if the container is run in privileged mode will start a DinD setup.
- PulseAudio - Sound subsystem used to capture audio from the active desktop session and send it to the browser via the Kclient helper application.
Options¶
Authentication for these containers is included as a convenience and to keep in sync with the previous xrdp containers they replace. We use bash to substitute in settings user/password and some strings might break that. In general this authentication mechanism should be used to keep the kids out not the internet
If you are looking for a robust secure application gateway please check out SWAG.
All application settings are passed via environment variables:
Variable | Description |
---|---|
CUSTOM_PORT | Internal port the container listens on for http if it needs to be swapped from the default 3000. |
CUSTOM_HTTPS_PORT | Internal port the container listens on for https if it needs to be swapped from the default 3001. |
CUSTOM_USER | HTTP Basic auth username, abc is default. |
PASSWORD | HTTP Basic auth password, abc is default. If unset there will be no auth |
SUBFOLDER | Subfolder for the application if running a subfolder reverse proxy, need both slashes IE /subfolder/ |
TITLE | The page title displayed on the web browser, default "KasmVNC Client". |
FM_HOME | This is the home directory (landing) for the file manager, default "/config". |
START_DOCKER | If set to false a container with privilege will not automatically start the DinD Docker setup. |
DRINODE | If mounting in /dev/dri for DRI3 GPU Acceleration allows you to specify the device to use |
DISABLE_DRI | When using privilged mode or mounting in a video card, do not attempt to use it for DRI3 acceleration in KasmVNC |
DISABLE_IPV6 | If set to true or any value this will disable IPv6 |
LC_ALL | Set the Language for the container to run as IE fr_FR.UTF-8 ar_AE.UTF-8 |
NO_DECOR | If set the application will run without window borders for use as a PWA. (Decor can be enabled and disabled with Ctrl+Shift+d) |
NO_FULL | Do not autmatically fullscreen applications when using openbox. |
Language Support - Internationalization¶
The environment variable LC_ALL
can be used to start this image in a different language than English simply pass for example to launch the Desktop session in French LC_ALL=fr_FR.UTF-8
. Some languages like Chinese, Japanese, or Korean will be missing fonts needed to render properly known as cjk fonts, but others may exist and not be installed. We only ensure fonts for Latin characters are present. Fonts can be installed with a mod on startup.
To install cjk fonts on startup as an example pass the environment variables(Alpine):
-e DOCKER_MODS=linuxserver/mods:universal-package-install
-e INSTALL_PACKAGES=font-noto-cjk
-e LC_ALL=zh_CN.UTF-8
-
The web interface has the option for "IME Input Mode" in Settings which will allow non english characters to be used from a non en_US keyboard on the client. Once enabled it will perform the same as a local Linux installation set to your locale.
Available Distros¶
All base images are built for x86_64 and aarch64 platforms.
Distro | Current Tag |
---|---|
Alpine | alpine320 |
Arch | arch |
Debian | debianbookworm |
Fedora | fedora39 |
Fedora | fedora40 |
Ubuntu | ubuntujammy |
Ubuntu | ubuntunoble |
PRoot Apps¶
All images include proot-apps which allow portable applications to be installed to persistent storage in the user's $HOME
directory. These applications and their settings will persist upgrades of the base container and can be mounted into different flavors of KasmVNC containers. IE if you are running an Alpine based container you will be able to use the same /config
directory mounted into a Debian based container and retain the same applications and settings as long as they were installed with proot-apps install
.
A list of linuxserver.io supported applications is located HERE.
I like to read documentation¶
Building images¶
Application containers¶
Included in these base images is a simple Openbox DE and the accompanying logic needed to launch a single application. Lets look at the bare minimum needed to create an application container starting with a Dockerfile:
The web interface has the option for "IME Input Mode" in Settings which will allow non english characters to be used from a non en_US keyboard on the client. Once enabled it will perform the same as a local Linux installation set to your locale.
Available Distros¶
All base images are built for x86_64 and aarch64 platforms.
Distro | Current Tag |
---|---|
Alpine | alpine321 |
Arch | arch |
Debian | debianbookworm |
Fedora | fedora40 |
Kali | kali |
Ubuntu | ubuntujammy |
Ubuntu | ubuntunoble |
PRoot Apps¶
All images include proot-apps which allow portable applications to be installed to persistent storage in the user's $HOME
directory. These applications and their settings will persist upgrades of the base container and can be mounted into different flavors of KasmVNC containers. IE if you are running an Alpine based container you will be able to use the same /config
directory mounted into a Debian based container and retain the same applications and settings as long as they were installed with proot-apps install
.
A list of linuxserver.io supported applications is located HERE.
I like to read documentation¶
Building images¶
Application containers¶
Included in these base images is a simple Openbox DE and the accompanying logic needed to launch a single application. Lets look at the bare minimum needed to create an application container starting with a Dockerfile:
And we can define the application to start using:
mkdir -p root/defaults
@@ -40,4 +40,4 @@
- driver: nvidia
count: 1
capabilities: [compute,video,graphics,utility]
-
The following line is only in this repo for loop testing: - { date: "01.01.50:", desc: "I am the release message for this internal repo." }