X(-wing)-cited to get Started!

Getting the Star Wars: X-Wing Alliance Upgrade mod working in Linux after having purchased the game on Steam many moons ago has been one of the only frustrating gaming attempts I’ve had on Linux since switching from Windows in 2025.

This guide will not be a definitive guide on performance. These will be instructions only on how I got XWAU loaded on a Linux machine using a Steam version of X-Wing Alliance with scattered pieces of information from across the Internet!

1.) Purchase X-Wing Alliance on Steam
1a.) Run X-Wing Alliance from Steam
2.) Download the XwaInstallerManager
3.) Extract XwaInstallerManager
4.) Add it as a Non-Steam game
5.) Launch Terminal
6.) Execute ‘wine’ against the new prefix and install dotnet48
7.) Launch XwaInstallerManager from Steam
8.) Follow the websites instructions for using the application to download mods to a folder in the Wine prefix, then use the instructions to install the mods
9.) Move the new XWAU folder with the new applications to a new location
10.) Add alliance.exe to Steam as a Non-Steam game
11.) Execute ‘wine’ against the new prefix and install (…) <—- Make sure to look these up and add them again
12.) Launch Alliance.exe in Steam
13.) Write a blog

This may seem convoluted, and honestly, it definitely is. This came from a bunch of trial, error, misery, and frustration utilizing different tools such as Lutris, Heroic Launcher, and Bottles. Additionally, Bazzite (and some of its nuances) are fairly new for me. Using Wine directly eventually became a problem due to what I believe were issues with the package selected by ‘rpm-ostree’ for installation. So I stuck with utilizing Proton where possible. Before we dive in, we’re going to cover the most important aspect of gaming in Linux – the compatibility layer.

The compatibility layer is a process that sits between the Windows application and the Linux Operating system. If we were to run X-Wing on a Windows machine, it would be making system calls into the operating system for a number of reasons. When we move to using a different operating system, applications built for Windows will attempt to making the same calls on Linux. The compatibility layer acts as a form of translation. When those Windows calls are made to a Linux operating system, then the compatibility layer can intercept the call, translate it to Linux, and send it to the Linux operating system.

The only true compatibility layer application that exists for Linux seems to be Wine. There is a potential argument that utilizing a virtual machine is a form of compatibility layer, but that’s a conversation for a different time. Other compatibility layer applications are either wrappers or GUIs for Wine (such as Lutris and Bottles), while Proton essentially Wine+ for gaming. It includes a modified version of Wine as well as additional libraries to enhancing gaming performance on Linux.

To start utilizing Wine, you will first want to define a prefix. A prefix is simply a directory in your file system that Wine will run. When you start running Wine in a given prefix, you’ll notice a few files and directories:
1.) system.reg
2.) user.reg
3.) userdef.reg
4.) dosdevices/
5.) drive_c/
Three of these are files that correspond to locations within the Windows registry. The ‘dosdevices’ directory holds symbolic links to drives such as “C:”. Finally, ‘drive_c’ is the actual directory that holds the Windows file structure with common folders such as ‘Program Data’ and ‘Program Files’. One important key to note is that while I am no expert in Wine, I have learned some tips that may have no material basis other than experience in this endeavor. For example, Wine may not run an executable program unless it is located with the prefix, or more specifically, within the ‘drive_c’ folder.

A few additional applications we will want to ensure we have is protontricks and winetricks. These are two applications that make managing, configuring, and running applications with Wine/Proton easier.

Finally, I only tested this with the 2020 version. I did test with 2025 and ran into some problems. Nothing we can mess around with at a later date/time!

Let’s actually start getting XWAU to work. The first thing you’ll want to do is purchase X-Wing Alliance on the Steam store, download it, launch it, and click play. Once at the main menu you can just exit the game. This is recommended by the XWAU team, most likely for some sort of file extraction or expansion for assets. Who knows? (Let me know if you find out!)

Next, we’ll make a directory that we will work out of for this procedure. Open a terminal. Most desktop distributions (particularly the ‘gaming’ focused ones) will have a ‘Games’ directory in the user’s home. If not, we’ll simply create one. Type ‘mkdir -p Games/xwmod’. Now, go to the XWAU website (www[.]xwaupgrade[.]com) and download the X-Wing Alliance Installer Manager (XwaInstallerManager). Either download it to ‘~/Games/xwmod’ or move it from your downloads folder, typically ‘~/Downloads/’. Finally, extract the zip file to this location.

Open Steam and add the extracted application as a ‘Non-Steam’ application. This is done by opening Steam. On the top menu bar, select “Games -> Add a Non-Steam Game to my Library”. Select ‘Browse’, navigate to ~/Games/xwmod/XwaInstallerManager, select ‘XwaInstallerManager.exe’, and then click ‘Add Selected Programs’. Right-Click ‘XwaInstallerManager.exe’ in your Steam Library, select ‘Properties’, open ‘Compatibility’, and select ‘Force the use of a specific Steam Play compatibility tool’. Using the drop-down menu, you will need to select a valid version of Proton. When I wrote this, I used “Proton”GE-Proton10-34”. When you are finished, close the window. Then, attempt to launch the app from Steam. The application will not successfully launch, however this will create a new Steam prefix for the application. Launch “protontricks” and you should see a Non-steam game prefix for the application. You can also use the ‘protontricks –list’ command to list these in a terminal. Take note of the ID for the prefix (e.g. 2455526294).

THIS PART CAN POSSIBLY BE MODIFIED. WE MAY NOT COPY THE APP TO THE PREFIX

Locate the prefix under ~/.local/share/Steam/steamapps/compatdata/<appid>/pfx. Move the XwaInstallerManager folder into the drive_c folder. Now, launch a terminal and enter “protontricks <appid> dotnet48”. This will launch the installation media for installing .NET 4.0 and .NET 4.8 into the prefix.

Now, we can install mods! Follow the instructions on the XWAU website to download the mods. Oh no! The installation media requires that the original game is accessible! Well, I guess we need to create a symlink within the prefix. So first, open a file explorer, navigate to the prefix under “drive_c:\Program Files (x86)\Steam\steamapps\”, right-click and select “Create new -> Link to file or directory”. From here, set the name to “Star Wars X-Wing Alliance”. In the second field, add or navigate to the directory containing the original installation of the vanilla game. This will create a symlink to the game directory! While we’re here, let’s create a ‘Mods’ directory within the prefix under “drive_c”.

Now, run the XwaInstallerManager.exe from Steam! In the Vanilla directory field, navigate to the new symlink within the prefix. In the Mod directory field, navigate to the ‘Mods’ folder under ‘drive_c’ in the prefix. For now, we’re going to disable updates and we won’t create a shortcut (I haven’t tested either of these right now.) So click “Save Settings” and let’s move on!

First, let’s click ‘Check Updates’, and begin waiting for the app to get a list of available mods. Once they are updated, let’s start by selecting the Mod we want to download, and clicking the ‘Download’ button. After the mod is downloaded, click install and follow the prompts to install the mod!

Finally, add another non-Steam game to Steam. This time, select the ‘alliance.exe’ found in our prefix under ‘drive_c/Mods/XWAU2020’. Edit the properties of this new addition, and force compatibility with our GE Proton version.

Voila! X-Wing Alliance Upgrade is now available! To get a joystick configured, there are probably a lot of options. I have a cheap $30 Logitech that I use. I configure it using ‘jstest-gtk’ which, if using Bazzite, can be easily installed and used by utilizing a Distrobox.

Leave a Reply

Your email address will not be published. Required fields are marked *