diff --git a/.github/ISSUE_TEMPLATE/issue.bug.yml b/.github/ISSUE_TEMPLATE/issue.bug.yml
new file mode 100644
index 0000000..ce3d19a
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/issue.bug.yml
@@ -0,0 +1,76 @@
+# Based on the issue template
+name: Bug report
+description: Create a report to help us improve
+title: "[BUG]
"
+labels: [Bug]
+body:
+ - type: checkboxes
+ attributes:
+ label: Is there an existing issue for this?
+ description: Please search to see if an issue already exists for the bug you encountered.
+ options:
+ - label: I have searched the existing issues
+ required: true
+ - type: textarea
+ attributes:
+ label: Current Behavior
+ description: Tell us what happens instead of the expected behavior.
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Expected Behavior
+ description: Tell us what should happen.
+ validations:
+ required: false
+ - type: textarea
+ attributes:
+ label: Steps To Reproduce
+ description: Steps to reproduce the behavior.
+ placeholder: |
+ 1. In this environment...
+ 2. With this config...
+ 3. Run '...'
+ 4. See error...
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Environment
+ description: |
+ examples:
+ - **OS**: Ubuntu 20.04
+ - **How docker service was installed**: distro's packagemanager
+ value: |
+ - OS:
+ - How docker service was installed:
+ render: markdown
+ validations:
+ required: false
+ - type: dropdown
+ attributes:
+ label: CPU architecture
+ options:
+ - x86-64
+ - arm64
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Docker creation
+ description: |
+ Command used to create docker container
+ Provide your docker create/run command or compose yaml snippet, or a screenshot of settings if using a gui to create the container
+ render: bash
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ description: |
+ Provide a full docker log, output of "docker logs linuxserver.io"
+ label: Container logs
+ placeholder: |
+ Output of `docker logs linuxserver.io`
+ render: bash
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/issue.feature.yml b/.github/ISSUE_TEMPLATE/issue.feature.yml
new file mode 100644
index 0000000..099dcdb
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/issue.feature.yml
@@ -0,0 +1,31 @@
+# Based on the issue template
+name: Feature request
+description: Suggest an idea for this project
+title: "[FEAT] "
+labels: [enhancement]
+body:
+ - type: checkboxes
+ attributes:
+ label: Is this a new feature request?
+ description: Please search to see if a feature request already exists.
+ options:
+ - label: I have searched the existing issues
+ required: true
+ - type: textarea
+ attributes:
+ label: Wanted change
+ description: Tell us what you want to happen.
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Reason for change
+ description: Justify your request, why do you want it, what is the benefit.
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Proposed code change
+ description: Do you have a potential code change in mind?
+ validations:
+ required: false
diff --git a/.github/workflows/call_invalid_helper.yml b/.github/workflows/call_invalid_helper.yml
new file mode 100644
index 0000000..773767c
--- /dev/null
+++ b/.github/workflows/call_invalid_helper.yml
@@ -0,0 +1,12 @@
+name: Comment on invalid interaction
+on:
+ issues:
+ types:
+ - labeled
+jobs:
+ add-comment-on-invalid:
+ if: github.event.label.name == 'invalid'
+ permissions:
+ issues: write
+ uses: linuxserver/github-workflows/.github/workflows/invalid-interaction-helper.yml@v1
+ secrets: inherit
diff --git a/.github/workflows/external_trigger.yml b/.github/workflows/external_trigger.yml
index bf1eec0..0ac707d 100644
--- a/.github/workflows/external_trigger.yml
+++ b/.github/workflows/external_trigger.yml
@@ -7,7 +7,7 @@ jobs:
external-trigger-master:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2.3.3
+ - uses: actions/checkout@v3.1.0
- name: External Trigger
if: github.ref == 'refs/heads/master'
diff --git a/.github/workflows/external_trigger_scheduler.yml b/.github/workflows/external_trigger_scheduler.yml
index 5ac47cb..a93ce4b 100644
--- a/.github/workflows/external_trigger_scheduler.yml
+++ b/.github/workflows/external_trigger_scheduler.yml
@@ -9,7 +9,7 @@ jobs:
external-trigger-scheduler:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2.3.3
+ - uses: actions/checkout@v3.1.0
with:
fetch-depth: '0'
diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml
index 7dd6442..132e408 100644
--- a/.github/workflows/greetings.yml
+++ b/.github/workflows/greetings.yml
@@ -8,6 +8,6 @@ jobs:
steps:
- uses: actions/first-interaction@v1
with:
- issue-message: 'Thanks for opening your first issue here! Be sure to follow the [bug](https://github.com/linuxserver/docker-kasm/blob/master/.github/ISSUE_TEMPLATE/issue.bug.md) or [feature](https://github.com/linuxserver/docker-kasm/blob/master/.github/ISSUE_TEMPLATE/issue.feature.md) issue templates!'
+ issue-message: 'Thanks for opening your first issue here! Be sure to follow the [bug](https://github.com/linuxserver/docker-kasm/blob/master/.github/ISSUE_TEMPLATE/issue.bug.yml) or [feature](https://github.com/linuxserver/docker-kasm/blob/master/.github/ISSUE_TEMPLATE/issue.feature.yml) issue templates!'
pr-message: 'Thanks for opening this pull request! Be sure to follow the [pull request template](https://github.com/linuxserver/docker-kasm/blob/master/.github/PULL_REQUEST_TEMPLATE.md)!'
repo-token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/package_trigger.yml b/.github/workflows/package_trigger.yml
index b956bfe..2038ac7 100644
--- a/.github/workflows/package_trigger.yml
+++ b/.github/workflows/package_trigger.yml
@@ -7,7 +7,7 @@ jobs:
package-trigger-master:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2.3.3
+ - uses: actions/checkout@v3.1.0
- name: Package Trigger
if: github.ref == 'refs/heads/master'
diff --git a/.github/workflows/package_trigger_scheduler.yml b/.github/workflows/package_trigger_scheduler.yml
index 9a7744f..5fe5aac 100644
--- a/.github/workflows/package_trigger_scheduler.yml
+++ b/.github/workflows/package_trigger_scheduler.yml
@@ -9,7 +9,7 @@ jobs:
package-trigger-scheduler:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2.3.3
+ - uses: actions/checkout@v3.1.0
with:
fetch-depth: '0'
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
index 3b3846e..73dfe45 100644
--- a/.github/workflows/stale.yml
+++ b/.github/workflows/stale.yml
@@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/stale@v3
+ - uses: actions/stale@v6.0.1
with:
stale-issue-message: "This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions."
stale-pr-message: "This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions."
diff --git a/Dockerfile b/Dockerfile
index d2f9b12..5bff5c5 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM ghcr.io/linuxserver/baseimage-alpine:3.16
+FROM ghcr.io/linuxserver/baseimage-ubuntu:jammy
# set version label
ARG BUILD_DATE
@@ -11,40 +11,47 @@ LABEL maintainer="thelamer"
ENV DOCKER_TLS_CERTDIR=""
ENV TINI_SUBREAPER=true
+#Add needed nvidia environment variables for https://github.com/NVIDIA/nvidia-docker
+ENV NVIDIA_DRIVER_CAPABILITIES="compute,graphics,video,utility" \
+ VERSION="develop"
+
# Container setup
RUN \
- echo "**** install build packages ****" && \
- apk add --no-cache --virtual=build-dependencies \
- alpine-sdk \
- npm && \
echo "**** install packages ****" && \
- apk add --no-cache \
- bash \
+ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
+ echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu jammy stable" > \
+ /etc/apt/sources.list.d/docker.list && \
+ curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
+ gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg && \
+ curl -s -L https://nvidia.github.io/libnvidia-container/ubuntu22.04/libnvidia-container.list | \
+ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
+ tee /etc/apt/sources.list.d/nvidia-container-toolkit.list && \
+ curl -fsSL https://deb.nodesource.com/setup_16.x | bash - && \
+ apt-get install -y --no-install-recommends \
btrfs-progs \
- ca-certificates \
- coreutils \
- curl \
- docker \
- docker-cli-compose \
+ containerd.io \
+ docker-ce \
+ docker-ce-cli \
+ docker-compose-plugin \
+ drm-info \
e2fsprogs \
- e2fsprogs-extra \
- findutils \
fuse-overlayfs \
- ip6tables \
+ g++ \
+ gcc \
iptables \
jq \
+ make \
nodejs \
+ nvidia-docker2 \
openssl \
pigz \
python3 \
- shadow-uidmap \
sudo \
- xfsprogs \
- xz \
- zfs && \
+ uidmap \
+ xfsprogs && \
echo "**** dind setup ****" && \
- addgroup -S dockremap && \
- adduser -S -G dockremap dockremap && \
+ useradd -U dockremap && \
+ usermod -G dockremap dockremap && \
echo 'dockremap:165536:65536' >> /etc/subuid && \
echo 'dockremap:165536:65536' >> /etc/subgid && \
curl -o \
@@ -58,6 +65,7 @@ RUN \
KASM_VERSION=$(curl -sX GET 'https://api.github.com/repos/kasmtech/kasm-install-wizard/releases/latest' \
| jq -r '.name'); \
fi && \
+ echo "${KASM_VERSION}" > /version.txt && \
curl -o \
/tmp/wizard.tar.gz -L \
"https://github.com/kasmtech/kasm-install-wizard/archive/refs/tags/${KASM_VERSION}.tar.gz" && \
@@ -73,20 +81,22 @@ RUN \
tar xf \
/tmp/kasm.tar.gz -C \
/ && \
+ sed -i 's/-N -e -H/-N -B -e -H/g' /kasm_release/upgrade.sh && \
echo "**** copy assets ****" && \
cp \
- /kasm_release/www/img/thumbnails/*.png \
+ /kasm_release/www/img/thumbnails/*.png /kasm_release/www/img/thumbnails/*.svg \
/wizard/public/img/thumbnails/ && \
cp \
/kasm_release/conf/database/seed_data/default_images_a* \
/wizard/ && \
echo "**** cleanup ****" && \
- apk del --purge \
- build-dependencies && \
+ apt-get remove -y g++ gcc make && \
+ apt-get -y autoremove && \
+ apt-get clean && \
rm -rf \
- /root/.npm \
- /root/.cache \
- /tmp/*
+ /tmp/* \
+ /var/lib/apt/lists/* \
+ /var/tmp/*
# add init files
COPY root/ /
diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64
index 71edbdc..89bce88 100644
--- a/Dockerfile.aarch64
+++ b/Dockerfile.aarch64
@@ -1,4 +1,4 @@
-FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.16
+FROM ghcr.io/linuxserver/baseimage-ubuntu:arm64v8-jammy
# set version label
ARG BUILD_DATE
@@ -11,40 +11,47 @@ LABEL maintainer="thelamer"
ENV DOCKER_TLS_CERTDIR=""
ENV TINI_SUBREAPER=true
+#Add needed nvidia environment variables for https://github.com/NVIDIA/nvidia-docker
+ENV NVIDIA_DRIVER_CAPABILITIES="compute,graphics,video,utility" \
+ VERSION="develop"
+
# Container setup
RUN \
- echo "**** install build packages ****" && \
- apk add --no-cache --virtual=build-dependencies \
- alpine-sdk \
- npm && \
echo "**** install packages ****" && \
- apk add --no-cache \
- bash \
+ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
+ echo "deb [arch=arm64] https://download.docker.com/linux/ubuntu jammy stable" > \
+ /etc/apt/sources.list.d/docker.list && \
+ curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
+ gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg && \
+ curl -s -L https://nvidia.github.io/libnvidia-container/ubuntu22.04/libnvidia-container.list | \
+ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
+ tee /etc/apt/sources.list.d/nvidia-container-toolkit.list && \
+ curl -fsSL https://deb.nodesource.com/setup_16.x | bash - && \
+ apt-get install -y --no-install-recommends \
btrfs-progs \
- ca-certificates \
- coreutils \
- curl \
- docker \
- docker-cli-compose \
+ containerd.io \
+ docker-ce \
+ docker-ce-cli \
+ docker-compose-plugin \
+ drm-info \
e2fsprogs \
- e2fsprogs-extra \
- findutils \
fuse-overlayfs \
- ip6tables \
+ g++ \
+ gcc \
iptables \
jq \
+ make \
nodejs \
+ nvidia-docker2 \
openssl \
pigz \
python3 \
- shadow-uidmap \
sudo \
- xfsprogs \
- xz \
- zfs && \
+ uidmap \
+ xfsprogs && \
echo "**** dind setup ****" && \
- addgroup -S dockremap && \
- adduser -S -G dockremap dockremap && \
+ useradd -U dockremap && \
+ usermod -G dockremap dockremap && \
echo 'dockremap:165536:65536' >> /etc/subuid && \
echo 'dockremap:165536:65536' >> /etc/subgid && \
curl -o \
@@ -58,6 +65,7 @@ RUN \
KASM_VERSION=$(curl -sX GET 'https://api.github.com/repos/kasmtech/kasm-install-wizard/releases/latest' \
| jq -r '.name'); \
fi && \
+ echo "${KASM_VERSION}" > /version.txt && \
curl -o \
/tmp/wizard.tar.gz -L \
"https://github.com/kasmtech/kasm-install-wizard/archive/refs/tags/${KASM_VERSION}.tar.gz" && \
@@ -73,20 +81,22 @@ RUN \
tar xf \
/tmp/kasm.tar.gz -C \
/ && \
+ sed -i 's/-N -e -H/-N -B -e -H/g' /kasm_release/upgrade.sh && \
echo "**** copy assets ****" && \
cp \
- /kasm_release/www/img/thumbnails/*.png \
+ /kasm_release/www/img/thumbnails/*.png /kasm_release/www/img/thumbnails/*.svg \
/wizard/public/img/thumbnails/ && \
cp \
/kasm_release/conf/database/seed_data/default_images_a* \
/wizard/ && \
echo "**** cleanup ****" && \
- apk del --purge \
- build-dependencies && \
+ apt-get remove -y g++ gcc make && \
+ apt-get -y autoremove && \
+ apt-get clean && \
rm -rf \
- /root/.npm \
- /root/.cache \
- /tmp/*
+ /tmp/* \
+ /var/lib/apt/lists/* \
+ /var/tmp/*
# add init files
COPY root/ /
diff --git a/Jenkinsfile b/Jenkinsfile
index df7b482..62f3ed5 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -27,7 +27,7 @@ pipeline {
DOCKERHUB_IMAGE = 'linuxserver/kasm'
DEV_DOCKERHUB_IMAGE = 'lsiodev/kasm'
PR_DOCKERHUB_IMAGE = 'lspipepr/kasm'
- DIST_IMAGE = 'alpine'
+ DIST_IMAGE = 'ubuntu'
MULTIARCH='true'
CI='true'
CI_WEB='true'
@@ -59,7 +59,7 @@ pipeline {
env.CODE_URL = 'https://github.com/' + env.LS_USER + '/' + env.LS_REPO + '/commit/' + env.GIT_COMMIT
env.DOCKERHUB_LINK = 'https://hub.docker.com/r/' + env.DOCKERHUB_IMAGE + '/tags/'
env.PULL_REQUEST = env.CHANGE_ID
- env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.md ./.github/ISSUE_TEMPLATE/issue.feature.md ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/stale.yml ./.github/workflows/external_trigger.yml ./.github/workflows/package_trigger.yml'
+ env.TEMPLATED_FILES = 'Jenkinsfile README.md LICENSE .editorconfig ./.github/CONTRIBUTING.md ./.github/FUNDING.yml ./.github/ISSUE_TEMPLATE/config.yml ./.github/ISSUE_TEMPLATE/issue.bug.yml ./.github/ISSUE_TEMPLATE/issue.feature.yml ./.github/PULL_REQUEST_TEMPLATE.md ./.github/workflows/external_trigger_scheduler.yml ./.github/workflows/greetings.yml ./.github/workflows/package_trigger_scheduler.yml ./.github/workflows/stale.yml ./.github/workflows/external_trigger.yml ./.github/workflows/package_trigger.yml'
}
script{
env.LS_RELEASE_NUMBER = sh(
@@ -287,7 +287,7 @@ pipeline {
echo "Jenkinsfile is up to date."
fi
# Stage 2 - Delete old templates
- OLD_TEMPLATES=".github/ISSUE_TEMPLATE.md"
+ OLD_TEMPLATES=".github/ISSUE_TEMPLATE.md\n.github/ISSUE_TEMPLATE/issue.bug.md\n.github/ISSUE_TEMPLATE/issue.feature.md"
for i in ${OLD_TEMPLATES}; do
if [[ -f "${i}" ]]; then
TEMPLATES_TO_DELETE="${i} ${TEMPLATES_TO_DELETE}"
diff --git a/README.md b/README.md
index c343fb2..7d56a3b 100644
--- a/README.md
+++ b/README.md
@@ -73,10 +73,6 @@ This image provides various versions that are available via tags. Please read th
This container uses [Docker in Docker](https://www.docker.com/blog/docker-can-now-run-within-docker/) and requires being run in `privileged` mode. This container also requires an initial setup that runs on port 3000.
-**Unlike other containers the web interface port (default 443) needs to be set for the env variable `KASM_PORT` and both the inside and outside port IE for 4443 `KASM_PORT=4443` `-p 4443:4443`**
-
-**Unraid users due to the DinD storage layer `/opt/` should be mounted directly to a disk IE `/mnt/disk1/appdata/path` or optimally with a cache disk at `/mnt/cache/appdata/path`**
-
Access the installation wizard at https://`your ip`:3000 and follow the instructions there. Once setup is complete access https://`your ip`:443 and login with the credentials you entered during setup. The default users are:
* admin@kasm.local
@@ -84,6 +80,18 @@ Access the installation wizard at https://`your ip`:3000 and follow the instruct
Currently Synology systems are not supported due to them blocking CPU scheduling in their Kernel.
+### GPU Support
+
+During installation an option will be presented to force all Workspace containers to mount in and use a specific GPU. If using an NVIDIA GPU you will need to pass `-e NVIDIA_VISIBLE_DEVICES=all` or `--gpus all` and have the [NVIDIA Container Runtime](https://github.com/NVIDIA/nvidia-container-runtime) installed on the host. Also if using NVIDIA, Kasm Workspaces has [native NVIDIA support](https://www.kasmweb.com/docs/latest/how_to/gpu.html) so you can optionally opt to simply use that instead of he manual override during installation.
+
+### Gamepad support
+
+In order to properly create virtual Gamepads you will need to mount from your host `/dev/input` and `/run/udev/data`. Please see [HERE](https://www.kasmweb.com/docs/develop/guide/gamepad_passthrough.html) for instructions on enabling gamepad support.
+
+### Persistant profiles
+
+In order to use persistant profiles in Workspaces you will need to mount in a folder to use from your host to `/profiles`. From there when configuring a workspace you can set the `Persistant Profile Path` to IE `/profiles/ubuntu-focal/{username}/`, more infomation can be found [HERE](https://www.kasmweb.com/docs/latest/how_to/persistent_profiles.html).
+
## Usage
Here are some example snippets to help you get started creating a container.
@@ -106,6 +114,8 @@ services:
volumes:
- /path/to/data:/opt
- /path/to/profiles:/profiles #optional
+ - /dev/input:/dev/input #optional
+ - /run/udev/data:/run/udev/data #optional
ports:
- 3000:3000
- 443:443
@@ -126,6 +136,8 @@ docker run -d \
-p 443:443 \
-v /path/to/data:/opt \
-v /path/to/profiles:/profiles `#optional` \
+ -v /dev/input:/dev/input `#optional` \
+ -v /run/udev/data:/run/udev/data `#optional` \
--restart unless-stopped \
lscr.io/linuxserver/kasm:latest
```
@@ -144,6 +156,8 @@ Container images are configured using parameters passed at runtime (such as thos
| `-e DOCKER_HUB_PASSWORD=PASS` | Optionally specify a DockerHub password to pull private images. |
| `-v /opt` | Docker and installation storage. |
| `-v /profiles` | Optionally specify a path for persistent profile storage. |
+| `-v /dev/input` | Optional for gamepad support. |
+| `-v /run/udev/data` | Optional for gamepad support. |
## Environment variables from files (Docker secrets)
@@ -241,5 +255,6 @@ Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64
## Versions
+* **05.11.22:** - Rebase to Jammy, add support for GPUs, add support for Gamepads.
* **23.09.22:** - Migrate to s6v3.
* **02.07.22:** - Initial Release.
diff --git a/jenkins-vars.yml b/jenkins-vars.yml
index 960107a..aaf3d48 100644
--- a/jenkins-vars.yml
+++ b/jenkins-vars.yml
@@ -17,7 +17,7 @@ repo_vars:
- DOCKERHUB_IMAGE = 'linuxserver/kasm'
- DEV_DOCKERHUB_IMAGE = 'lsiodev/kasm'
- PR_DOCKERHUB_IMAGE = 'lspipepr/kasm'
- - DIST_IMAGE = 'alpine'
+ - DIST_IMAGE = 'ubuntu'
- MULTIARCH='true'
- CI='true'
- CI_WEB='true'
diff --git a/readme-vars.yml b/readme-vars.yml
index d2a569c..2e179c8 100644
--- a/readme-vars.yml
+++ b/readme-vars.yml
@@ -56,6 +56,8 @@ opt_param_env_vars:
opt_param_usage_include_vols: true
opt_param_volumes:
- { vol_path: "/profiles", vol_host_path: "/path/to/profiles", desc: "Optionally specify a path for persistent profile storage." }
+ - { vol_path: "/dev/input", vol_host_path: "/dev/input", desc: "Optional for gamepad support." }
+ - { vol_path: "/run/udev/data", vol_host_path: "/run/udev/data", desc: "Optional for gamepad support." }
opt_param_usage_include_ports: false
opt_param_ports: []
@@ -78,18 +80,27 @@ app_setup_block_enabled: true
app_setup_block: |
This container uses [Docker in Docker](https://www.docker.com/blog/docker-can-now-run-within-docker/) and requires being run in `privileged` mode. This container also requires an initial setup that runs on port 3000.
- **Unlike other containers the web interface port (default 443) needs to be set for the env variable `KASM_PORT` and both the inside and outside port IE for 4443 `KASM_PORT=4443` `-p 4443:4443`**
-
- **Unraid users due to the DinD storage layer `/opt/` should be mounted directly to a disk IE `/mnt/disk1/appdata/path` or optimally with a cache disk at `/mnt/cache/appdata/path`**
-
Access the installation wizard at https://`your ip`:3000 and follow the instructions there. Once setup is complete access https://`your ip`:443 and login with the credentials you entered during setup. The default users are:
* admin@kasm.local
* user@kasm.local
- Currently Synology systems are not supported due to them blocking CPU scheduling in their Kernel.
+ Currently Synology systems are not supported due to them blocking CPU scheduling in their Kernel.
+
+ ### GPU Support
+
+ During installation an option will be presented to force all Workspace containers to mount in and use a specific GPU. If using an NVIDIA GPU you will need to pass `-e NVIDIA_VISIBLE_DEVICES=all` or `--gpus all` and have the [NVIDIA Container Runtime](https://github.com/NVIDIA/nvidia-container-runtime) installed on the host. Also if using NVIDIA, Kasm Workspaces has [native NVIDIA support](https://www.kasmweb.com/docs/latest/how_to/gpu.html) so you can optionally opt to simply use that instead of he manual override during installation.
+
+ ### Gamepad support
+
+ In order to properly create virtual Gamepads you will need to mount from your host `/dev/input` and `/run/udev/data`. Please see [HERE](https://www.kasmweb.com/docs/develop/guide/gamepad_passthrough.html) for instructions on enabling gamepad support.
+
+ ### Persistant profiles
+
+ In order to use persistant profiles in Workspaces you will need to mount in a folder to use from your host to `/profiles`. From there when configuring a workspace you can set the `Persistant Profile Path` to IE `/profiles/ubuntu-focal/{username}/`, more infomation can be found [HERE](https://www.kasmweb.com/docs/latest/how_to/persistent_profiles.html).
# changelog
changelogs:
+ - { date: "05.11.22:", desc: "Rebase to Jammy, add support for GPUs, add support for Gamepads." }
- { date: "23.09.22:", desc: "Migrate to s6v3." }
- { date: "02.07.22:", desc: "Initial Release." }
diff --git a/root/gpuinfo.sh b/root/gpuinfo.sh
new file mode 100755
index 0000000..984df4e
--- /dev/null
+++ b/root/gpuinfo.sh
@@ -0,0 +1,2 @@
+#! /bin/bash
+drm_info -j 2>/dev/null| jq -c 'with_entries(.value |= .driver.desc)'