Game with Linux anywhere, no installation required!
winesapOS makes it easy to setup Linux and play games off an internal or portable external drive.
This project provides an opinionated installation of Linux. It can be used on a flash drive, SD card, HDD, SSD, NVMe, or any other storage device. Both internal and external devices are fully supported. The release images are based on SteamOS 3 and the KDE Plasma desktop environment to align with what Valve's Steam Deck uses. Software for various games launchers are pre-installed. Additional drivers are installed to support Macs with Intel processors.
TABLE OF CONTENTS
These are reasons why macOS is inferior compared to Linux when it comes to gaming.
noatime
and nodiratime
to not write the access times for files and directories./tmp/
, /var/log/
, and /var/tmp/
) are mounted as RAM-only file systems.pacman
package manager is used.All Intel Macs are supported. Linux works on most Macs out-of-the-box these days. Drivers are pre-installed for newer hardware where native Linux support is missing.
Hardware | Supported | Third-Party Driver(s) |
---|---|---|
Keyboard | Yes | mbp2018-bridge-drv |
Mouse | Yes | mbp2018-bridge-drv |
NVMe | Yes | mbp2018-bridge-drv |
Sound | Yes | mbp2018-bridge-drv, snd_hda_macbookpro, and snd-hda-codec-cs8409 |
Touch Bar | Yes | mbp2018-bridge-drv and macbook12-spi-driver |
Bluetooth | Yes | None |
WiFi | Partial | None |
The mbp2018-bridge-drv driver provides support for the Apple T2 security chip found on newer Macs. Without this, no hardware would work on Linux.
Although we do not provide any additional drivers for wider WiFi support on Macs, the built-in Linux kernel drivers do support it for some devices. If your device does not work, consider purchasing a USB WiFi device that Linux natively supports by using this guide by Nick (morrownr).
For more information about Linux support on Macs, refer to the Linux on MacBook Pro compatibility guide.
winesapOS has been ported to the PS4 thanks to the hard work from Noob404 as part of the PS4Linux project.
We are actively working alongside these projects to help provide wider SteamOS 3 and/or Steam Deck support to the masses:
As of winesapOS 3.1.0, we now provide our own repository with some AUR packages pre-built. This repository works on Arch Linux, Manjaro, and SteamOS 3. It is enabled on winesapOS by default. Depending on what distribution you are on, here is how it can be enabled:
sudo sed -i s'/\[core]/[winesapos]\nServer = https:\/\/winesapos.lukeshort.cloud\/repo\/$repo\/$arch\nSigLevel = Never\n\n[core]/'g /etc/pacman.conf
sudo pacman -S -y -y
sudo sed -i s'/\[jupiter]/[winesapos]\nServer = https:\/\/winesapos.lukeshort.cloud\/repo\/$repo\/$arch\nSigLevel = Never\n\n[jupiter]/'g /etc/pacman.conf
sudo pacman -S -y -y
Features | SteamOS 3 | winesapOS 3 |
---|---|---|
SteamOS packages | Yes | Yes |
Arch Linux packages | Old | New |
Boot compatibility | UEFI | UEFI and legacy BIOS |
Graphics drivers | AMD | AMD, Intel, and NVIDIA |
Audio server | PipeWire | PipeWire |
Read-only file system | Yes | No |
Encrypted file system | No | Yes (secure image) |
File system backup type | A/B partitions | Btrfs snapshots |
Number of possible file system backups | 1 | Unlimited |
Package managers (CLI) | pacman, yay, flatpak | pacman, yay, flatpak, snap |
Preferred package manager (CLI) | flatpak | flatpak |
Package manager (GUI) | Discover (flatpak) | Discover (flatpak) and Pamac (pacman, yay/AUR, flatpak, and snap) |
Update type | Image-based | Package manager |
Number of installed packages | Small | Large |
Game launchers | Steam | Steam, Heroic Games Launcher, Lutris, and PolyMC |
Linux kernels | Neptune (5.13) | Neptune (5.13) and Linux LTS (5.15) |
Additional Mac drivers | No | Yes |
Desktop environment | Plasma | Plasma |
Desktop theme | Vapor | Vapor |
AMD FSR | Global | Per-game |
Gamescope | Global | Per-game |
Wine | Proton | Proton, GE-Proton, Wine Staging, and Wine-GE |
Game controller support | Large | Large |
exFAT flash drive storage | No | Yes (16 GB) |
Minimum:
Recommended:
winesapos-performance-<VERSION>.img.zip
winesapos-performance-<VERSION>.img.z01
winesapos-performance-<VERSION>.img.z02
winesapos-performance-<VERSION>.img.z03
winesapos-performance-<VERSION>.img.z04
winesapos-secure-<VERSION>.img.zip
winesapos-secure-<VERSION>.img.z01
winesapos-secure-<VERSION>.img.z02
winesapos-secure-<VERSION>.img.z03
winesapos-secure-<VERSION>.img.z04
winesapos-secure-<VERSION>.img.z05
winesapos-secure-<VERSION>.img.z06
winesapos-<VERSION>.img.zip
archive. This will automatically extract all of the other zip
file parts.
dd
CLI utility can be used to flash the image.Default accounts have a password set that mirror the username:
Username | Password |
---|---|
winesap | winesap |
root | root |
Username | Password |
---|---|
stick | stick |
root | root |
Upon first login, the "winesapOS First-Time Setup" wizard will launch. It will help setup graphics drivers, the locale, and time zone. The desktop shortcut is located at /home/winesap/.winesapos/winesapos-setup.desktop
and can be manually ran again.
Instead of using a release build which is already made, advanced users may want to create a custom build. This only requires 1 GiB of free space to download the live Arch Linux environment instead of the full 50 GiB for winesapOS. It also allows using environment variables to configure the build differently than the default release builds.
Download and setup the latest Arch Linux ISO onto a flash drive that has at least 1 GB of storage.
1a. We also support building winesapOS with Manjaro even though we do not provide release images for it. Download either the Plasma or Cinnamon desktop edition of Manjaro.
Boot into the flash drive.
Update the known packages cache and install git.
pacman -S -y
pacman -S git
Clone the stable branch and go to the "scripts" directory.
git clone --branch stable https://github.com/lukeshortcloud/winesapos.git
cd ./winesapos/scripts/
Configure environment variables to customize the build. At the very least, allow the build to work on bare-metal and define what /dev/<DEVICE>
block device to install to. BE CAREFUL AS THIS WILL DELETE ALL EXISTING DATA ON THAT DEVICE!
export WINESAPOS_BUILD_IN_VM_ONLY=false
lsblk
export WINESAPOS_DEVICE=<DEVICE>
Run the build.
sudo -E ./winesapos-install.sh
Check for any test failures (there should be no output from this command).
grep -P 'FAIL$' /winesapos/etc/winesapos/winesapos-install.log
For more detailed information on the build process, we recommend reading the entire DEVELOPER.md guide.
If using the secure image, the default LUKS encryption key is password
which should be changed after the first boot. Do not do this before the first boot as the default password is used to unlock the partition for it be resized to fill up the entire storage device. Change the LUKS encryption key for the fifth partition.
$ sudo cryptsetup luksChangeKey /dev/<DEVICE>5
The user account password for winesap
(or stick
on older versions) and root
are the same as the username. They are set to expire immediately. Upon first login, you will be prompted to enter a new password. Here is how to change it:
winesap
.winesap
again.These are the main differences between the performance secure images. The performance is focused on speed and ease-of-use. The secure image is recommended for advanced Linux users.
Feature | Performance | Secure |
---|---|---|
CPU Mitigations | No | Yes |
Encryption | No | Yes (LUKS) |
Firewall | No | Yes (Firewalld) |
Linux Kernel Updates | No | Yes |
Passwords Require Reset | No | Yes |
Boot the Mac into an external drive by pressing and releasing the power button. Then hold down the OPTION
key (or the ALT
key on a Windows keyboard) to access the Mac bootloader. Select the "EFI Boot" device.
IMPORTANT Any Mac with an Apple T2 Security Chip, which are all Macs made in and after 2018, needs to allow booting from external storage:
COMMAND
and r
keys to enter recovery mode.Upgrades are supported and recommended between all minor releases of winesapOS. For example, it is supported to go from 2.0.0 to 2.1.0 but not from 2.2.0 to 3.0.0. Major upgrades will be supported in a future release.
Where it makes sense, features are backported from newer versions of winesapOS. Bug and security fixes are also included to fix problems either with winesapOS itself or with upstream changes in SteamOS. Even if a user never upgrades winesapOS, users will continue to get regular system upgrades from SteamOS.
Before upgrading, please read the full UPGRADE.md notes. This showcases what updates will happen automatically and what updates may need to be manually applied.
Development builds do not support upgrades. Here are the releases that we do support upgrades on:
Release | Upgrades Supported |
---|---|
Stable | Yes |
Release Candidate (RC) | Yes |
Beta | No |
Alpha | No |
Here is how to upgrade winesapOS:
GUI = Launch the "winesapOS Upgrade" desktop shortcut.
CLI = Launch the winesapOS upgrade script from the stable branch.
curl https://raw.githubusercontent.com/LukeShortCloud/winesapOS/stable/scripts/winesapos-upgrade.sh | sudo zsh
Test booting up the drive first before buying speakers, a Bluetooth adapter, a WiFi adapter, and/or other hardware. Depending on the Mac, the built-in hardware may work out-of-the-box.
Temporarily allow the brcmfmac
and brcmutil
drivers to see if the built-in WiFi will work. Remove the relevant entries from /etc/modprobe.d/winesapos.conf
and then use modprobe
to manually load the drivers.
Plug additional hardware into a USB hub. Connect the USB hub to the computer before booting.
Do NOT move the USB hub after plugging it in and booting up Linux. It can easily disconnect leading to a corrupt file system.
Consider buying an SSD instead of a flash drive for a longer life-span, more storage, and faster speeds.
Avoid using Flatpak and Snap packages. These use a lot of additional space compared to native system packages. Programs packaged this way are also slower.
Delete old Btrfs backups when the drive is running low on storage space.
$ sudo snapper list
$ sudo snapper delete <SNAPSHOT_NUMBER>
Enable Proton for all Windows games. This will allow them to run in Linux. For more information about Proton, read this starter guide. Check the compatibility rating for games on Steam by using ProtonDB.
Settings > Steam Play > Enable Steam Play for Support Titles > Use this tool instead of game-specific selections from Steam > Compatibility tool: > (select the latest "Proton" version available) > OK
When Mac hardware is detected, all sound is muted on boot because on newer Macs the experimental sound driver is extremely loud. This means that any sound volume changes will be reset on the next boot. Here is how the mute configuration can be disabled to allow the sound volume to be saved:
winesapOS (major version >= 3)
Disable and stop the user (not system) mute
service.
$ systemctl --user disable --now mute.service
Mac Linux Gaming Stick (major version <= 2)
Move or delete the PulseAudio configuration.
$ mv /home/stick/.config/pulse/default.pa ~/
Both the root /
and /home
directory have automatic backups/snapshots configured by Snapper. A new backup will be taken every month for 12 months. Separately, a new backup will be taken once every year. The root directory will also have a backup taken whenever pacman
is used to install or remove a package.
During boot, GRUB will have a "Arch Linux snapshots" section that will allow booting from a root directory snapshot. This will not appear on first boot because no backups have been taken yet. After a backup has been taken, the GRUB configuration file needs to be regenerated to scan for the new backups.
Manually rebuild the GRUB configuration file to load the latest snapshots:
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
View the available backups:
$ sudo snapper -c root list
$ sudo snapper -c home list
Manually create a new backup:
$ sudo snapper -c <CONFIG> create
Manually delete a backup:
$ sudo snapper -c <CONFIG> delete <BACKUP_NUMBER>
Launch and prefer steam-runtime
over steam-native
. It bundles all of the libraries required for Steam to work. In case that has issues, steam-native
is provided as an alternative for testing purposes. It will use the system libraries instead.
A VPN is required for LAN gaming online. Hamachi is reported to no longer work on newer versions of Arch Linux and Ubuntu. Instead, use the free and open source ZeroTier VPN service.
Host
Clients
Start the ZeroTier VPN service.
$ sudo systemctl enable --now zerotier-one
Connect to the ZeroTier network.
$ sudo zerotier-cli join <NETWORK_ID>
Challenge: the release image fails to be extracted from the zip files.
Solutions:
Verify the integrity of the downloaded zip files.
Linux:
sha512sum --check winesapos-<IMAGE_TYPE>-<VERSION>_sha512sum.txt
Windows (open Command Prompt as Administrator):
C:\Windows\system32>CertUtil.exe -hashfile C:\Users\<USER>\Downloads\<FILE> SHA512
Not all zip files were downloaded. This includes the files ending in .zip
and .z<NUMBER>
.
Not enough free space. Ensure you have 40 GiB (performance image) or 50 GiB (secure image) of free space before downloading the zip files.
PeaZip sometimes fails to extract to the current directory. Try extracting to a different directory.
Use a different archive utility.
PeaZip uses the command 7z
for extracting multiple zip archives. Use it manually from the CLI to see more information to help with troubleshooting.
7z x winesapos-<VERSION>.img.zip
Challenge: the root file system does not resize itself to use all available space on the storage device.
Solution:
Re-enable the resize service, reboot, and then view the service log. Open up a GitHub Issue with the full log output.
sudo systemctl enable winesapos-resize-root-file-system
sudo reboot
sudo journalctl --unit winesapos-resize-root-file-system
Challenge: Pacman has packages listed in its IgnorePkg
configuration.
Solutions:
The performance image prevents updates to Linux kernels updates to prevent breaking third-party kernel modules.
sudo pacman -S -y
sudo pacman -S core/linux-lts core/linux-lts-headers kernel-lts/linux-lts510 kernel-lts/linux-lts510-headers jupiter/linux-neptune jupiter/linux-neptune-headers core/grub
The secure image only prevents updates to packages that SteamOS provides conflicting packages to. GRUB and the upstream Linux kernels from SteamOS that can cause an unbootable system. These can be manually upgraded by specifying the Arch Linux repository along with the package name.
sudo pacman -S -y
sudo pacman -S core/grub core/linux-lts core/linux-lts-headers
Challenge: in "Add/Remove Software" (the Pamac package manager) packages that are ignored are showing updates available.
Solution:
Challenge: the amount of reported free space seems too small or large.
Solutions:
Btrfs is used as the root file system on winesapOS. The most reliable way to view the amount of storage in-use on Btrfs is with this command.
sudo btrfs filesystem df /
Snapper is used to take Btrfs snapshots/backups (1) every time Pacman installs, upgrades, or removes a package and (2) every month. Refer to the Btrfs Backups section for more information on how to manage those snapshots.
Challenge: winesapOS uses labels for file system mounts which confuses the system if more than one label is found.
Solution:
Change the file system label of at least the root file system on one of the winesapOS drives. It is recommended to change all of the labels on that same drive. This can cause an unbootable system. Manually review the contents of /etc/fstab
to ensure it is correct.
lsblk -o name,label
export DEVICE=vda
sudo -E exfatlabel /dev/${DEVICE}2 wos-drive0
sudo -E fatlabel /dev/${DEVICE}3 WOS-EFI0
sudo sed -i s'/LABEL=WOS-EFI/LABEL=WOS-EFI0/'g /etc/fstab
sudo -E e2label /dev/${DEVICE}4 winesapos-boot0
sudo sed -i s'/LABEL=winesapos-boot/LABEL=winesapos-boot0/'g /etc/fstab
sudo btrfs filesystem label / winesapos-root0
sudo btrfs filesystem show /
sudo sed -i s'/LABEL=winesapos-root/LABEL=winesapos-root0/'g /etc/fstab
lsblk -o name,label
Reinstalling winesapOS on-top of an existing winesapOS installation can cause issues. This is because the partitions are perfectly aligned which leads to overlapping data. Even wiping the partition table is not enough. For the best results, it is recommended to completely wipe at least the first 28 GiB of the storage device. WARNING: This will delete any existing data on that storage device.
dd if=/dev/zero of=/dev/<DEVICE> bs=1M count=28000
wine
-sap
-o
-s
.Release Version/Tag | Project Name | Operating System | Desktop Environment | Release Images |
---|---|---|---|---|
3.0.0-beta.0 | winesapOS | SteamOS 3 | KDE Plasma | Performance and Secure |
3.0.0-alpha.0 | winesapOS | Arch Linux | KDE Plasma | Performance and Secure |
2.2.0 | Mac Linux Gaming Stick | Manjaro | Cinnamon | Performance and Secure |
2.0.0 | Mac Linux Gaming Stick | Manjaro | Cinnamon | Performance |
1.0.0 | Mac Linux Gaming Stick | Ubuntu 20.04 | Cinnamon | None |
GPLv3