</span></code></pre></div><p>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.</p><h3id=dri3-gpu-acceleration-kasmvnc-interface>DRI3 GPU Acceleration (KasmVNC interface)<aclass=headerlinkhref=#dri3-gpu-acceleration-kasmvnc-interfacetitle="Permanent link">¶</a></h3><p>For accelerated apps or games, render devices can be mounted into the container and leveraged by applications using:</p><p><code>--device /dev/dri:/dev/dri</code></p><p>This feature only supports <strong>Open Source</strong> GPU drivers:</p><table><thead><tr><thstyle="text-align: center;">Driver</th><th>Description</th></tr></thead><tbody><tr><tdstyle="text-align: center;">Intel</td><td>i965 and i915 drivers for Intel iGPU chipsets</td></tr><tr><tdstyle="text-align: center;">AMD</td><td>AMDGPU, Radeon, and ATI drivers for AMD dedicated or APU chipsets</td></tr><tr><tdstyle="text-align: center;">NVIDIA</td><td>nouveau2 drivers only, closed source NVIDIA drivers lack DRI3 support</td></tr></tbody></table><p>The <code>DRINODE</code> environment variable can be used to point to a specific GPU. Up to date information can be found <ahref=https://www.kasmweb.com/kasmvnc/docs/master/gpu_acceleration.html>here</a></p><h3id=nvidia-gpu-support-kasmvnc-interface>Nvidia GPU Support (KasmVNC interface)<aclass=headerlinkhref=#nvidia-gpu-support-kasmvnc-interfacetitle="Permanent link">¶</a></h3><p><strong>Nvidia support is not compatible with Alpine based images as Alpine lacks Nvidia drivers</strong></p><p>Nvidia support is available by leveraging Zink for OpenGL support. This can be enabled with the following run flags:</p><table><thead><tr><thstyle="text-align: center;">Variable</th><th>Description</th></tr></thead><tbody><tr><tdstyle="text-align: center;">--gpus all</td><td>This can be filtered down but for most setups this will pass the one Nvidia GPU on the system</td></tr><tr><tdstyle="text-align: center;">--runtime nvidia</td><td>Specify the Nvidia runtime which mounts drivers and tools in from the host</td></tr></tbody></table><p>The compose syntax is slightly different for this as you will need to set nvidia as the default runtime:</p><divclass="language-text highlight"><pre><span></span><code><spanid=__span-1-1><aid=__codelineno-1-1name=__codelineno-1-1href=#__codelineno-1-1></a>sudo nvidia-ctk runtime configure --runtime=docker --set-as-default
</span><spanid=__span-1-2><aid=__codelineno-1-2name=__codelineno-1-2href=#__codelineno-1-2></a>sudo service docker restart
</span></code></pre></div><p>And to assign the GPU in compose:</p><divclass="language-text highlight"><pre><span></span><code><spanid=__span-2-1><aid=__codelineno-2-1name=__codelineno-2-1href=#__codelineno-2-1></a>services:
</span></code></pre></div><h3id=application-management>Application management<aclass=headerlinkhref=#application-managementtitle="Permanent link">¶</a></h3><h4id=proot-apps>PRoot Apps<aclass=headerlinkhref=#proot-appstitle="Permanent link">¶</a></h4><p>If you run system native installations of software IE <code>sudo apt-get install filezilla</code> and then upgrade or destroy/re-create the container that software will be removed and the container will be at a clean state. For some users that will be acceptable and they can update their system packages as well using system native commands like <code>apt-get upgrade</code>. If you want Docker to handle upgrading the container and retain your applications and settings we have created <ahref=https://github.com/linuxserver/proot-apps>proot-apps</a> which allow portable applications to be installed to persistent storage in the user's <code>$HOME</code> directory and they will work in a confined Docker environment out of the box. These applications and their settings will persist upgrades of the base container and can be mounted into different flavors of KasmVNC based containers on the fly. This can be achieved from the command line with:</p><divclass="language-text highlight"><pre><span></span><code><spanid=__span-3-1><aid=__codelineno-3-1name=__codelineno-3-1href=#__codelineno-3-1></a>proot-apps install filezilla
</span></code></pre></div><p>PRoot Apps is included in all KasmVNC based containers, a list of linuxserver.io supported applications is located <ahref="https://github.com/linuxserver/proot-apps?tab=readme-ov-file#supported-apps">HERE</a>.</p><h4id=native-apps>Native Apps<aclass=headerlinkhref=#native-appstitle="Permanent link">¶</a></h4><p>It is possible to install extra packages during container start using <ahref=https://github.com/linuxserver/docker-mods/tree/universal-package-install>universal-package-install</a>. It might increase starting time significantly. PRoot is preferred.</p><divclass="language-yaml highlight"><pre><span></span><code><spanid=__span-4-1><aid=__codelineno-4-1name=__codelineno-4-1href=#__codelineno-4-1></a><spanclass=w></span><spanclass=nt>environment</span><spanclass=p>:</span>
</span></code></pre></div><h2id=usage>Usage<aclass=headerlinkhref=#usagetitle="Permanent link">¶</a></h2><p>To help you get started creating a container from this image you can either use docker-compose or the docker cli.</p><divclass="admonition info"><pclass=admonition-title>Info</p><p>Unless a parameter is flaged as 'optional', it is <em>mandatory</em> and a value must be provided.</p></div><h3id=docker-compose-recommended-click-here-for-more-info>docker-compose (recommended, <ahref=https://docs.linuxserver.io/general/docker-compose>click here for more info</a>)<aclass=headerlinkhref=#docker-compose-recommended-click-here-for-more-infotitle="Permanent link">¶</a></h3><divclass="language-yaml highlight"><pre><span></span><code><spanid=__span-5-1><aid=__codelineno-5-1name=__codelineno-5-1href=#__codelineno-5-1></a><spanclass=nn>---</span>
</span></code></pre></div><h3id=docker-cli-click-here-for-more-info>docker cli (<ahref=https://docs.docker.com/engine/reference/commandline/cli/>click here for more info</a>)<aclass=headerlinkhref=#docker-cli-click-here-for-more-infotitle="Permanent link">¶</a></h3><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-6-1><aid=__codelineno-6-1name=__codelineno-6-1href=#__codelineno-6-1></a>docker<spanclass=w></span>run<spanclass=w></span>-d<spanclass=w></span><spanclass=se>\</span>
</span></code></pre></div><h2id=parameters>Parameters<aclass=headerlinkhref=#parameterstitle="Permanent link">¶</a></h2><p>Containers are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate <code><external>:<internal></code> respectively. For example, <code>-p 8080:80</code> would expose port <code>80</code> from inside the container to be accessible from the host's IP on port <code>8080</code> outside the container.</p><h3id=ports-p>Ports (<code>-p</code>)<aclass=headerlinkhref=#ports-ptitle="Permanent link">¶</a></h3><table><thead><tr><thstyle="text-align: center;">Parameter</th><th>Function</th></tr></thead><tbody><tr><tdstyle="text-align: center;"><code>3000:3000</code></td><td>Double Commander desktop gui.</td></tr><tr><tdstyle="text-align: center;"><code>3001:3001</code></td><td>Double Commander desktop gui HTTPS.</td></tr></tbody></table><h3id=environment-variables-e>Environment Variables (<code>-e</code>)<aclass=headerlinkhref=#environment-variables-etitle="Permanent link">¶</a></h3><table><thead><tr><thstyle="text-align: center;">Env</th><th>Function</th></tr></thead><tbody><tr><tdstyle="text-align: center;"><code>PUID=1000</code></td><td>for UserID - see below for explanation</td></tr><tr><tdstyle="text-align: center;"><code>PGID=1000</code></td><td>for GroupID - see below for explanation</td></tr><tr><tdstyle="text-align: center;"><code>TZ=Etc/UTC</code></td><td>specify a timezone to use, see this <ahref=https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List>list</a>.</td></tr></tbody></table><h3id=volume-mappings-v>Volume Mappings (<code>-v</code>)<aclass=headerlinkhref=#volume-mappings-vtitle="Permanent link">¶</a></h3><table><thead><tr><thstyle="text-align: center;">Volume</th><th>Function</th></tr></thead><tbody><tr><tdstyle="text-align: center;"><code>/config</code></td><td>Users home directory in the container, stores program settings.</td></tr><tr><tdstyle="text-align: center;"><code>/data</code></td><td>Host data directories, mount as many as needed.</td></tr></tbody></table><h4id=miscellaneous-options>Miscellaneous Options<aclass=headerlinkhref=#miscellaneous-optionstitle="Permanent link">¶</a></h4><table><thead><tr><thstyle="text-align: center;">Parameter</th><th>Function</th></tr></thead><tbody><tr><td></td><td></td></tr></tbody></table><h2id=environment-variables-from-files-docker-secrets>Environment variables from files (Docker secrets)<aclass=headerlinkhref=#environment-variables-from-files-docker-secretstitle="Permanent link">¶</a></h2><p>You can set any environment variable from a file by using a special prepend <code>FILE__</code>.</p><p>As an example:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-7-1><aid=__codelineno-7-1name=__codelineno-7-1href=#__codelineno-7-1></a>-e<spanclass=w></span><spanclass=nv>FILE__MYVAR</span><spanclass=o>=</span>/run/secrets/mysecretvariable
</span></code></pre></div><p>Will set the environment variable <code>MYVAR</code> based on the contents of the <code>/run/secrets/mysecretvariable</code> file.</p><h2id=umask-for-running-applications>Umask for running applications<aclass=headerlinkhref=#umask-for-running-applicationstitle="Permanent link">¶</a></h2><p>For all of our images we provide the ability to override the default umask settings for services started within the containers using the optional <code>-e UMASK=022</code> setting. Keep in mind umask is not chmod it subtracts from permissions based on it's value it does not add. Please read up <ahref=https://en.wikipedia.org/wiki/Umask>here</a> before asking for support.</p><h2id=user-group-identifiers>User / Group Identifiers<aclass=headerlinkhref=#user-group-identifierstitle="Permanent link">¶</a></h2><p>When using volumes (<code>-v</code> flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user <code>PUID</code> and group <code>PGID</code>.</p><p>Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.</p><p>In this instance <code>PUID=1000</code> and <code>PGID=1000</code>, to find yours use <code>id your_user</code> as below:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-8-1><aid=__codelineno-8-1name=__codelineno-8-1href=#__codelineno-8-1></a>id<spanclass=w></span>your_user
</span></code></pre></div><h2id=docker-mods>Docker Mods<aclass=headerlinkhref=#docker-modstitle="Permanent link">¶</a></h2><p><ahref="https://mods.linuxserver.io/?mod=doublecommander"title="view available mods for this container."><imgalt="Docker Mods"src="https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=doublecommander&query=%24.mods%5B%27doublecommander%27%5D.mod_count&url=https%3A%2F%2Fraw.githubusercontent.com%2Flinuxserver%2Fdocker-mods%2Fmaster%2Fmod-list.yml"></a><ahref="https://mods.linuxserver.io/?mod=universal"title="view available universal mods."><imgalt="Docker Universal Mods"src="https://img.shields.io/badge/dynamic/yaml?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=universal&query=%24.mods%5B%27universal%27%5D.mod_count&url=https%3A%2F%2Fraw.githubusercontent.com%2Flinuxserver%2Fdocker-mods%2Fmaster%2Fmod-list.yml"></a></p><p>We publish various <ahref=https://github.com/linuxserver/docker-mods>Docker Mods</a> 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.</p><h2id=support-info>Support Info<aclass=headerlinkhref=#support-infotitle="Permanent link">¶</a></h2><ul><li><p>Shell access whilst the container is running:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-10-1><aid=__codelineno-10-1name=__codelineno-10-1href=#__codelineno-10-1></a>docker<spanclass=w></span><spanclass=nb>exec</span><spanclass=w></span>-it<spanclass=w></span>doublecommander<spanclass=w></span>/bin/bash
</span></code></pre></div></li><li><p>To monitor the logs of the container in realtime:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-11-1><aid=__codelineno-11-1name=__codelineno-11-1href=#__codelineno-11-1></a>docker<spanclass=w></span>logs<spanclass=w></span>-f<spanclass=w></span>doublecommander
</span></code></pre></div></li><li><p>Container version number:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-12-1><aid=__codelineno-12-1name=__codelineno-12-1href=#__codelineno-12-1></a>docker<spanclass=w></span>inspect<spanclass=w></span>-f<spanclass=w></span><spanclass=s1>'{{ index .Config.Labels "build_version" }}'</span><spanclass=w></span>doublecommander
</span></code></pre></div></li><li><p>Image version number:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-13-1><aid=__codelineno-13-1name=__codelineno-13-1href=#__codelineno-13-1></a>docker<spanclass=w></span>inspect<spanclass=w></span>-f<spanclass=w></span><spanclass=s1>'{{ index .Config.Labels "build_version" }}'</span><spanclass=w></span>lscr.io/linuxserver/doublecommander:latest
</span></code></pre></div></li></ul><h2id=updating-info>Updating Info<aclass=headerlinkhref=#updating-infotitle="Permanent link">¶</a></h2><p>Most 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 <ahref=#application-setup>Application Setup</a> section above to see if it is recommended for the image.</p><p>Below are the instructions for updating containers:</p><h3id=via-docker-compose>Via Docker Compose<aclass=headerlinkhref=#via-docker-composetitle="Permanent link">¶</a></h3><ul><li><p>Update images:</p><ul><li><p>All images:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-14-1><aid=__codelineno-14-1name=__codelineno-14-1href=#__codelineno-14-1></a>docker-compose<spanclass=w></span>pull
</span></code></pre></div></li></ul></li><li><p>You can also remove the old dangling images:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-18-1><aid=__codelineno-18-1name=__codelineno-18-1href=#__codelineno-18-1></a>docker<spanclass=w></span>image<spanclass=w></span>prune
</span></code></pre></div></li></ul><h3id=via-docker-run>Via Docker Run<aclass=headerlinkhref=#via-docker-runtitle="Permanent link">¶</a></h3><ul><li><p>Update the image:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-19-1><aid=__codelineno-19-1name=__codelineno-19-1href=#__codelineno-19-1></a>docker<spanclass=w></span>pull<spanclass=w></span>lscr.io/linuxserver/doublecommander:latest
</span></code></pre></div></li><li><p>Stop the running container:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-20-1><aid=__codelineno-20-1name=__codelineno-20-1href=#__codelineno-20-1></a>docker<spanclass=w></span>stop<spanclass=w></span>doublecommander
</span></code></pre></div></li><li><p>Delete the container:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-21-1><aid=__codelineno-21-1name=__codelineno-21-1href=#__codelineno-21-1></a>docker<spanclass=w></span>rm<spanclass=w></span>doublecommander
</span></code></pre></div></li><li><p>Recreate a new container with the same docker run parameters as instructed above (if mapped correctly to a host folder, your <code>/config</code> folder and settings will be preserved)</p></li><li><p>You can also remove the old dangling images:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-22-1><aid=__codelineno-22-1name=__codelineno-22-1href=#__codelineno-22-1></a>docker<spanclass=w></span>image<spanclass=w></span>prune
</span></code></pre></div></li></ul><h3id=image-update-notifications-diun-docker-image-update-notifier>Image Update Notifications - Diun (Docker Image Update Notifier)<aclass=headerlinkhref=#image-update-notifications-diun-docker-image-update-notifiertitle="Permanent link">¶</a></h3><divclass="admonition tip"><pclass=admonition-title>Tip</p><p>We recommend <ahref=https://crazymax.dev/diun/>Diun</a> for update notifications. Other tools that automatically update containers unattended are not recommended or supported.</p></div><h2id=building-locally>Building locally<aclass=headerlinkhref=#building-locallytitle="Permanent link">¶</a></h2><p>If you want to make local modifications to these images for development purposes or just to customize the logic:</p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-23-1><aid=__codelineno-23-1name=__codelineno-23-1href=#__codelineno-23-1></a>git<spanclass=w></span>clone<spanclass=w></span>https://github.com/linuxserver/docker-doublecommander.git
</span></code></pre></div><p>The ARM variants can be built on x86_64 hardware and vice versa using <code>lscr.io/linuxserver/qemu-static</code></p><divclass="language-bash highlight"><pre><span></span><code><spanid=__span-24-1><aid=__codelineno-24-1name=__codelineno-24-1href=#__codelineno-24-1></a>docker<spanclass=w></span>run<spanclass=w></span>--rm<spanclass=w></span>--privileged<spanclass=w></span>lscr.io/linuxserver/qemu-static<spanclass=w></span>--reset
</span></code></pre></div><p>Once registered you can define the dockerfile to use with <code>-f Dockerfile.aarch64</code>.</p><p>To help with development, we generate this dependency graph.</p><detailsclass=info><summary>Init dependency graph</summary><divclass=d2><divclass=d2-light><svgdata-d2-version=v0.7.0preserveaspectratio="xMinYMin meet"viewbox="0 0 1027 4682"role=imgaria-label=Diagram><svgclass="d2-0a9fbccef81f45ff9be3fd32b042d896 d2-svg"width=1027height=4682viewbox="11 11 1027 4682"><rectx=11.000000y=11.000000width=1027.000000height=4682.000000rx=0.000000fill=#FFFFFFstroke-width=0class=" fill-N7"/><styletype=text/css>