Guide to getting Winapps working on Bazzite
I did this in Bazzite with KDE. I wouldn’t consider myself knowledgeable about WinApps and how it functions. So feel free to ask questions but don’t expect me to be able to answer confidently. I just wanted to catalogue how I went about installing it, to make it easier for others, and hopefully to look at automating it.
I tried to do this a month or so ago but I was having problems luckily these seem to have resolved themselves with updates and pulling the latest changes from WinApps.
Thanks to “ddjivan” for letting me know they’d gotten it working and helping me out a bit.
I tried my best but you may still encounter issues. Let me know if you do and I’ll update the guide. Make sure you’re on Bazzite 40 or above to get FreeRDP3
Open a terminal (We’ll call this Terminal A):
We need to install 3 packages, I’ll provide options for each (If you go the rpm-ostree route feel to combine them together to speed things up):
-
podman-compose:
pip install podman-compose
rpm-ostree install --apply-live podman-compose
-
dialog
brew install dialog
rpm-ostree install --apply-live dialog
-
netcat
rpm-ostree install --apply-live nmap-ncat
Notes:
git clone --recurse-submodules --remote-submodules https://github.com/winapps-org/winapps.git && cd winapps
Open another terminal tab/window (Terminal B):
We need to create a “winapps config” file to do that we’ll create a root folder:
mkdir ~/.config/winapps/
Then create a winapps.conf
using the template:
nano ~/.config/winapps/winapps.conf
Some changes that need to be made are:
- Set
RDP_USER
and RDP_PASS
to what you want your Windows user account login to be.
- Set
WAFLAVOR="podman"
.
Back in Terminal A:
Now we need to modify the compose.yaml
file:
- Make sure to set
USERNAME
& PASSWORD
to match what you put in your winapps.conf
config’s RDP_USER
& RDP_PASS
respectively.
- Change image to:
docker.io/dockurr/windows
. Prevents issues with Podman and default repo.
- By default
Tiny11
direct downloads from Archive.org… very slowly. I recommend downloading via torrent and placing the ISO into the winapps
folder under isos/tiny11 23H2 x64.iso
. I then added - ./isos/tiny11 23H2 x64.iso:/custom.iso
as a volume.
From there follow the steps under the “Installing Windows” heading. (You can skip the cd winapps
bit as you should already be in there)
From here you can install Office or whatever Windows applications you want from your browser. When you’re ready from “Terminal A” run:
./installer.sh
You’ll get a nice terminal interface which you should be able to figure out from here. Don’t worry about messing anything up, the “Uninstall” option removes everything allowing you to go through the “Install” again if need be.
Your applications should now be in your application menu and can be opened from there.
Notes:
- If you want to scrap your Windows container, after stopping it you can:
podman rm WinApps
podman volume rm winapps_data -F
- There’s more information to be found at the docker/podman guide and under the readme’s Installation header.
- Don’t worry about booting it on startup. When starting a Windows app it should automatically attempt to boot the container for you though you may have to give it a second (or even a second attempt).
Here’s my files compose.yaml and winapps.conf:
Remember to comment out the oem and custom.iso lines when you get to that step.
compose.yaml
# For documentation, FAQ, additional configuration options and technical help, visit: https://github.com/dockur/windows
name: "winapps" # Docker Compose Project Name.
volumes:
# Create Volume 'data'.
# Located @ '/var/lib/docker/volumes/winapps_data/_data' (Docker).
# Located @ '/var/lib/containers/storage/volumes/winapps_data/_data' or '~/.local/share/containers/storage/volumes/winapps_data/_data' (Podman).
data:
services:
windows:
image: docker.io/dockurr/windows # https://hub.docker.com/r/dockurr/windows
container_name: WinApps # Created Docker VM Name.
environment:
# Version of Windows to configure. For valid options, visit:
# https://github.com/dockur/windows?tab=readme-ov-file#how-do-i-select-the-windows-version
# https://github.com/dockur/windows?tab=readme-ov-file#how-do-i-install-a-custom-image
VERSION: "tiny11"
RAM_SIZE: "4G" # RAM allocated to the Windows VM.
CPU_CORES: "4" # CPU cores allocated to the Windows VM.
DISK_SIZE: "64G" # Size of the primary hard disk.
#DISK2_SIZE: "32G" # Uncomment to add an additional hard disk to the Windows VM. Ensure it is mounted as a volume below.
USERNAME: "Danny" # Uncomment to set a custom Windows username. The default is 'Docker'.
PASSWORD: "MyPassword" # Uncomment to set a password for the Windows user. There is no default password.
HOME: "${HOME}" # Set path to Linux user home folder.
privileged: true # Grant the Windows VM extended privileges.
ports:
- 8006:8006 # Map '8006' on Linux host to '8006' on Windows VM --> For VNC Web Interface @ http://127.0.0.1:8006.
- 3389:3389/tcp # Map '3389' on Linux host to '3389' on Windows VM --> For Remote Desktop Protocol (RDP).
- 3389:3389/udp # Map '3389' on Linux host to '3389' on Windows VM --> For Remote Desktop Protocol (RDP).
stop_grace_period: 120s # Wait 120 seconds before sending SIGTERM when attempting to shut down the Windows VM.
restart: on-failure # Restart the Windows VM if the exit code indicates an error.
volumes:
- data:/storage # Mount volume 'data' to use as Windows 'C:' drive.
- ${HOME}:/shared # Mount Linux user home directory @ '\\host.lan\Data'.
#- /path/to/second/hard/disk:/storage2 # Uncomment to mount the second hard disk within the Windows VM. Ensure 'DISK2_SIZE' is specified above.
- ./isos/tiny11 23H2 x64.iso:/custom.iso
- ./oem:/oem # Enables automatic post-install execution of 'oem/install.bat', applying Windows registry modifications contained within 'oem/RDPApps.reg'.
#- /path/to/windows/install/media.iso:/custom.iso # Uncomment to use a custom Windows ISO. If specified, 'VERSION' (e.g. 'tiny11') will be ignored.
devices:
- /dev/kvm # Enable KVM.
#- /dev/sdX:/disk1 # Uncomment to mount a disk directly within the Windows VM (Note: 'disk1' will be mounted as the main drive).
#- /dev/sdY:/disk2 # Uncomment to mount a disk directly within the Windows VM (Note: 'disk2' and higher will be mounted as secondary drives).
winapps.conf
##################################
# WINAPPS CONFIGURATION FILE #
##################################
# INSTRUCTIONS
# - Leading and trailing whitespace are ignored.
# - Empty lines are ignored.
# - Lines starting with '#' are ignored.
# - All characters following a '#' are ignored.
# [WINDOWS USERNAME]
RDP_USER="Danny"
# [WINDOWS PASSWORD]
RDP_PASS="MyPassword"
# [WINDOWS DOMAIN]
# DEFAULT VALUE: '' (BLANK)
#RDP_DOMAIN=""
# [WINDOWS IPV4 ADDRESS]
# NOTES:
# - If using 'libvirt', 'RDP_IP' will be determined by WinApps at runtime if left unspecified.
# DEFAULT VALUE:
# - 'docker': '127.0.0.1'
# - 'podman': '127.0.0.1'
# - 'libvirt': '' (BLANK)
#RDP_IP=""
# [WINAPPS BACKEND]
# DEFAULT VALUE: 'docker'
# VALID VALUES:
# - 'docker'
# - 'podman'
# - 'libvirt'
# - 'manual'
WAFLAVOR="podman"
# [DISPLAY SCALING FACTOR]
# NOTES:
# - If an unsupported value is specified, a warning will be displayed.
# - If an unsupported value is specified, WinApps will use the closest supported value.
# DEFAULT VALUE: '100'
# VALID VALUES:
# - '100'
# - '140'
# - '180'
RDP_SCALE="100"
# [ADDITIONAL FREERDP FLAGS & ARGUMENTS]
# DEFAULT VALUE: '' (BLANK)
# VALID VALUES: See https://github.com/awakecoding/FreeRDP-Manuals/blob/88c0158c896565214e6b145f67e95efe8dee883f/User/FreeRDP-User-Manual.markdown
RDP_FLAGS=""
# [MULTIPLE MONITORS]
# NOTES:
# - If enabled, a FreeRDP bug *might* produce a black screen.
# DEFAULT VALUE: 'false'
# VALID VALUES:
# - 'true'
# - 'false'
MULTIMON="false"
# [DEBUG WINAPPS]
# NOTES:
# - Creates and appends to ~/.local/share/winapps/winapps.log when running WinApps.
# DEFAULT VALUE: 'true'
# VALID VALUES:
# - 'true'
# - 'false'
DEBUG="true"
# [AUTOMATICALLY PAUSE WINDOWS]
# NOTES:
# - This is currently INCOMPATIBLE with 'docker' and 'manual'.
# - See https://github.com/dockur/windows/issues/674
# DEFAULT VALUE: 'off'
# VALID VALUES:
# - 'on'
# - 'off'
AUTOPAUSE="off"
# [AUTOMATICALLY PAUSE WINDOWS TIMEOUT]
# NOTES:
# - This setting determines the duration of inactivity to tolerate before Windows is automatically paused.
# - This setting is ignored if 'AUTOPAUSE' is set to 'off'.
# - The value must be specified in seconds (to the nearest 10 seconds e.g., '30', '40', '50', etc.).
# - For RemoteApp RDP sessions, there is a mandatory 20-second delay, so the minimum value that can be specified here is '20'.
# - Source: https://techcommunity.microsoft.com/t5/security-compliance-and-identity/terminal-services-remoteapp-8482-session-termination-logic/ba-p/246566
# DEFAULT VALUE: '300'
# VALID VALUES: >=20
AUTOPAUSE_TIME="300"
# [FREERDP COMMAND]
# NOTES:
# - WinApps will attempt to automatically detect the correct command to use for your system.
# DEFAULT VALUE: '' (BLANK)
# VALID VALUES: The command required to run FreeRDPv3 on your system (e.g., 'xfreerdp', 'xfreerdp3', etc.).
#FREERDP_COMMAND=""