Skip to content

Wine (Prefix) Management

Mathis Dröge edited this page Jan 23, 2022 · 6 revisions

This is a WIP Wiki entry explaining everything about Wine. Yes, everything

What is Wine?

Wine translates (=/= emulates) Windows system calls to Linux ones, making Windows programs run on Linux. Over the years, it has matured quite a bit, with the only real incompatibilities now being Anticheat software and some day-one games

Why you should read this

During your time Gaming on Linux, you will inevitably encounter a point where something doesn't work. A game won't launch, your controller is not picked up, settings don't work, you name it. You will then either try to figure it out yourself, or ask someone else for help. Either way, the process of finding and solving the problem is sped up a lot if you know your way around Wine

A disclaimer

There's a chance that whatever you're trying to do will not work. You might just spend a day trying only to find out that the game you're trying to run is utterly incompatible with Wine, or even if it does run, essential features are missing. This will happen eventually, and is part of the process. Shelf the game for now, or setup a Windows system and play it through that. Wine's compatibility is constantly getting better, check back in ~half a year and it might just work now.

How do I use Wine?

The easiest way to use Wine is to launch it using your Terminal. wine WindowsProgram.exe is enough to run a Windows program, but you might not want to do that straight away because...

Wine Prefixes?

A Wine prefix (or Wine Bottle) essentially contains a virtual Windows filesystem:

The default Wine prefix is located at ~/.wine. Every program you use/install will see this folder (or, more specifically, the drive_c subfolder) as their C: drive, and will have access to every other program installed in that prefix.

Now, you can set your Wine prefix location by setting the WINEPREFIX environment variable to any existing folder (using export WINEPREFIX=/path/to/folder on the Terminal for example). Afterwards, run wineboot --init && wineserver --wait (or just wineboot -i && wineserver -w for short) to create a new prefix in that directory. Once wineserver quits (which you can see by being able to type in commands into the terminal again), your Wineprefix in the specified folder is ready.

Using different Wine Prefixes

Once you have created a prefix using the procedure described above, you can use it by simple setting WINEPREFIX to that directory again. Running any program using Wine will now run it inside that prefix. This is useful for games with requirements like .NET or VCRuntime, as installing those on the default prefix might in turn break other games.
As an example, GTA V basically requires DXVK. On the other hand, Into the Breach does not work with DXVK. See the problem here? You'll have to have at least 2 prefixes, one with DXVK installed and one without.
And the process is the same with other Games & Requirements. In the interest of time, I'll not list everything here, but you get the gist of it.

Another scenario where using different Wineprefixes is important is when you're using...

Different Wine Versions

Different Wine versions, in short, do different things to a prefix. For example, here's a screenshot of winecfg on a prefix created by Wine and a prefix created by Wine-GE, a Wine version made for Gaming:

Wine Wine-GE

As you can see, Wine-GE has a few more changes added there. These changes might help games to run, but they might also cause issues. Thus, I'd suggest to first try running your game with default Wine, and only trying Wine-GE if something isn't working.

Using different Wine versions

This largely depends on the Wine version in question, so as an example I'll use Wine-GE:

  1. Download the latest release
    Go to the releases tab, then look at the top version. If it has a suffix (for example -LoL), it's a specific release for one game (in this case League of Legends) and is not meant for anything other than that.
    Here's a screenshot of the releases page. The green releases are "good":

    Expand the "Assets" dropdown menu, and click the file with a ".tar.xz" file extension.

  2. Extracting and using the version
    This will depend on the launcher you're using.

    If you're using Heroic, extract the archive to any one of the folders listed here. After that, you can select it in the settings

    Legendary does not need a specific folder, the only requirement there is to know where you extracted the archive to. Extract the archive and add the following to your Legendary configuration file:

    [AppName]
    wine_executable = /path/to/wine-ge-X.X-x86_64/bin/wine

    (Replacing the "AppName" with the app name of the game and the path with the actual path of course)

    If you aren't using a launcher (you just launch games from the terminal directly), the easiest way is to set the PATH variable. As you may know, PATH is what the shell looks at to find out where to search for programs. So if you type in something like wine, the shell will search through the folders listed in PATH, and execute the first thing it finds. So to now override the wine version we're using, we just add a folder to PATH: export PATH=$HOME/Wine/Versions/Wine-GE/bin:$PATH would be one possible command (of course replace the wine version path as you need).
    It's important to place this folder at the start of PATH, since otherwise the shell will still find the "normal" Wine binary before finding our custom one.

DXVK / vkd3d-proton

Aka "Hey my games run like shit with Wine"

Alright, where to start here...
Most games use some sort of graphics API to render. A lot of games use Microsoft's own implementation, Direct3D. This API is however only available on Windows. To combat this, Wine created their own translation layer called WineD3D. While it works, it's nowhere near perfect. Better suited alternatives are DXVK (for D3D9 to D3D11 games) and vkd3d-proton (for D3D12 games) (don't be confused about the name, it also works in Wine).
The Heroic launcher features an option to automatically install and update DXVK and VKD3D. If you are not using Heroic, here are install instructions for the Terminal:

  1. Download the thing you want to install
    For DXVK, navigate to their Releases page and download the .tar.gz file
    For vkd3d-proton, navigate to their Releases page and download the .tar.zst file
  2. Open up a Terminal and set your WINEPREFIX & if necessary, PATH
    This works the same way as shown above in the "If you aren't using a launcher" section of Wine Version management
  3. Extract the file you downloaded, and navigate to the folder in the Terminal
  4. Run ./setup_dxvk.sh install or ./setup_vkd3d_proton.sh install to install

Proton?

Don't. Running Proton outside of Steam is not supported. When launched by Steam, it runs with a special container that bundles exactly the right libraries together to make it work. If not, this container doesn't exist. It may work, it may not. See this post on GE's Discord for additional info
Other than that:
(1) Proton provides very little log output, meaning if something doesn't work, you have no clue what to do to make it work.
(2) Proton's prefix creation works differently, and is also designed to only be done inside Steam.
(3) Proton's prefixes are structured completely differently to regular Wineprefixes. Your save data and any other settings you changed in the prefix will be removed/reset.

Reverting changes you made

Most changes can be easily reverted by clearing out / deleting your WINEPREFIX or restoring your PATH back to normal (by opening up a new Terminal)

Game compatibility list:

Clone this wiki locally