{"id":13607351,"url":"https://github.com/linuxserver/docker-kali-linux","last_synced_at":"2026-04-17T15:01:33.791Z","repository":{"id":249303081,"uuid":"830766885","full_name":"linuxserver/docker-kali-linux","owner":"linuxserver","description":"Web accessible Kali Linux with a KDE interface","archived":false,"fork":false,"pushed_at":"2026-04-13T13:13:17.000Z","size":796,"stargazers_count":58,"open_issues_count":0,"forks_count":17,"subscribers_count":9,"default_branch":"master","last_synced_at":"2026-04-13T14:18:48.722Z","etag":null,"topics":["hacktoberfest"],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/linuxserver.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"linuxserver","open_collective":"linuxserver"}},"created_at":"2024-07-19T00:38:42.000Z","updated_at":"2026-04-13T12:23:46.000Z","dependencies_parsed_at":"2026-01-02T11:02:11.404Z","dependency_job_id":null,"html_url":"https://github.com/linuxserver/docker-kali-linux","commit_stats":{"total_commits":16,"total_committers":2,"mean_commits":8.0,"dds":0.125,"last_synced_commit":"b50f33309443e0f5925305b619972a05f064ef8a"},"previous_names":["linuxserver/docker-kali-linux"],"tags_count":105,"template":false,"template_full_name":null,"purl":"pkg:github/linuxserver/docker-kali-linux","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxserver%2Fdocker-kali-linux","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxserver%2Fdocker-kali-linux/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxserver%2Fdocker-kali-linux/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxserver%2Fdocker-kali-linux/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/linuxserver","download_url":"https://codeload.github.com/linuxserver/docker-kali-linux/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/linuxserver%2Fdocker-kali-linux/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31933736,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T12:37:54.787Z","status":"ssl_error","status_checked_at":"2026-04-17T12:37:25.095Z","response_time":62,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest"],"created_at":"2024-08-01T19:01:17.879Z","updated_at":"2026-04-17T15:01:33.783Z","avatar_url":"https://github.com/linuxserver.png","language":"Shell","readme":"\u003c!-- DO NOT EDIT THIS FILE MANUALLY --\u003e\n\u003c!-- Please read https://github.com/linuxserver/docker-kali-linux/blob/master/.github/CONTRIBUTING.md --\u003e\n[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io)\n\n[![Blog](https://img.shields.io/static/v1.svg?color=94398d\u0026labelColor=555555\u0026logoColor=ffffff\u0026style=for-the-badge\u0026label=linuxserver.io\u0026message=Blog)](https://blog.linuxserver.io \"all the things you can do with our containers including How-To guides, opinions and much more!\")\n[![Discord](https://img.shields.io/discord/354974912613449730.svg?color=94398d\u0026labelColor=555555\u0026logoColor=ffffff\u0026style=for-the-badge\u0026label=Discord\u0026logo=discord)](https://linuxserver.io/discord \"realtime support / chat with the community and the team.\")\n[![Discourse](https://img.shields.io/discourse/https/discourse.linuxserver.io/topics.svg?color=94398d\u0026labelColor=555555\u0026logoColor=ffffff\u0026style=for-the-badge\u0026logo=discourse)](https://discourse.linuxserver.io \"post on our community forum.\")\n[![GitHub](https://img.shields.io/static/v1.svg?color=94398d\u0026labelColor=555555\u0026logoColor=ffffff\u0026style=for-the-badge\u0026label=linuxserver.io\u0026message=GitHub\u0026logo=github)](https://github.com/linuxserver \"view the source for all of our repositories.\")\n[![Open Collective](https://img.shields.io/opencollective/all/linuxserver.svg?color=94398d\u0026labelColor=555555\u0026logoColor=ffffff\u0026style=for-the-badge\u0026label=Supporters\u0026logo=open%20collective)](https://opencollective.com/linuxserver \"please consider helping us by either donating or contributing to our budget\")\n\nThe [LinuxServer.io](https://linuxserver.io) team brings you another container release featuring:\n\n* regular and timely application updates\n* easy user mappings (PGID, PUID)\n* custom base image with s6 overlay\n* weekly base OS updates with common layers across the entire LinuxServer.io ecosystem to minimise space usage, down time and bandwidth\n* regular security updates\n\nFind us at:\n\n* [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more!\n* [Discord](https://linuxserver.io/discord) - realtime support / chat with the community and the team.\n* [Discourse](https://discourse.linuxserver.io) - post on our community forum.\n* [GitHub](https://github.com/linuxserver) - view the source for all of our repositories.\n* [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget\n\n# [linuxserver/kali-linux](https://github.com/linuxserver/docker-kali-linux)\n\n[![Scarf.io pulls](https://scarf.sh/installs-badge/linuxserver-ci/linuxserver%2Fkali-linux?color=94398d\u0026label-color=555555\u0026logo-color=ffffff\u0026style=for-the-badge\u0026package-type=docker)](https://scarf.sh)\n[![GitHub Stars](https://img.shields.io/github/stars/linuxserver/docker-kali-linux.svg?color=94398d\u0026labelColor=555555\u0026logoColor=ffffff\u0026style=for-the-badge\u0026logo=github)](https://github.com/linuxserver/docker-kali-linux)\n[![GitHub Release](https://img.shields.io/github/release/linuxserver/docker-kali-linux.svg?color=94398d\u0026labelColor=555555\u0026logoColor=ffffff\u0026style=for-the-badge\u0026logo=github)](https://github.com/linuxserver/docker-kali-linux/releases)\n[![GitHub Package Repository](https://img.shields.io/static/v1.svg?color=94398d\u0026labelColor=555555\u0026logoColor=ffffff\u0026style=for-the-badge\u0026label=linuxserver.io\u0026message=GitHub%20Package\u0026logo=github)](https://github.com/linuxserver/docker-kali-linux/packages)\n[![GitLab Container Registry](https://img.shields.io/static/v1.svg?color=94398d\u0026labelColor=555555\u0026logoColor=ffffff\u0026style=for-the-badge\u0026label=linuxserver.io\u0026message=GitLab%20Registry\u0026logo=gitlab)](https://gitlab.com/linuxserver.io/docker-kali-linux/container_registry)\n[![Quay.io](https://img.shields.io/static/v1.svg?color=94398d\u0026labelColor=555555\u0026logoColor=ffffff\u0026style=for-the-badge\u0026label=linuxserver.io\u0026message=Quay.io)](https://quay.io/repository/linuxserver.io/kali-linux)\n[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/kali-linux.svg?color=94398d\u0026labelColor=555555\u0026logoColor=ffffff\u0026style=for-the-badge\u0026label=pulls\u0026logo=docker)](https://hub.docker.com/r/linuxserver/kali-linux)\n[![Docker Stars](https://img.shields.io/docker/stars/linuxserver/kali-linux.svg?color=94398d\u0026labelColor=555555\u0026logoColor=ffffff\u0026style=for-the-badge\u0026label=stars\u0026logo=docker)](https://hub.docker.com/r/linuxserver/kali-linux)\n[![Jenkins Build](https://img.shields.io/jenkins/build?labelColor=555555\u0026logoColor=ffffff\u0026style=for-the-badge\u0026jobUrl=https%3A%2F%2Fci.linuxserver.io%2Fjob%2FDocker-Pipeline-Builders%2Fjob%2Fdocker-kali-linux%2Fjob%2Fmaster%2F\u0026logo=jenkins)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-kali-linux/job/master/)\n[![LSIO CI](https://img.shields.io/badge/dynamic/yaml?color=94398d\u0026labelColor=555555\u0026logoColor=ffffff\u0026style=for-the-badge\u0026label=CI\u0026query=CI\u0026url=https%3A%2F%2Fci-tests.linuxserver.io%2Flinuxserver%2Fkali-linux%2Flatest%2Fci-status.yml)](https://ci-tests.linuxserver.io/linuxserver/kali-linux/latest/index.html)\n\n[Kali-linux](https://github.com/linuxserver/docker-kali-linux) - is an Advanced Penetration Testing Linux distribution used for Penetration Testing, Ethical Hacking and network security assessments. KALI LINUX ™ is a trademark of OffSec.\n\n[![kali-linux](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/kali-logo.png)](https://github.com/linuxserver/docker-kali-linux)\n\n## Supported Architectures\n\nWe utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://distribution.github.io/distribution/spec/manifest-v2-2/#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/).\n\nSimply pulling `lscr.io/linuxserver/kali-linux:latest` should retrieve the correct image for your arch, but you can also pull specific arch images via tags.\n\nThe architectures supported by this image are:\n\n| Architecture | Available | Tag |\n| :----: | :----: | ---- |\n| x86-64 | ✅ | amd64-\\\u003cversion tag\\\u003e |\n| arm64 | ✅ | arm64v8-\\\u003cversion tag\\\u003e |\n\n## Application Setup\n\nThe application can be accessed at:\n\n* https://yourhost:3001/\n\n### Strict reverse proxies\n\nThis image uses a self-signed certificate by default. This naturally means the scheme is `https`.\nIf you are using a reverse proxy which validates certificates, you need to [disable this check for the container](https://docs.linuxserver.io/faq#strict-proxy).\n\n**Modern GUI desktop apps may have compatibility issues with the latest Docker syscall restrictions. You can use Docker with the `--security-opt seccomp=unconfined` setting to allow these syscalls on hosts with older Kernels or libseccomp versions.**\n\n### Security\n\n\u003e[!WARNING]\n\u003eThis container provides privileged access to the host system. Do not expose it to the Internet unless you have secured it properly.\n\n**HTTPS is required for full functionality.** Modern browser features such as WebCodecs, used for video and audio, will not function over an insecure HTTP connection.\n\nBy default, this container has no authentication. The optional `CUSTOM_USER` and `PASSWORD` environment variables enable basic HTTP auth, which is suitable only for securing the container on a trusted local network. For internet exposure, we strongly recommend placing the container behind a reverse proxy, such as [SWAG](https://github.com/linuxserver/docker-swag), with a robust authentication mechanism.\n\nThe web interface includes a terminal with passwordless `sudo` access. Any user with access to the GUI can gain root control within the container, install arbitrary software, and probe your local network.\n\nWhile not generally recommended, certain legacy environments specifically those with older hardware or outdated Linux distributions may require the deactivation of the standard seccomp profile to get containerized desktop software to run. This can be achieved by utilizing the `--security-opt seccomp=unconfined` parameter. It is critical to use this option only when absolutely necessary as it disables a key security layer of Docker, elevating the potential for container escape vulnerabilities.\n\n### Hardware Acceleration \u0026 The Move to Wayland\n\nWe are currently transitioning our desktop containers from X11 to Wayland. While X11 is still the default, we strongly encourage users to test the new Wayland mode.\n\n**Important:** GPU acceleration support for X11 is being deprecated. Future development for hardware acceleration will focus entirely on the Wayland stack.\n\nTo enable Wayland mode, set the following environment variable:\n\n* `-e PIXELFLUX_WAYLAND=true`\n\n**Why use Wayland?**\n\n* **Zero Copy Encoding:** When configured correctly with a GPU, the frame is rendered and encoded on the video card without ever being copied to the system RAM. This drastically lowers CPU usage and latency.\n* **Modern Stack:** Single-application containers utilize **Labwc** (replacing Openbox) and full desktop containers use **KDE Plasma Wayland**, providing a more modern and secure compositing environment while retaining the same user experience.\n\n#### GPU Configuration\n\nTo use hardware acceleration in Wayland mode, we distinguish between the card used for **Rendering** (3D apps/Desktops) and **Encoding** (Video Stream).\n\n**Configuration Variables:**\n\n* `DRINODE`: The path to the GPU used for **Rendering** (EGL).\n* `DRI_NODE`: The path to the GPU used for **Encoding** (VAAPI/NVENC).\n\nIf both variables point to the same device, the container will automatically enable **Zero Copy** encoding, significantly reducing CPU usage and latency. If they are set to different devices one will be used for **Rendering** and one for **Encoding** with a cpu readback.\n\nYou can also use the environment variable `AUTO_GPU=true`, with this set the first card detected in the container (IE `/dev/dri/renderD128`) will be used and configured for **Zero Copy**.\n\n##### Intel \u0026 AMD (Open Source Drivers)\n\nFor Intel and AMD GPUs.\n\n```yaml\n    devices:\n      - /dev/dri:/dev/dri\n    environment:\n      - PIXELFLUX_WAYLAND=true\n      # Optional: Specify device if multiple exist (IE: /dev/dri/renderD129)\n      - DRINODE=/dev/dri/renderD128\n      - DRI_NODE=/dev/dri/renderD128\n```\n\n##### Nvidia (Proprietary Drivers)\n\n**Note: Nvidia support is currently considered experimental, driver changes can break it at any time.**\n\n**Note: Nvidia support is not available for Alpine-based images.**\n\n**Note: Nvidia frames have issues with hardware decoders in Chromium browsers you need to navigate to `chrome://flags/#disable-accelerated-video-decode` and toggle it to `Disabled` for smooth playback**\n\n**Prerequisites:**\n\n1. **Driver:** Proprietary drivers **580 or higher** are required. **Crucially, you should install the driver using the `.run` file downloaded directly from the Nvidia website.**\n    * **Unraid:** Use the production branch from the Nvidia Driver Plugin.\n\n2. **Kernel Parameter:** You must set `nvidia-drm.modeset=1 nvidia_drm.fbdev=1` in your host bootloader.\n    * **Standard Linux (GRUB):** Edit `/etc/default/grub` and add the parameter to your existing `GRUB_CMDLINE_LINUX_DEFAULT` line:\n\n        ```text\n        GRUB_CMDLINE_LINUX_DEFAULT=\"\u003cother existing options\u003e nvidia-drm.modeset=1 nvidia_drm.fbdev=1\"\n        ```\n\n        Then apply the changes by running:\n\n        ```bash\n        sudo update-grub\n        ```\n\n    * **Unraid (Syslinux):** Edit the file `/boot/syslinux/syslinux.cfg` and add `nvidia-drm.modeset=1 nvidia_drm.fbdev=1` to the end of the `append` line for the Unraid OS boot entry.\n\n3. **Hardware Initialization:** **On headless systems, the Nvidia video card requires a physical dummy plug inserted into the GPU so that DRM initializes properly.**\n\n4. **Docker Runtime:** Configure the host docker daemon to use the Nvidia runtime:\n\n    ```bash\n    sudo nvidia-ctk runtime configure --runtime=docker\n    sudo systemctl restart docker\n    ```\n\n**Compose Configuration:**\n\n```yaml\n---\nservices:\n  kali-linux:\n    image: lscr.io/linuxserver/kali-linux:latest\n    environment:\n      - PIXELFLUX_WAYLAND=true\n      # Ensure these point to the rendered node injected by the runtime (usually renderD128)\n      - DRINODE=/dev/dri/renderD128\n      - DRI_NODE=/dev/dri/renderD128\n    deploy:\n      resources:\n        reservations:\n          devices:\n            - driver: nvidia\n              count: 1\n              capabilities: [compute,video,graphics,utility]\n```\n\n* **Unraid:** Ensure you're properly setting the DRINODE/DRI_NODE and adding `--gpus all --runtime nvidia` to your extra parameters.\n\n### SealSkin Compatibility\n\nThis container is compatible with [SealSkin](https://sealskin.app).\n\nSealSkin is a self-hosted, client-server platform that provides secure authentication and collaboration features while using a browser extension to intercept user actions such as clicking a link or downloading a file and redirect them to a secure, isolated application environment running on a remote server.\n\n* **SealSkin Server:** [Get it Here](https://github.com/linuxserver/docker-sealskin)\n* **Browser Extension:** [Chrome](https://chromewebstore.google.com/detail/sealskin-isolation/lclgfmnljgacfdpmmmjmfpdelndbbfhk) and [Firefox](https://addons.mozilla.org/en-US/firefox/addon/sealskin-isolation/).\n* **Mobile App:** [iOS](https://apps.apple.com/us/app/sealskin/id6758210210) and [Android](https://play.google.com/store/apps/details?id=io.linuxserver.sealskin)\n\n### Options in all Selkies-based GUI containers\n\nThis container is based on [Docker Baseimage Selkies](https://github.com/linuxserver/docker-baseimage-selkies).\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand: Optional Environment Variables\u003c/summary\u003e\n\n| Variable | Description |\n| :----: | --- |\n| PIXELFLUX_WAYLAND | **Experimental** If set to true the container will initialize in Wayland mode running [Smithay](https://github.com/Smithay/smithay) and Labwc while enabling zero copy encoding with a GPU |\n| SELKIES_DESKTOP | If set to true and in Wayland mode, a simple panel will be initialized with labwc |\n| CUSTOM_PORT | Internal port the container listens on for http if it needs to be swapped from the default `3000` |\n| CUSTOM_HTTPS_PORT | Internal port the container listens on for https if it needs to be swapped from the default `3001` |\n| CUSTOM_WS_PORT | Internal port the container listens on for websockets if it needs to be swapped from the default 8082 |\n| CUSTOM_USER | HTTP Basic auth username, abc is default. |\n| DRI_NODE | **Encoding GPU**: Enable VAAPI/NVENC stream encoding and use the specified device IE `/dev/dri/renderD128` |\n| DRINODE | **Rendering GPU**: Specify which GPU to use for EGL/3D acceleration IE `/dev/dri/renderD129` |\n| AUTO_GPU | If set to true and in Wayland mode, we will automatically use the first GPU available for encoding and rendering IE `/dev/dri/renderD128` |\n| PASSWORD | HTTP Basic auth password, abc is default. If unset there will be no auth |\n| SUBFOLDER | Subfolder for the application if running a subfolder reverse proxy, need both slashes IE `/subfolder/` |\n| TITLE | The page title displayed on the web browser, default \"Selkies\" |\n| DASHBOARD | Allows the user to set their dashboard. Options: `selkies-dashboard`, `selkies-dashboard-zinc`, `selkies-dashboard-wish` |\n| FILE_MANAGER_PATH | Modifies the default upload/download file path, path must have proper permissions for abc user |\n| START_DOCKER | If set to false a container with privilege will not automatically start the DinD Docker setup |\n| DISABLE_IPV6 | If set to true or any value this will disable IPv6 |\n| LC_ALL | Set the Language for the container to run as IE `fr_FR.UTF-8` `ar_AE.UTF-8` |\n| 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) |\n| NO_FULL | Do not autmatically fullscreen applications when using openbox. |\n| NO_GAMEPAD | Disable userspace gamepad interposer injection. |\n| DISABLE_ZINK | Do not set the Zink environment variables if a video card is detected (userspace applications will use CPU rendering) |\n| DISABLE_DRI3 | Do not use DRI3 acceleration if a video card is detected (userspace applications will use CPU rendering) |\n| MAX_RES | Pass a larger maximum resolution for the container default is 16k `15360x8640` |\n| WATERMARK_PNG | Full path inside the container to a watermark png IE `/usr/share/selkies/www/icon.png` |\n| WATERMARK_LOCATION | Where to paint the image over the stream integer options below |\n\n**`WATERMARK_LOCATION` Options:**\n\n* **1**: Top Left\n* **2**: Top Right\n* **3**: Bottom Left\n* **4**: Bottom Right\n* **5**: Centered\n* **6**: Animated\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand: Optional Run Configurations (DinD \u0026 GPU Mounts)\u003c/summary\u003e\n\n| Argument | Description |\n| :----: | --- |\n| `--privileged` | Starts a Docker-in-Docker (DinD) environment. For better performance, mount the Docker data directory from the host, e.g., `-v /path/to/docker-data:/var/lib/docker`. |\n| `-v /var/run/docker.sock:/var/run/docker.sock` | Mounts the host's Docker socket to manage host containers from within this container. |\n| `--device /dev/dri:/dev/dri` | Mount a GPU into the container, this can be used in conjunction with the `DRINODE` environment variable to leverage a host video card for GPU accelerated applications. |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand: Legacy X11 Resolution \u0026 Acceleration\u003c/summary\u003e\n\n**Note:** This section applies only if you are **NOT** using `PIXELFLUX_WAYLAND=true`.\n\nWhen using 3d acceleration via Nvidia DRM or DRI3 in X11 mode, it is important to clamp the virtual display to a reasonable max resolution to avoid memory exhaustion or poor performance.\n\n* `-e MAX_RESOLUTION=3840x2160`\n\nThis will set the total virtual framebuffer to 4K. By default, the virtual monitor is 16K. If you have performance issues in an accelerated X11 session, try clamping the resolution to 1080p and work up from there:\n\n```bash\n-e SELKIES_MANUAL_WIDTH=1920\n-e SELKIES_MANUAL_HEIGHT=1080\n-e MAX_RESOLUTION=1920x1080\n```\n\n\u003c/details\u003e\n\n### Language Support - Internationalization\n\nTo launch the desktop session in a different language, set the `LC_ALL` environment variable. For example:\n\n* `-e LC_ALL=zh_CN.UTF-8` - Chinese\n* `-e LC_ALL=ja_JP.UTF-8` - Japanese\n* `-e LC_ALL=ko_KR.UTF-8` - Korean\n* `-e LC_ALL=ar_AE.UTF-8` - Arabic\n* `-e LC_ALL=ru_RU.UTF-8` - Russian\n* `-e LC_ALL=es_MX.UTF-8` - Spanish (Latin America)\n* `-e LC_ALL=de_DE.UTF-8` - German\n* `-e LC_ALL=fr_FR.UTF-8` - French\n* `-e LC_ALL=nl_NL.UTF-8` - Netherlands\n* `-e LC_ALL=it_IT.UTF-8` - Italian\n\n### Application Management\n\nThere are two methods for installing applications inside the container: PRoot Apps (recommended for persistence) and Native Apps.\n\n#### PRoot Apps (Persistent)\n\nNatively installed packages (e.g., via `apt-get install`) will not persist if the container is recreated. To retain applications and their settings across container updates, we recommend using [proot-apps](https://github.com/linuxserver/proot-apps). These are portable applications installed to the user's persistent `$HOME` directory.\n\nTo install an application, use the command line inside the container:\n\n```bash\nproot-apps install filezilla\n```\n\nA list of supported applications is available [here](https://github.com/linuxserver/proot-apps?tab=readme-ov-file#supported-apps).\n\n#### Native Apps (Non-Persistent)\n\nYou can install packages from the system's native repository using the [universal-package-install](https://github.com/linuxserver/docker-mods/tree/universal-package-install) mod. This method will increase the container's start time and is not persistent. Add the following to your `compose.yaml`:\n\n```yaml\n  environment:\n    - DOCKER_MODS=linuxserver/mods:universal-package-install\n    - INSTALL_PACKAGES=libfuse2|git|gdb\n```\n\n### Advanced Configuration\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand: Hardening Options\u003c/summary\u003e\n\nThese variables can be used to lock down the desktop environment for single-application use cases or to restrict user capabilities.\n\n| Variable | Description |\n| :----: | --- |\n| **`HARDEN_DESKTOP`** | Enables `DISABLE_OPEN_TOOLS`, `DISABLE_SUDO`, and `DISABLE_TERMINALS`. Also sets related Selkies UI settings (`SELKIES_FILE_TRANSFERS`, `SELKIES_COMMAND_ENABLED`, `SELKIES_UI_SIDEBAR_SHOW_FILES`, `SELKIES_UI_SIDEBAR_SHOW_APPS`) if they are not explicitly set by the user. |\n| **`HARDEN_OPENBOX`** | Enables `DISABLE_CLOSE_BUTTON`, `DISABLE_MOUSE_BUTTONS`, and `HARDEN_KEYBINDS`. It also flags `RESTART_APP` if not set by the user, ensuring the primary application is automatically restarted if closed. |\n\n**Individual Hardening Variables:**\n\n| Variable | Description |\n| :--- | --- |\n| **`DISABLE_OPEN_TOOLS`** | If true, disables `xdg-open` and `exo-open` binaries by removing their execute permissions. |\n| **`DISABLE_SUDO`** | If true, disables the `sudo` command by removing its execute permissions and invalidating the passwordless sudo configuration. |\n| **`DISABLE_TERMINALS`** | If true, disables common terminal emulators by removing their execute permissions and hiding them from the Openbox right-click menu. |\n| **`DISABLE_CLOSE_BUTTON`** | If true, removes the close button from window title bars in the Openbox window manager. |\n| **`DISABLE_MOUSE_BUTTONS`** | If true, disables the right-click and middle-click context menus and actions within the Openbox window manager. |\n| **`HARDEN_KEYBINDS`** | If true, disables default Openbox keybinds that can bypass other hardening options (e.g., `Alt+F4` to close windows, `Alt+Escape` to show the root menu). |\n| **`RESTART_APP`** | If true, enables a watchdog service that automatically restarts the main application if it is closed. The user's autostart script is made read-only and root owned to prevent tampering. |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand: Selkies Application Settings\u003c/summary\u003e\n\nUsing environment variables every facet of the application can be configured.\n\n**Booleans and Locking:**\nBoolean settings accept `true` or `false`. You can also prevent the user from changing a boolean setting in the UI by appending `|locked`.\n\n* Example: `-e SELKIES_USE_CPU=\"true|locked\"`\n\n**Enums and Lists:**\nThese settings accept a comma-separated list of values. The first item becomes default. If only one item is provided, the UI dropdown is hidden.\n\n* Example: `-e SELKIES_ENCODER=\"jpeg\"`\n\n**Ranges:**\nUse a hyphen-separated `min-max` format for a slider, or a single number to lock the value.\n\n* Example: `-e SELKIES_FRAMERATE=\"60\"`\n\n**Manual Resolution Mode:**\nIf `SELKIES_MANUAL_WIDTH` or `SELKIES_MANUAL_HEIGHT` are set, the resolution is locked to those values.\n\n| Environment Variable | Default Value | Description |\n| --- | --- | --- |\n| `SELKIES_UI_TITLE` | `'Selkies'` | Title in top left corner of sidebar. |\n| `SELKIES_UI_SHOW_LOGO` | `True` | Show the Selkies logo in the sidebar. |\n| `SELKIES_UI_SHOW_SIDEBAR` | `True` | Show the main sidebar UI. |\n| `SELKIES_UI_SHOW_CORE_BUTTONS` | `True` | Show the core components buttons display, audio, microphone, and gamepad. |\n| `SELKIES_UI_SIDEBAR_SHOW_VIDEO_SETTINGS` | `True` | Show the video settings section in the sidebar. |\n| `SELKIES_UI_SIDEBAR_SHOW_SCREEN_SETTINGS` | `True` | Show the screen settings section in the sidebar. |\n| `SELKIES_UI_SIDEBAR_SHOW_AUDIO_SETTINGS` | `True` | Show the audio settings section in the sidebar. |\n| `SELKIES_UI_SIDEBAR_SHOW_STATS` | `True` | Show the stats section in the sidebar. |\n| `SELKIES_UI_SIDEBAR_SHOW_CLIPBOARD` | `True` | Show the clipboard section in the sidebar. |\n| `SELKIES_UI_SIDEBAR_SHOW_FILES` | `True` | Show the file transfer section in the sidebar. |\n| `SELKIES_UI_SIDEBAR_SHOW_APPS` | `True` | Show the applications section in the sidebar. |\n| `SELKIES_UI_SIDEBAR_SHOW_SHARING` | `True` | Show the sharing section in the sidebar. |\n| `SELKIES_UI_SIDEBAR_SHOW_GAMEPADS` | `True` | Show the gamepads section in the sidebar. |\n| `SELKIES_UI_SIDEBAR_SHOW_FULLSCREEN` | `True` | Show the fullscreen button in the sidebar. |\n| `SELKIES_UI_SIDEBAR_SHOW_GAMING_MODE` | `True` | Show the gaming mode button in the sidebar. |\n| `SELKIES_UI_SIDEBAR_SHOW_TRACKPAD` | `True` | Show the virtual trackpad button in the sidebar. |\n| `SELKIES_UI_SIDEBAR_SHOW_KEYBOARD_BUTTON` | `True` | Show the on-screen keyboard button in the display area. |\n| `SELKIES_UI_SIDEBAR_SHOW_SOFT_BUTTONS` | `True` | Show the soft buttons section in the sidebar. |\n| `SELKIES_AUDIO_ENABLED` | `True` | Enable server-to-client audio streaming. |\n| `SELKIES_MICROPHONE_ENABLED` | `True` | Enable client-to-server microphone forwarding. |\n| `SELKIES_GAMEPAD_ENABLED` | `True` | Enable gamepad support. |\n| `SELKIES_CLIPBOARD_ENABLED` | `True` | Enable clipboard synchronization. |\n| `SELKIES_COMMAND_ENABLED` | `True` | Enable parsing of command websocket messages. |\n| `SELKIES_FILE_TRANSFERS` | `'upload,download'` | Allowed file transfer directions (comma-separated: \"upload,download\"). Set to \"\" or \"none\" to disable. |\n| `SELKIES_ENCODER` | `'x264enc,x264enc-striped,jpeg'` | The default video encoders. |\n| `SELKIES_FRAMERATE` | `'8-120'` | Allowed framerate range or a fixed value. |\n| `SELKIES_H264_CRF` | `'5-50'` | Allowed H.264 CRF range or a fixed value. |\n| `SELKIES_JPEG_QUALITY` | `'1-100'` | Allowed JPEG quality range or a fixed value. |\n| `SELKIES_H264_FULLCOLOR` | `False` | Enable H.264 full color range for pixelflux encoders. |\n| `SELKIES_H264_STREAMING_MODE` | `False` | Enable H.264 streaming mode for pixelflux encoders. |\n| `SELKIES_USE_CPU` | `False` | Force CPU-based encoding for pixelflux. |\n| `SELKIES_USE_PAINT_OVER_QUALITY` | `True` | Enable high-quality paint-over for static scenes. |\n| `SELKIES_PAINT_OVER_JPEG_QUALITY` | `'1-100'` | Allowed JPEG paint-over quality range or a fixed value. |\n| `SELKIES_H264_PAINTOVER_CRF` | `'5-50'` | Allowed H.264 paint-over CRF range or a fixed value. |\n| `SELKIES_H264_PAINTOVER_BURST_FRAMES` | `'1-30'` | Allowed H.264 paint-over burst frames range or a fixed value. |\n| `SELKIES_SECOND_SCREEN` | `True` | Enable support for a second monitor/display. |\n| `SELKIES_AUDIO_BITRATE` | `'320000'` | The default audio bitrate. |\n| `SELKIES_IS_MANUAL_RESOLUTION_MODE` | `False` | Lock the resolution to the manual width/height values. |\n| `SELKIES_MANUAL_WIDTH` | `0` | Lock width to a fixed value. Setting this forces manual resolution mode. |\n| `SELKIES_MANUAL_HEIGHT` | `0` | Lock height to a fixed value. Setting this forces manual resolution mode. |\n| `SELKIES_SCALING_DPI` | `'96'` | The default DPI for UI scaling. |\n| `SELKIES_ENABLE_BINARY_CLIPBOARD` | `False` | Allow binary data on the clipboard. |\n| `SELKIES_USE_BROWSER_CURSORS` | `False` | Use browser CSS cursors instead of rendering to canvas. |\n| `SELKIES_USE_CSS_SCALING` | `False` | HiDPI when false, if true a lower resolution is sent from the client and the canvas is stretched. |\n| `SELKIES_PORT` (or `CUSTOM_WS_PORT`) | `8082` | Port for the data websocket server. |\n| `SELKIES_DRI_NODE` (or `DRI_NODE`) | `''` | Path to the DRI render node for VA-API. |\n| `SELKIES_AUDIO_DEVICE_NAME` | `'output.monitor'` | Audio device name for pcmflux capture. |\n| `SELKIES_WATERMARK_PATH` (or `WATERMARK_PNG`) | `''` | Absolute path to the watermark PNG file. |\n| `SELKIES_WATERMARK_LOCATION` (or `WATERMARK_LOCATION`) | `-1` | Watermark location enum (0-6). |\n| `SELKIES_DEBUG` | `False` | Enable debug logging. |\n| `SELKIES_ENABLE_SHARING` | `True` | Master toggle for all sharing features. |\n| `SELKIES_ENABLE_COLLAB` | `True` | Enable collaborative (read-write) sharing link. |\n| `SELKIES_ENABLE_SHARED` | `True` | Enable view-only sharing links. |\n| `SELKIES_ENABLE_PLAYER2` | `True` | Enable sharing link for gamepad player 2. |\n| `SELKIES_ENABLE_PLAYER3` | `True` | Enable sharing link for gamepad player 3. |\n| `SELKIES_ENABLE_PLAYER4` | `True` | Enable sharing link for gamepad player 4. |\n\n\u003c/details\u003e\n\n## Usage\n\nTo help you get started creating a container from this image you can either use docker-compose or the docker cli.\n\n\u003e[!NOTE]\n\u003eUnless a parameter is flagged as 'optional', it is *mandatory* and a value must be provided.\n\n### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose))\n\n```yaml\n---\nservices:\n  kali-linux:\n    image: lscr.io/linuxserver/kali-linux:latest\n    container_name: kali-linux\n    environment:\n      - PUID=1000\n      - PGID=1000\n      - TZ=Etc/UTC\n    volumes:\n      - /path/to/data:/config\n    ports:\n      - 3000:3000\n      - 3001:3001\n    shm_size: \"1gb\"\n    restart: unless-stopped\n```\n\n### docker cli ([click here for more info](https://docs.docker.com/engine/reference/commandline/cli/))\n\n```bash\ndocker run -d \\\n  --name=kali-linux \\\n  -e PUID=1000 \\\n  -e PGID=1000 \\\n  -e TZ=Etc/UTC \\\n  -p 3000:3000 \\\n  -p 3001:3001 \\\n  -v /path/to/data:/config \\\n  --shm-size=\"1gb\" \\\n  --restart unless-stopped \\\n  lscr.io/linuxserver/kali-linux:latest\n```\n\n## Parameters\n\nContainers are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `\u003cexternal\u003e:\u003cinternal\u003e` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container.\n\n| Parameter | Function |\n| :----: | --- |\n| `-p 3000:3000` | Web Desktop GUI |\n| `-p 3001:3001` | Web Desktop GUI HTTPS |\n| `-e PUID=1000` | for UserID - see below for explanation |\n| `-e PGID=1000` | for GroupID - see below for explanation |\n| `-e TZ=Etc/UTC` | specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List). |\n| `-v /config` | abc users home directory |\n| `--shm-size=` | Recommended for all desktop images. |\n\n## Environment variables from files (Docker secrets)\n\nYou can set any environment variable from a file by using a special prepend `FILE__`.\n\nAs an example:\n\n```bash\n-e FILE__MYVAR=/run/secrets/mysecretvariable\n```\n\nWill set the environment variable `MYVAR` based on the contents of the `/run/secrets/mysecretvariable` file.\n\n## Umask for running applications\n\nFor all of our images we provide the ability to override the default umask settings for services started within the containers using the optional `-e UMASK=022` setting.\nKeep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up [here](https://en.wikipedia.org/wiki/Umask) before asking for support.\n\n## User / Group Identifiers\n\nWhen using volumes (`-v` flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user `PUID` and group `PGID`.\n\nEnsure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.\n\nIn this instance `PUID=1000` and `PGID=1000`, to find yours use `id your_user` as below:\n\n```bash\nid your_user\n```\n\nExample output:\n\n```text\nuid=1000(your_user) gid=1000(your_user) groups=1000(your_user)\n```\n\n## Docker Mods\n\n[![Docker Mods](https://img.shields.io/badge/dynamic/yaml?color=94398d\u0026labelColor=555555\u0026logoColor=ffffff\u0026style=for-the-badge\u0026label=kali-linux\u0026query=%24.mods%5B%27kali-linux%27%5D.mod_count\u0026url=https%3A%2F%2Fraw.githubusercontent.com%2Flinuxserver%2Fdocker-mods%2Fmaster%2Fmod-list.yml)](https://mods.linuxserver.io/?mod=kali-linux \"view available mods for this container.\") [![Docker Universal Mods](https://img.shields.io/badge/dynamic/yaml?color=94398d\u0026labelColor=555555\u0026logoColor=ffffff\u0026style=for-the-badge\u0026label=universal\u0026query=%24.mods%5B%27universal%27%5D.mod_count\u0026url=https%3A%2F%2Fraw.githubusercontent.com%2Flinuxserver%2Fdocker-mods%2Fmaster%2Fmod-list.yml)](https://mods.linuxserver.io/?mod=universal \"view available universal mods.\")\n\nWe publish various [Docker Mods](https://github.com/linuxserver/docker-mods) to enable additional functionality within the containers. The list of Mods available for this image (if any) as well as universal mods that can be applied to any one of our images can be accessed via the dynamic badges above.\n\n## Support Info\n\n* Shell access whilst the container is running:\n\n    ```bash\n    docker exec -it kali-linux /bin/bash\n    ```\n\n* To monitor the logs of the container in realtime:\n\n    ```bash\n    docker logs -f kali-linux\n    ```\n\n* Container version number:\n\n    ```bash\n    docker inspect -f '{{ index .Config.Labels \"build_version\" }}' kali-linux\n    ```\n\n* Image version number:\n\n    ```bash\n    docker inspect -f '{{ index .Config.Labels \"build_version\" }}' lscr.io/linuxserver/kali-linux:latest\n    ```\n\n## Updating Info\n\nMost of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (noted in the relevant readme.md), we do not recommend or support updating apps inside the container. Please consult the [Application Setup](#application-setup) section above to see if it is recommended for the image.\n\nBelow are the instructions for updating containers:\n\n### Via Docker Compose\n\n* Update images:\n    * All images:\n\n        ```bash\n        docker-compose pull\n        ```\n\n    * Single image:\n\n        ```bash\n        docker-compose pull kali-linux\n        ```\n\n* Update containers:\n    * All containers:\n\n        ```bash\n        docker-compose up -d\n        ```\n\n    * Single container:\n\n        ```bash\n        docker-compose up -d kali-linux\n        ```\n\n* You can also remove the old dangling images:\n\n    ```bash\n    docker image prune\n    ```\n\n### Via Docker Run\n\n* Update the image:\n\n    ```bash\n    docker pull lscr.io/linuxserver/kali-linux:latest\n    ```\n\n* Stop the running container:\n\n    ```bash\n    docker stop kali-linux\n    ```\n\n* Delete the container:\n\n    ```bash\n    docker rm kali-linux\n    ```\n\n* Recreate a new container with the same docker run parameters as instructed above (if mapped correctly to a host folder, your `/config` folder and settings will be preserved)\n* You can also remove the old dangling images:\n\n    ```bash\n    docker image prune\n    ```\n\n### Image Update Notifications - Diun (Docker Image Update Notifier)\n\n\u003e[!TIP]\n\u003eWe recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.\n\n## Building locally\n\nIf you want to make local modifications to these images for development purposes or just to customize the logic:\n\n```bash\ngit clone https://github.com/linuxserver/docker-kali-linux.git\ncd docker-kali-linux\ndocker build \\\n  --no-cache \\\n  --pull \\\n  -t lscr.io/linuxserver/kali-linux:latest .\n```\n\nThe ARM variants can be built on x86_64 hardware and vice versa using `lscr.io/linuxserver/qemu-static`\n\n```bash\ndocker run --rm --privileged lscr.io/linuxserver/qemu-static --reset\n```\n\nOnce registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.\n\n## Versions\n\n* **29.03.26:** - Make Wayland default disable with PIXELFLUX_WAYLAND=false.\n* **28.12.25:** - Add Wayland init logic.\n* **19.06.25:** - Rebase to Selkies baseimage.\n* **24.01.25:** - Fix SVG icons not rendering.\n* **18.07.24:** - Initial release.\n","funding_links":["https://github.com/sponsors/linuxserver","https://opencollective.com/linuxserver"],"categories":["hacktoberfest"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flinuxserver%2Fdocker-kali-linux","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flinuxserver%2Fdocker-kali-linux","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flinuxserver%2Fdocker-kali-linux/lists"}