···11+##################################
22+# WINAPPS CONFIGURATION FILE #
33+##################################
44+55+# INSTRUCTIONS
66+# - Leading and trailing whitespace are ignored.
77+# - Empty lines are ignored.
88+# - Lines starting with '#' are ignored.
99+# - All characters following a '#' are ignored.
1010+1111+# [WINDOWS USERNAME]
1212+RDP_USER="Simon"
1313+1414+# [WINDOWS PASSWORD]
1515+# NOTES:
1616+# - If using FreeRDP v3.9.0 or greater, you *have* to set a password
1717+# - RDP_ASKPASS is provided as a more secure option to RDP_PASS:
1818+# - Calls an external command and uses its stdout as the password
1919+# - The password is not passed on the command line to freerdp, keeping it out of logs
2020+# - If specified, takes precedence over RDP_PASS
2121+# - Examples to use this:
2222+# - RDP_ASKPASS="~/some-custom-command"
2323+# - RDP_ASKPASS="bash -c 'cat ~/.some-secret-file'"
2424+# - RDP_ASKPASS="bash -c 'kwallet-query --folder winapps --read-password rdp kdewallet'"
2525+#
2626+RDP_PASS="MyWindowsPassword"
2727+RDP_ASKPASS=""
2828+2929+# [WINDOWS DOMAIN]
3030+# DEFAULT VALUE: '' (BLANK)
3131+RDP_DOMAIN=""
3232+3333+# [WINDOWS IPV4 ADDRESS]
3434+# NOTES:
3535+# - If using 'libvirt', 'RDP_IP' will be determined by WinApps at runtime if left unspecified.
3636+# DEFAULT VALUE:
3737+# - 'docker': '127.0.0.1'
3838+# - 'podman': '127.0.0.1'
3939+# - 'libvirt': '' (BLANK)
4040+RDP_IP="127.0.0.1"
4141+4242+# [RDP PORT]
4343+# NOTES:
4444+# - For Docker and Podman, this is the host port mapped to Windows port 3389.
4545+# - If you changed the host-side RDP port in compose.yaml, set this to match.
4646+# DEFAULT VALUE: '3389'
4747+RDP_PORT="3389"
4848+4949+# [VM NAME]
5050+# NOTES:
5151+# - Only applicable when using 'libvirt'
5252+# - The libvirt VM name must match so that WinApps can determine VM IP, start the VM, etc.
5353+# DEFAULT VALUE: 'RDPWindows'
5454+VM_NAME="RDPWindows"
5555+5656+# [WINAPPS BACKEND]
5757+# DEFAULT VALUE: 'docker'
5858+# VALID VALUES:
5959+# - 'docker'
6060+# - 'podman'
6161+# - 'libvirt'
6262+# - 'manual'
6363+WAFLAVOR="docker"
6464+6565+# [DISPLAY SCALING FACTOR]
6666+# NOTES:
6767+# - If an unsupported value is specified, a warning will be displayed.
6868+# - If an unsupported value is specified, WinApps will use the closest supported value.
6969+# DEFAULT VALUE: '100'
7070+# VALID VALUES:
7171+# - '100'
7272+# - '140'
7373+# - '180'
7474+RDP_SCALE="100"
7575+7676+# [MOUNTING REMOVABLE PATHS FOR FILES]
7777+# NOTES:
7878+# - By default, `udisks` (which you most likely have installed) uses /run/media for mounting removable devices.
7979+# This improves compatibility with most desktop environments (DEs).
8080+# ATTENTION: The Filesystem Hierarchy Standard (FHS) recommends /media instead. Verify your system's configuration.
8181+# - To manually mount devices, you may optionally use /mnt.
8282+# REFERENCE: https://wiki.archlinux.org/title/Udisks#Mount_to_/media
8383+REMOVABLE_MEDIA="/run/media"
8484+8585+# [ADDITIONAL FREERDP FLAGS & ARGUMENTS]
8686+# NOTES:
8787+# - You can try adding /network:lan to these flags in order to increase performance, however, some users have faced issues with this.
8888+# If this does not work or if it does not work without the flag, you can try adding /nsc and /gfx.
8989+# DEFAULT VALUE: '/cert:tofu /sound /microphone +home-drive'
9090+# VALID VALUES: See https://github.com/awakecoding/FreeRDP-Manuals/blob/master/User/FreeRDP-User-Manual.markdown
9191+RDP_FLAGS="/cert:tofu /sound /microphone +home-drive"
9292+9393+# [NON FULL WINDOWS RDP FLAGS]
9494+# NOTES:
9595+# - Use these flags to pass specific flags to the freerdp command when you are starting a non-full RDP session (any other command than winapps windows)
9696+# DEFAULT_VALUES: ''
9797+# VALID_VALUES: See https://github.com/awakecoding/FreeRDP-Manuals/blob/master/User/FreeRDP-User-Manual.markdown
9898+RDP_FLAGS_NON_WINDOWS=""
9999+100100+# [FULL WINDOWS RDP FLAGS]
101101+# NOTES:
102102+# - Use these flags to pass specific flags to the freerdp command when you are starting a full RDP session (winapps windows)
103103+# DEFAULT_VALUES: ''
104104+# VALID_VALUES: See https://github.com/awakecoding/FreeRDP-Manuals/blob/master/User/FreeRDP-User-Manual.markdown
105105+RDP_FLAGS_WINDOWS=""
106106+107107+# [DEBUG WINAPPS]
108108+# NOTES:
109109+# - Creates and appends to ~/.local/share/winapps/winapps.log when running WinApps.
110110+# DEFAULT VALUE: 'true'
111111+# VALID VALUES:
112112+# - 'true'
113113+# - 'false'
114114+DEBUG="true"
115115+116116+# [AUTOMATICALLY PAUSE WINDOWS]
117117+# NOTES:
118118+# - This is currently INCOMPATIBLE with 'manual'.
119119+# DEFAULT VALUE: 'off'
120120+# VALID VALUES:
121121+# - 'on'
122122+# - 'off'
123123+AUTOPAUSE="off"
124124+125125+# [AUTOMATICALLY PAUSE WINDOWS TIMEOUT]
126126+# NOTES:
127127+# - This setting determines the duration of inactivity to tolerate before Windows is automatically paused.
128128+# - This setting is ignored if 'AUTOPAUSE' is set to 'off'.
129129+# - The value must be specified in seconds (to the nearest 10 seconds e.g., '30', '40', '50', etc.).
130130+# - For RemoteApp RDP sessions, there is a mandatory 20-second delay, so the minimum value that can be specified here is '20'.
131131+# - Source: https://techcommunity.microsoft.com/t5/security-compliance-and-identity/terminal-services-remoteapp-8482-session-termination-logic/ba-p/246566
132132+# DEFAULT VALUE: '300'
133133+# VALID VALUES: >=20
134134+AUTOPAUSE_TIME="300"
135135+136136+# [FREERDP COMMAND]
137137+# NOTES:
138138+# - WinApps will attempt to automatically detect the correct command to use for your system.
139139+# DEFAULT VALUE: '' (BLANK)
140140+# VALID VALUES: The command required to run FreeRDPv3 on your system (e.g., 'xfreerdp', 'xfreerdp3', etc.).
141141+FREERDP_COMMAND=""
142142+143143+# [TIMEOUTS]
144144+# NOTES:
145145+# - These settings control various timeout durations within the WinApps setup.
146146+# - Increasing the timeouts is only necessary if the corresponding errors occur.
147147+# - Ensure you have followed all the Troubleshooting Tips in the error message first.
148148+149149+# PORT CHECK
150150+# - The maximum time (in seconds) to wait when checking if the RDP port on Windows is open.
151151+# - Corresponding error: "NETWORK CONFIGURATION ERROR" (exit status 13).
152152+# DEFAULT VALUE: '5'
153153+PORT_TIMEOUT="5"
154154+155155+# RDP CONNECTION TEST
156156+# - The maximum time (in seconds) to wait when testing the initial RDP connection to Windows.
157157+# - Corresponding error: "REMOTE DESKTOP PROTOCOL FAILURE" (exit status 14).
158158+# DEFAULT VALUE: '30'
159159+RDP_TIMEOUT="30"
160160+161161+# APPLICATION SCAN
162162+# - The maximum time (in seconds) to wait for the script that scans for installed applications on Windows to complete.
163163+# - Corresponding error: "APPLICATION QUERY FAILURE" (exit status 15).
164164+# DEFAULT VALUE: '60'
165165+APP_SCAN_TIMEOUT="60"
166166+167167+# WINDOWS BOOT
168168+# - The maximum time (in seconds) to wait for the Windows VM to boot if it is not running, before attempting to launch an application.
169169+# DEFAULT VALUE: '120'
170170+BOOT_TIMEOUT="120"
171171+172172+# FREERDP RAIL HIDEF
173173+# - This option controls the value of the `hidef` option passed to the /app parameter of the FreeRDP command.
174174+# - Setting this option to 'off' may resolve window misalignment issues related to maximized windows.
175175+# DEFAULT VALUE: 'on'
176176+HIDEF="on"
+49
modules/winapps/windows.yaml
···11+# For documentation, FAQ, additional configuration options and technical help, visit: https://github.com/dockur/windows
22+33+name: "winapps" # Docker Compose Project Name.
44+volumes:
55+ # Create Volume 'data'.
66+ # Located @ '/var/lib/docker/volumes/winapps_data/_data' (Docker).
77+ # Located @ '/var/lib/containers/storage/volumes/winapps_data/_data' or '~/.local/share/containers/storage/volumes/winapps_data/_data' (Podman).
88+ data:
99+services:
1010+ windows:
1111+ image: ghcr.io/dockur/windows:latest
1212+ container_name: WinApps # Created Docker VM Name.
1313+ environment:
1414+ # Version of Windows to configure. For valid options, visit:
1515+ # https://github.com/dockur/windows?tab=readme-ov-file#how-do-i-select-the-windows-version
1616+ # https://github.com/dockur/windows?tab=readme-ov-file#how-do-i-install-a-custom-image
1717+ VERSION: "11"
1818+ RAM_SIZE: "4G" # RAM allocated to the Windows VM.
1919+ CPU_CORES: "4" # CPU cores allocated to the Windows VM.
2020+ DISK_SIZE: "64G" # Size of the primary hard disk.
2121+ # DISK2_SIZE: "32G" # Uncomment to add an additional hard disk to the Windows VM. Ensure it is mounted as a volume below.
2222+ USERNAME: "Simon" # Edit here to set a custom Windows username. The default is 'MyWindowsUser'.
2323+ PASSWORD: "MyWindowsPassword" # Edit here to set a password for the Windows user. The default is 'MyWindowsPassword'.
2424+ HOME: "${HOME}" # Set path to Linux user home folder.
2525+ ports:
2626+ - 8006:8006 # Map '8006' on Linux host to '8006' on Windows VM --> For VNC Web Interface @ http://127.0.0.1:8006.
2727+ - 3389:3389/tcp # Map '3389' on Linux host to '3389' on Windows VM --> For Remote Desktop Protocol (RDP).
2828+ - 3389:3389/udp # Map '3389' on Linux host to '3389' on Windows VM --> For Remote Desktop Protocol (RDP).
2929+ cap_add:
3030+ - NET_ADMIN # Add network permission
3131+ stop_grace_period: 120s # Wait 120 seconds before sending SIGTERM when attempting to shut down the Windows VM.
3232+ restart: on-failure # Restart the Windows VM if the exit code indicates an error.
3333+ volumes:
3434+ - data:/storage # Mount volume 'data' to use as Windows 'C:' drive.
3535+ - ${HOME}:/shared # Mount Linux user home directory @ '\\host.lan\Data'.
3636+ #- /path/to/second/hard/disk:/storage2 # Uncomment to create a virtual second hard disk and mount it within the Windows VM. Ensure 'DISK2_SIZE' is specified above.
3737+ - ./oem:/oem # Enables automatic post-install execution of 'oem/install.bat', applying Windows registry modifications contained within 'oem/RDPApps.reg'.
3838+ #- /path/to/windows/install/media.iso:/custom.iso # Uncomment to use a custom Windows ISO. If specified, 'VERSION' (e.g. 'tiny11') will be ignored.
3939+ devices:
4040+ - /dev/kvm # Enable KVM.
4141+ - /dev/net/tun # Enable tuntap
4242+ # Uncomment to mount a disk directly within the Windows VM.
4343+ # WARNING: /dev/sdX paths may change after reboot. Use persistent identifiers!
4444+ # NOTE: 'disk1' will be mounted as the main drive. THIS DISK WILL BE FORMATTED BY DOCKER.
4545+ # All following disks (disk2, ...) WILL NOT BE FORMATTED.
4646+ # - /dev/disk/by-id/<id>:/disk1
4747+ # - /dev/disk/by-id/<id>:/disk2
4848+ # group_add: # uncomment this line and the next one for using rootless podman containers
4949+ # - keep-groups # to make /dev/kvm work with podman. needs "crun" installed, "runc" will not work! Add your user to the 'kvm' group or another that can access /dev/kvm.