Linux gaming

Linux gaming

:rage:   Why should YOU care?
:face_with_raised_eyebrow:   You JUST want to game?
:face_with_monocle:   It must be very hard to ENJOY?

Not hard at all to just enjoy!
Buckle up and let’s spread some knowledge to make it easy for everyone! :rocket:

Let this be our gaming hub, please share:

  • Update of tools
  • Best practices
  • Quality guides
  • New hot tech
  • Performance tips

Table of contents:

  1. Introduction
    1.1 Platforms
    1.2 Common terms
    1.3 Engines
  2. Requirements
  3. Steam
    3.1 Setup
    3.2 Install games
    3.3 Configuration
    3.4 Problems
  4. Wine
    4.0 Prepare
    4.1 Setup
    4.2 Engine
    4.3 Create prefix
    4.4 Install game
    4.5 Configuration
    4.6 Problems
  5. Lutris
    5.1 Setup
    5.2 Configuration
    5.3 Add game
    5.4 Game configuration
    5.5 Install game
  6. Common problems
  7. Advanced
    7.1 GPU PhysX
    7.2 ReShade & Ray tracing on any GPU in any game
  8. Resources

Introduction

This section consist of just few terms / conceptions / libraries which may be scary sounding for newcomers - but they’re not, when structured right.

You may enjoy learning to avoid common pitfalls! :space_invader:

But if you JUST want to game - read Requirements, Steam / Wine, Lutris and you’re good to go!

1. Platforms

Platform Pros Cons
Linux Steam • Very easy to use
• Performance are same or better than Windows & Native
• Big community
• Based on proprietary Steam client made by Valve
• Your game library and saves depends on Valve corporation (unless manually backup)
Linux Wine • Easy when you know
• Performance are same or better than Windows & Native
• Big community
• FOSS
• Privacy
• Gives you 100% control of your engine, data and games
• Requires some knowledge or tools for ease of use
• May break on update if you always use latest engine (not recommended practice!)
Linux Native • Best performance
• May break on update, unless sandboxed
• Currently limited number of games
Windows • Ease of use
• Compatibility
• Huge privacy and security risks!
• Forced updates
• Performance getting worse and worse compared to late years Linux, because a lot of PC resources are aimed on spying, even when you game.

2. Common terms

Term Description
PREFIX / WINEPREFIX Separate directory inside your Linux, which represents “Windows” machine, it’s drives, folders, registry etc, think of it as little sandbox
Engine / (Wine / Proton) • This is what allow you to run Windows programs on Linux
• You can easily downgrade / update engine version for any PREFIX
ARCH Architecture of PREFIX is win64 or win32 based on chosen Engine
:exclamation: You can use only one ARCH for PREFIX since it’s created, good thing that in 99% of cases, even if guides write otherwise you should use win64!
dll override / WINEDLLOVERRIDES It’s not always possible to run an application on builtin DLLs. Sometimes native DLLs simply work better.

You can override any dll in your PREFIX, these DLL overrides can be set using winecfg or you might want to use the WINEDLLOVERRIDES environment variable to set them.

Options available:
• native (=n)
• builtin (=b)
• disable (=)
• native, builtin (=n,b)
• builtin, native (=b,n)
Winetricks / Protontricks Very important tool in your arsenal, which will help you tweak PREFIX to overcome some known problems, or install real Windows libraries, to heal some unfinished parts of Wine.
DXVK Vulkan-based translation layer for DirectX 9 / 10 / 11
Probably most important project and milestone for gaming on Linux!
VKD3D Aims to implement the full DirectX 12 API on top of Vulkan.
:exclamation: Early in development, may have a lot of bugs and performance problems
Esync Removes wineserver overhead for synchronization objects. This can increase performance for some games, especially ones that rely heavily on the CPU.
Fsync More recent alternative with even better performance improvements, then Esync. However, you do need an Engine and Kernel that supports it.

3. Engines

Engine Description
Wine In the beginning was the Word, and the Word was with Linux, and the Word was Wine.

This is most important project for topic at hand, in 1993 there were bunch of absolutely insane people who decided to start reverse-engineer Windows proprietary crap and redirect it to Linux native FOSS style for future compatibility, when Windows will die.

Take a moment to create shrine for those people, it’s miracle that we see anything working at all!! :star_struck:
Wine staging It contains bug fixes and features, which have not been integrated into the development branch yet.

The idea of Wine Staging is to provide experimental features faster to end users and to give developers the possibility to discuss and improve their patches before they are integrated into the main branch.
Proton This is fork of Wine maintained by Valve / Steam, but still itself FOSS.
And what a great boost it gave for Linux gaming!

But it is basically a set of patches:
DXVK enabled by default
Esync ready
Fsync ready

Made to work with Steam, so keep this in mind when hearing term “Protonified”!
Although it’s not officially recommended - you can easily use Proton with Wine directly.
Wine-TKG 
Proton-TKG
Custom bleeding edge builds by Tk-Glitch, may greatly improve compatibility or performance, especially with fresh games!

Esync ready
Fsync ready

If you have fresh game which doesn’t work from day 1 - try it and watch for news, it most likely will be first build to run your game in few days!
Proton-GE Custom bleeding edge builds by GloriousEggroll aka “the most patched Wine”, may greatly improve compatibility or performance, especially with fresh games!

Esync ready
Fsync ready
vkd3d ready

If you have fresh game which doesn’t work from day 1 - try it and watch for news, it most likely will be first build to run your game in few days!

Requirements

1. Choose best suitable GPU driver

  • For hardcore gamer, who need to squeeze every bit of performance - best option is proprietary driver maintained by manufacturer (at least with Nvidia GPU).

  • For those who care about freedom more than gaming quality - please go FOSS and try to help make drivers better for future generations, by contributions in bug-reports and code! :penguin:

2. Make sure your GPU supports Vulkan

Check your GPU in database

  • :white_check_mark: If there is an entry - you’re good to continue! :space_invader:

  • :x: Not on the list? That means your GPU is old enough to not support Vulkan.

    You’re a serious gamer? Time to upgrade GPU! :moneybag:
    Without Vulkan - DXVK won’t work and this is bad for performance and compatibility.

    However you still can game:

    1. Skip next steps: 3. Install Vulkan and 4. Install Vulkan driver for your GPU driver
    2. Make sure to disable DXVK/D3DVK globally in Lutris and Steam

3. Install Vulkan

vulkan-icd-loader
lib32-vulkan-icd-loader

4. Install Vulkan driver for your GPU driver

Nvidia

nvidia-utils
lib32-nvidia-utils

AMD AMDVLK

amdvlk
lib32-amdvlk

AMD RADV

vulkan-radeon
lib32-vulkan-radeon

Intel

vulkan-intel
lib32-vulkan-intel

Hybrid / Optimus GPU

ArchWiki


Steam

TL;DR
Current best practice:

  1. Enable Proton in Steam play
  2. Check your game in protondb for game state / recommendations
  3. Problems?
    Try GloriousEggroll or TK-Glitch engines or see full 4.4 Problems section :space_invader:

Config location:

~/.steam

Proton engines location:

~/.steam/steam/steamapps/common

Keep in mind that Proton will be installed in the same library as the first Steam Play game you try to launch, and will only be installed in one location.

Game PREFIX location, where [appid] is your game id (look up steamdb if in doubt):

~/.steam/steam/steamapps/compatdata/[appid]/pfx/

More Proton FAQ

1. Setup

  1. Create account in Steam
  2. Install package:
    steam
    
    if you plan to use controllers. also install this one from AUR:
    game-devices-udev
    
  3. Launch client and login to your account
  4. Enable Proton so you can play Windows games with Linux Steam:
    Steam -> Settings -> Steam Play

    :white_check_mark: Enable Steam Play for supported titles
    :white_check_mark: Enable Steam Play for all other titles
    :small_red_triangle_down: Run other titles with dropdown - here you can choose Proton version which will be used globally.

2. Install games

Now you're ready to install games!
  1. Before buy, you may want to check protondb, maybe it’s rare case which still have problems or game is just out and doesn’t work in Proton just yet (usually resolved pretty quickly week-month)
  2. Buy / Download game
  3. Go to Library tab
  4. Select your game title on left panel
  5. Hit Play!

3. Configuration

  • To configure Proton through Environment variables, which you may see in protondb reports (see available options)

    1. Select game title on left panel
    2. Right   :mouse:   Button -> Properties -> Set launch options…
    3. Enter desired variables, separated by space and ended by %command%
      • to disable variable add =0 after
      • to enable use non 0 values

      For example, let’s enable DXVK HUD
      DXVK_HUD=full %command%
      
  • Install additional original Windows libraries with Winetricks (if required), where [appid] is your game id (look up steamdb if in doubt)

    WINEPREFIX="~/.steam/root/steamapps/compatdata/[appid]/pfx/" winetricks "win7"
    
  • To use specific version of Proton for specific game (may be useful if latest gives problems)

    1. Select game title on left panel
    2. Right   :mouse:   Button -> Properties

      :white_check_mark: Force the use of a specific Steam Play compatibility tool
      :small_red_triangle_down: use dropdown to choose Proton engine
  • Install custom Proton engine

    1. Download custom Proton engine for example GloriousEggroll or TK-Glitch
    2. Create a ~/.steam/root/compatibilitytools.d directory, if it does not exist
    3. Extract archive to ~/.steam/root/compatibilitytools.d
    4. Restart Steam
    5. Select custom Proton engine for specific game or globally
  • Change default location for games library
    Steam -> Settings -> Downloads -> Steam library folders

    1. Add library folder you can choose for example another drive
    2. Right   :mouse:   Button - Make Default folder If you want it to be default
  • You want to use NTFS disk with Linux Steam ( :exclamation: Why? - just drop Windows already :upside_down_face:)

    Using a NTFS disk with Linux and Windows

  • You want to create log file to check if everything fine or file a bug, use Environment variable:

    PROTON_LOG=1 %command%
    

    Log will be saved at location, where [appid] is your game id (look up steamdb if in doubt)

    ~/steam-[appid].log
    

4. Problems

• Game doesn’t launch or crash

  1. See if there are some known solutions to problems of this game at protondb or lutris.

  2. Try to disable DXVK

    PROTON_USE_WINED3D=1 %command%
    

    If it works without DXVK - play and please report bug to DXVK project if it doesn’t exist already!

  3. Still doesn’t work?
    Check Requirements and Proton bugs. If you have AMD GPU check this.

  4. Even now doesn’t work?
    Please report bug to Proton if it doesn’t exist already!

• Some games stutter at the beginning

  • This is normal, because at the beginning shaders have to be loaded first - so that it doesn’t stutter next time. They are written directly into shader cache.

Wine

:exclamation:Do NOT launch wine / winetricks directly from launcher or terminal without ENVIROMENT VARIABLES, as this will add unnecessary stuff and mess your mime-associations, icons etc.

TL;DR
Current best practice:

  1. Create non-system WINEPREFIX with non-system Wine (amd64):
    POL (staging-linux-amd64, upstream-linux-amd64)
    :exclamation:it’s better to use separate prefix for each game
  2. Check protondb and lutris for game state / recommendations
  3. Install game, prefer drm-free installers like GOG
  4. Use Lutris as launcher
  5. Enable DXVK and Esync
  6. Problems?
    Try GloriousEggroll or TK-Glitch engines or see full 4.6 Problems section :space_invader:

Default WINEPREFIX for system version of Wine
(don’t need it for Games - can be safely removed, if it does not used by anything else):

~/.wine

Mono (FOSS .NET by Wine) & Gecko (FOSS Internet Explorer by Wine) installers location, both auto-installed while creating WINEPREFIX:

~/.cache/wine

Winetricks downloaded installers location:

~/.cache/winetricks

0. Prepare

Create all this bash scripts and make them executable.

create-structure.sh

Details
#!/bin/bash
title=$(basename "$0")
echo -n -e "\033]0;$title\007"

# Colors
c0=$'\e[0m'
c1=$(tput setaf 202)
c2=$(tput setaf 154)
b0=$'\e[25m'
b1=$'\e[5m'

# Force output in english
export LC_ALL=en_US.UTF-8

# OPTIONS
WINE_ROOT="$HOME/.PlayOnLinux"

STRUCTURE=(
    "$WINE_ROOT"
    "$WINE_ROOT/wineprefix"
    "$WINE_ROOT/wine"
    "$WINE_ROOT/wine/linux-amd64"
    "$WINE_ROOT/wine/linux-x86"
)


main() {

    create_structure
}


create_structure() {

    echo
    echo "   ---------------   Create structure   ---------------   "
    echo

    for path in "${STRUCTURE[@]}";
    do
        if [ ! -e "$path" ];
        then
            mkdir -p "$path" \
            && echo "${c2}[+]${c0} ${path}" \
            || echo "${c1}[${b1} ${b0}]${c0} ${path}"
        else
            echo "${c2}[x]${c0} ${path}"
        fi
    done

    echo
    echo "${c2}Script finished!${c0}"
}

main "$@"


create-prefix.sh

Details
#!/bin/bash
title=$(basename "$0")
echo -n -e "\033]0;$title\007"

# Colors
c0=$'\e[0m'
c1=$(tput setaf 202)
c2=$(tput setaf 154)
b0=$'\e[25m'
b1=$'\e[5m'

# Force output in english
export LC_ALL=en_US.UTF-8

# OPTIONS
NAME="GameName"
ENGINE="5.11-staging"
ARCH="win64" # win64 or win32

WINE_ROOT="$HOME/.PlayOnLinux"
PREFIX="${WINE_ROOT}/wineprefix/${NAME}"
WINE="${WINE_ROOT}/wine/linux-${ARCH}/${ENGINE}"
LOADER="${WINE}/bin/wine"
SERVER="${WINE}/bin/wineserver"


main() {

    create_prefix
}


create_prefix() {

    echo
    echo "   ----------------   Create prefix   -----------------   "
    echo

    ARCH=$([ "$ARCH" == "amd64" ] && echo "win64" || echo "win32")

    env WINEARCH="$ARCH" WINEPREFIX="$PREFIX" WINELOADER="$LOADER" WINESERVER="$SERVER" WINEDEBUG="-all" wineboot
    env WINEPREFIX="$PREFIX" WINE="$LOADER" WINESERVER="$SERVER" winetricks isolate_home mimeassoc=off

    echo
    echo "${c2}Script finished!${c0}"
}

main "$@"


install.sh

Details
#!/bin/bash
title=$(basename "$0")
echo -n -e "\033]0;$title\007"

# Colors
c0=$'\e[0m'
c1=$(tput setaf 202)
c2=$(tput setaf 154)
b0=$'\e[25m'
b1=$'\e[5m'

# Force output in english
export LC_ALL=en_US.UTF-8

# OPTIONS
SETUP="Setup.exe"
NAME="GameName"
ENGINE="5.11-staging"
ARCH="amd64" # win64 or win32

WINE_ROOT="$HOME/.PlayOnLinux"
PREFIX="${WINE_ROOT}/wineprefix/${NAME}"
WINE="${WINE_ROOT}/wine/linux-${ARCH}/${ENGINE}"
LOADER="${WINE}/bin/wine"
SERVER="${WINE}/bin/wineserver"


main() {

    run "${SETUP}"
}


run() {

    echo
    echo "   ---------------------   Run   ----------------------   "
    echo

    local file="$1"
    [ -f "$file" ] || exit_error "$file doesn't exist"

    if echo "$file" | grep -iq '.msi';
    then
        echo "${c2}[>] run .msi ${c0} $file"
        env WINEPREFIX="$PREFIX" WINELOADER="$LOADER" WINESERVER="$SERVER" WINEDEBUG="-all" WINEDLLOVERRIDES="winemenubuilder.exe=d" msiexec /i "$file"
    else
        echo "${c2}[>] run .exe ${c0} $file"
        env WINEPREFIX="$PREFIX" WINELOADER="$LOADER" WINESERVER="$SERVER" WINEDEBUG="-all" WINEDLLOVERRIDES="winemenubuilder.exe=d" "$LOADER" "$file"
    fi

    echo
    echo "${c2}Script finished!${c0}"
}

main "$@"


tricks.sh

Details
#!/bin/bash
title=$(basename "$0")
echo -n -e "\033]0;$title\007"

# Colors
c0=$'\e[0m'
c1=$(tput setaf 202)
c2=$(tput setaf 154)
b0=$'\e[25m'
b1=$'\e[5m'

# Force output in english
export LC_ALL=en_US.UTF-8

# OPTIONS
TRICKS=(
    win7
)
NAME="GameName"
ENGINE="5.11-staging"
ARCH="amd64" # win64 or win32

WINE_ROOT="$HOME/.PlayOnLinux"
PREFIX="${WINE_ROOT}/wineprefix/${NAME}"
WINE="${WINE_ROOT}/wine/linux-${ARCH}/${ENGINE}"
LOADER="${WINE}/bin/wine"
SERVER="${WINE}/bin/wineserver"


main() {

    tricks
}


tricks() {

    echo
    echo "   --------------------   Tricks   --------------------   "
    echo

    printf "%s\n" "${TRICKS[@]}"

    env WINEPREFIX="$PREFIX" WINE="$LOADER" WINESERVER="$SERVER" winetricks "${TRICKS[@]}"

    echo
    echo "${c2}Script finished!${c0}"
}

main "$@"


1. Setup

  1. Install Wine package (it doesn’t really matter which one you use as system version):
    wine-staging
    
    or
    wine
    
  2. Install Winetricks package
    winetricks
    
  3. Run create-structure.sh script, it will create folder structure in your ~/.PlayOnLinux
    .PlayOnLinux
    ├── wine
    │   ├── linux-amd64
    │   └── linux-x86
    └── wineprefix
    

2. Engine

With Wine you can use any Engine!

Few things to know:

  1. Usually it’s best to use latest version, unless there is known problem or update have broken compatibility for specific game

  2. You can upgrade or downgrade to any Engine and Version without problems, just note that if you go from Wine to Proton your new user directory will move to:

    drive_c/users/steamuser/
    

    If your game configs / saves are in old user directory, just move them to steamuser or create symlink! Vise-versa if you’ll update from Proton to Wine :wink:

  3. :exclamation: You can use only one ARCH for PREFIX since it’s created, good thing that in 99% of cases, even if guides write otherwise you should use amd64 !

Best to choose engines in given order, in case of problems:

  • PlayOnLinux (staging-linux-amd64, upstream-linux-amd64)
    Best place for compiled versions of original Wine / Wine-staging.
  • TK-Glitch (Wine version)
  • GloriousEggroll
  • Proton Compile source or if you have Steam client - download it and copy this dir:
    ~/.steam/root/steamapps/common/Proton 5.0/dist
    
    to your Engines path and rename it like that 5.0-proton:
    ~/.PlayOnLinux/wine/linux-amd64/5.0-proton
    

Once downloaded - put engine in:

~/.PlayOnLinux/wine/linux-amd64

3. Create prefix

From now to demonstrate complex case, let’s install Crysis from GOG.
After all, this is most important question of gaming: “But can it run Crysis?!”

  1. Open create-prefix.sh with text editor of your choice, and change this options:
    # OPTIONS
    NAME="Crysis"
    ENGINE="5.11-staging"
    
  2. Run create-prefix.sh script
    this will create your prefix at:
    ~/.PlayOnLinux/wineprefix/Crysis
    
PRO TIP

Such a PREFIX is fully portable, if you remove this dir with symlinks to devices:

~/.PlayOnLinux/wineprefix/Crysis/dosdevices

Now it’s safe to copy / backup PREFIX.
It will be auto-created next time you’ll run anything in PREFIX - so it’s safe!


4. Install game

  1. Open install.sh with text editor of your choice, and change this options:

    # OPTIONS
    SETUP="setup_crysis_2.0.0.7.exe"
    NAME="Crysis"
    ENGINE="5.11-staging"
    

    You can use absolute or relative to Setup executable, if you use relative, like i did here - just copy script to your setup directory.

    Make sure your NAME and ENGINE variables are same as on 4.3 Create prefix

  2. Run install.sh script

  3. Follow installer steps and install to some simple location like C:\Games\Crysis
    if possible avoid and disable:

    • Any redist software like DirectX, Microsoft Visual C++ etc
    • Create desktop icon / link
PRO TIP

In case you don’t like auto-installed proprietary garbage (sadly GOG installers doesn’t ask you about installing redistributables)

  1. Create temporary PREFIX CrysisTemp
  2. Install game as usual
  3. Move game folder to clean Crysis PREFIX
  4. Remove CrysisTemp PREFIX

  1. This is rare case, but if you look on Lutris db see Wine GOG version
    Install -> dropdown :small_red_triangle_down: -> Views install script

    You will see some winetricks recommendations:

    d3dx10_43
    d3dcompiler_43
    vcrun2005
    

    You can try without, but in that case it is a must (in general Lutris have decent recommendations):
    d3d stuff - see more on unfinished DirectX 10 effects API
    vcrun2005 is needed for some stuff like game saves (otherwise without it game will crash)

    :exclamation: Always recommended to add win7 in the end of tricks, because sometimes winetricks reset OS to install some of the software properly!

  2. Open tricks.sh with text editor of your choice, and change this options:

    # OPTIONS
    TRICKS=(
        d3dx10_43
        d3dcompiler_43
        vcrun2005
        win7
    )
    NAME="Crysis"
    ENGINE="5.11-staging"
    

    Make sure your NAME and ENGINE variables are same as on 4.3 Create prefix

  3. Run tricks.sh script
    Just proceed with installers windows-style, in case asked about Sending anonymous information or something along those lines - obviously choose NOT!

5. Configuration

  • Use Lutris as launcher it will make your life so much easier! :space_invader:
    Read from 5. Lutris up to 5.4 Game configuration

  • To disable network for WINEPREFIX use Firewall

6. Problems

  • Installer throw errors like that:

    Runtime Error (at -1:0):
    Cannot Import dll: C:\users\user\Temp\is-VADAE.tmp\isskin.dll
    
    err:module:import_dll Library MFC42.DLL (which is needed by L"C:\\users\\ready2rumbelx\\Temp\\is-L6E45.tmp\\isskin.dll") not found
    

    To solve this - install those winetricks with tricks.sh:

    mfc42
    vcrun6
    
  • Installer fails:

    1. Prefer simple installers and no DRM if you can - those are main points of possible failure.

    2. GOG is best as it’s DRM-free

    3. If your games is retail (CD / DVD / BD) and you fail to install directly in Wine, then install on VirtualMachine with real Windows and just copy installed game folder in your WINEPREFIX

    4. In case everything above fails use :pirate_flag:, prefer steam-rip, epic-rip, gog-rip as those are cleanest installation available.
      (PM me for trusted sources :male_detective:)

    5. Even now doesn’t work?
      Please report bug to Wine if it doesn’t exist already (don’t include :pirate_flag: details)!

  • Launch fails or crashes during gameplay:

    1. Disable DXVK / VKD3D
      If it works without DXVK - play and please report bug to DXVK, if it doesn’t exist already!

    2. :white_check_mark: Disable Lutris runtime

    3. Try another Engine or version of Engine

    4. On-line games might have problems with anti-cheat / DRM not working at all, so they can be unplayable, see protondb and lutris for more information!

    5. Even now doesn’t work?
      Please report bug to Wine if it doesn’t exist already (don’t include :pirate_flag: details)!


21 Likes

Lutris

Best all-around game launcher, which can be used for: Wine, Steam, Native, Emulators
Has vast variety of options :space_invader:

:exclamation:When using Proton or Protonified engine with Lutris you MUST use option:


Config locations:

~/.config/lutris
~/.local/share/lutris

Icons created by Lutris (might be useful to backup / transfer your library):

~/.local/share/icons/hicolor/128x128/apps

Wine / Proton engines location

~/.local/share/lutris/runners/wine

A lot of useful libraries & runtimes which for example allow to easily run Proton without steam client!

~/.local/share/lutris/runtime

1. Setup

Install Lutris package:

lutris

2. Configuration

You can configure Defaults for each runner (Default settings when you add new game)
On left panel hover your :mouse: over Wine tab - :gear: Cog will appear, press it!

:white_check_mark: Show advanced options on left bottom -we’re no amateurs here :robot:

Runner options tab:

  • Wine version - most important one, here you can set / update default Engine which will be used for all games, you can use anything installed: System, PlayOnLinux, Steam
    or any Engine you put in:
    ~/.local/share/lutris/runners/wine
    
    ~/.PlayOnLinux/wine/linux-amd64
    
  • :white_check_mark: Enable DXVK/VKD3D - useful to turn off globally, if your GPU doesn’t support Vulkan

System options tab:

  • Other ones may be useful to have:
    :white_check_mark: Restore resolution on game exit
    :white_check_mark: Switch to US keyboard layout(may remedy problems in case of multi-lingual inputs)

3. Add game

  1. Press :heavy_plus_sign: plus on top of GUI, to add game, let’s do it minimal setup required to start.

  2. Game info tab

    • Name - enter name of your game, you can name it whatever makes sense for you.
    • Runner - select Wine
    • Release year - optional, but nice in case you have big library
      (you can look up year of your game in PCgamingWiki)
  3. Game options tab

    • Executable
      Sometimes game have multiple executables, prefer x64 ones first!
      ~/.PlayOnLinux/wineprefix/Crysis/drive_c/Games/Crysis/Bin64/Crysis.exe
      
    • Wine prefix
      ~/.PlayOnLinux/wineprefix/Crysis
      
  4. Save - your game will now be available on list

  5. If there’s no game image, that’s caused by Name not exactly identical to database one.
    No worries - easy to fix by Identifier!

    Look game on Lutris db
    Now get this id: https://lutris.net/games/crysis/ and paste it exactly to Game settings:

    1. Select game, Right :mouse: Button -> Configure
    2. Identifier Change now paste crysis
    3. Apply
    4. Save

4. Game configuration

Here are some essential configuration options to know!

Select game, Right :mouse: Button -> Configure

Runner options tab:

  1. Wine version - you can force Engine for specific game (will be used even if you change global, so don’t forget to change that option back if you need)

  2. :white_check_mark: Enable DXVK/VKD3D in most cases it’s best to use it, but you can toggle in case of problems

  3. DXVK version - you can force specific DXVK version for specific game, in case of problems.

  4. :white_check_mark: Enable Esync - best to enable in most games which heavily use CPU or avoid stutter

  5. :white_check_mark: Enable Fsync - same as Esync, should be better, but Engine and Kernel must support it!
    Lutris will alert you if it’s not supported by Engine in use :space_invader:

System options tab:

  1. :white_check_mark: Disable Lutris runtime

Game options tab:

  1. Arguments - that is very useful option!
    You can pass game command-line options, for example in Crysis let’s force DirectX 10 mode:
    -dx10
    

5. Install game

Lutris is easiest way to install games without :brain:, it will auto-install required Engine and Winetricks!
Also you can download Install script and edit it yourself :space_invader:

:exclamation: However it’s not recommended method of installation (without :brain:), because:

• Scripts are made by other people and can be opinionated, outdated or not include current best practices mentioned in this guide, sometimes even work worse!

• Scripts can use win32 Engine which makes no sense this days.
You can change Wine / Proton version later, but not it’s ARCH!


  1. Find your game from Lutris program (or on Lutris db)

    Search -> Search Lutris.net

  2. Select game, Install

  3. Choose Installer script to use, it might be:
    Wine / Steam / Emulator - choose wisely!

  4. From now just follow dialogs and install whatever is offered to you

  5. Turn off Lutris search mode, now it will be available in your games library and you can play


Common problems

Sound crackles / cut off phrases

That is very rare case, for example with Mirror’s edge (2009)

  1. Install packages

    openal
    openal32
    
  2. Configure by running terminal command:

    alsoft-config
    

    You can try all kinds of settings here, but to overcome crackles usually it’s enough to set:
    Resampler quality to Cubic spline or higher

  3. Apply

  4. For Wine / Lutris override dll with winecfg

    openal32 (builtin)
    

    For Steam you need to run from Lutris and:
    Select game, Right :mouse: Button -> Configure

    Runner options tab:

    • :white_check_mark: Disable Steam runtime (use native libraries)

    System options tab:

    • Enviroment variables -> Add

      Key

      WINEDLLOVERRIDES
      

      Value

      "openal32=b"
      

Can’t set resolution / resolution is messed up

For Wine / Lutris:

  1. Select game in Lutris, Right :mouse: Button -> Wine Configuration open Graphics tab
  2. :white_check_mark: Emulate a virtual desktop
  3. You can change Desktop size if you need
  4. Press Apply and OK
  5. Now you can:
    • Change resolution in-game options, preferably to your native
      Disable Emulate a virtual desktop which you’ve used on step 2

      That should solve problem!

    • Just keep using it with Virtual desktop


Advanced

GPU PhysX

So many times people on protondb mentioned, even on Nvidia GPUs to just turn off PhysX, because game start to lag since there are no GPU acceleration for it…

There are very interesting games with PhysX and no reason to limit yourself, which could make a world of difference!

  1. GPU PhysX works only with wine-staging engine for now.

  2. Install OpenCL headers

    opencl-headers
    ocl-icd
    
  3. Install CUDA for your driver version:

    opencl-nvidia
    lib32-opencl-nvidia
    
  4. In your game PREFIX install this winetricks:

    physx
    
  5. Make sure PhysX enabled in game settings!

Problems:

  • Some newer games like Batman Arkham knight for example, use newer library called nvapi, for now it’s not supported

  • There are constantly attempts to add it, but it’s real die hard! :chestnut: if you have ideas & experience - please step in and help!

ReShade & Ray tracing on any GPU in any game

FOSS screen space ray tracing with any game and GPU


Resources

6 Likes

Disclaimer

Demand for this guide was over the roof lately (both publicly and through PM, some of you even offered help - which i appreciate a lot!), so i have to release it earlier than planned. :upside_down_face:

This guide should be suitable for anyone from complete newcomer to advanced user (latter will just read TL;DR of given sections for current Best practices and Resources).

Also, this guide is useful for any distribution, not only EndeavourOS or Arch - so you can share it for anyone who use Linux! :space_invader:

It is far from finished, but should be a very good start for PC gamers :partying_face:

Things to come

• I know that set of simple scripts in Wine section is very far from ideal workflow, to be user-friendly for wide range of people, but still it’s much easier, than what you’ll find after reading Wine wiki for 12 months.

Meanwhile i hope that those who don’t know Wine up close in personal will find great help in understanding it’s operation from guide and those scripts.

:exclamation: Don’t use this scripts, if you have PlayOnLinux installed and used - as i use it’s folder-structure to get auto-hooked by Lutris!

You can use many available tools like: pywinery, PlayOnLinux or Lutris itself to manage, but i won’t recommend it.

Personally i respect them for good ideas, but find them very bloated, unnecessary huge, full of dependencies, not-vanilla ways of dealing Wine sometimes, and not-functional for some advanced stuff…

I have already created a great script in bash capable of much more than just ease for gaming, but can’t release it right now until i’ll be 100% sure it’s perfect, after that i’ll release it FOSS on GitHub and AUR:

FEATURES
  • Pure bash
  • Very user-friendly
  • Interface GUI / CLI / mixed
  • Don’t auto-mess mime-types and .desktop files of original system (like Wine and Winetricks do), create PREFIX portable by default
  • No dependencies except winetricks and optional Zenity for GUI
  • Advanced management of ENGINE and PREFIXES, mass actions for:
    • Update selected PREFIXES for specific ENGINE version
    • Remove selected ENGINES (will warn if they’re in use by some PREFIXES)
  • Download and auto-install ENGINES:
    • For now only PlayOnLinux (wine / wine-staging)
    • Looking forward for adding Proton, Tk-Glitch, GloriousEggroll
    • Will try to add custom sources in config, for pre-built Engines
  • Very easy to create prefix
  • Execute .msi or .exe Windows files from file-manager’s double-click - it will ask on which of available PREFIXES you want to run it! :sunglasses:
  • Optional config for places where you store your prefixes, you can have multiple places which will be symlinked (for example Games on separate drive)!
  • Easy scripting from:
    • Bash
    • Probably will parse Lutris scripts for the future too
  • Config for chosen prefix:
    • Change Engine
    • All the usual options like winecfg, regedit, reboot etc
    • Kill all processes
    • Make prefix portable
  • Kill all processes for all PREFIXES
  • Make all PREFIXES portable

• Bridging old games (DirectX 1-8, Glide, DirectDraw) to work with Wine / Proton and DXVK :space_invader:

• Advises on Game configs and Mods

• Emulators


What i’ll need help with

Contrary to popular beliefs - i’m not terminator or even Wine-guru :robot: :sweat_smile:

Please alert me on:
• Typos, errors, dead links
• Best practices updates

What i very much need help with:
Downsampling (i need universal ways of achieving something like Nvidia DSR for any game, regardless of drivers etc) - this is super-important for me personally and games quality!

nvapi - if someone will come up with ways to hook this latest PhysX development or help Wine and DXVK - please do!

VKD3D - i’m not too hip on it, as i have just couple of dx12 games, and last time i’ve seen it was still experimental and buggy, any updates are appreciated, especially when it will become really production-ready like DXVK!

AMD / Intel / Hybrid / Optimus graphics gaming. Anything on best practices for as i don’t have experience on Linux and hardware for it. For example i know about ACO cache for AMD which makes things a lot better for ADM users, but not ready to write about it in set-in-stone terms.


Now ENJOY!

And please excuse me, as i was and still am super-busy on a work, but will be here and will try to help however i can, but for now i need some rest :joy:

16 Likes

This needs to be a wiki page. :heart_eyes:

10 Likes

Probably too early, as this will unfold with some time even more and better…
But idea is on a plate :yum:

P.S. Now i need to figure out why relative links for table of content doesn’t work for 2nd post sections, like it did back in RTGI thread… :thinking:

5 Likes

Awesome job @keybreak!

3 Likes

Somebody’s been keeping well hydrated!

frog_monocle

Excellent job! This definitely needs to be a wiki page.

Something like this was really missing. Also, it is very well written, as I’m reading it, I love all the hidden memes and references. Great stuff :smiley:

Can’t wait for the weekend to try some of it out on my pc.

3 Likes

To quote the greats:

Who let the frogs out?


I hope you guys catch Bible references for Wine :face_with_monocle: :upside_down_face: :innocent:

3 Likes

Very nice , great work , THANK YOU !

Love to see a gaming section divided in to parts :

  1. Steam , GoG , etc.
  2. Open Free games , Supertux , Tuxcart , etc.

Maybe we can start reviving the old free games to work again . Were did they all go ? Anyways a Gaming section would be beautiful ! :grinning:

2 Likes

Thx :slight_smile:

Well, here is only technical stuff, but games themselves at least for now we discuss here :+1:
But who know what future will hold - i expect it all to grow :partying_face:

Playing nice & tidy :sunglasses:
I run even stuff like GTA II in Wine :sweat_smile:

In things to come section:

This is what will help to reviving pretty much any game!

Plus there will be surely emulators section in future for stuff like NES / SEGA / PS2 etc :wink:

4 Likes

i vote also to put this into a wiki page!

8 Likes

Well hey, thank you :slight_smile:
Don’t get me wrong - i’m all for it!

Problem is that i just got message “You’ve reached maximum number of edits, wait for 9 hours” :sweat_smile:

And i expect this situation to be same in nearby future about it, since a lot is still in a works and in plans, but if it’s ain’t a problem we can do it even now (there’s only small technical thing about relative links i need to edit after 9 hours) :upside_down_face:

1 Like

Call in a mod to “make wiki page”. :wink:

5 Likes

Wow! What a great job you’ve done here! Thank you very much for putting your time into this. :smiling_face_with_three_hearts:

4 Likes
3 Likes

Maybe for lot of you it’s not a news already, but while writing guide i stumbled across this, and it was new to me!

After tragic loss of Józef Kucia (RIP) who started VKD3D which is DirectX 12 to Vulkan project, it was picked up by Proton (Steam), as well as a lot of people from DXVK and GloriousEggroll:

This means very active development, so i expect soon we’ll see very mature DirectX 12 on Wine (for last year or so it was still buggy and experimental).

So i’m looking forward to future! :star_struck: :alien:

5 Likes

This is absolutely brilliant!! Thank you for your wonderful work - this should be the wiki page.

3 Likes

This is a great write-up. I recently moved from Manjaro to Endeavour. In Manjaro, a lot of my proton games worked, but now none of them do. Native Linux games seem to be okay. I am running optimus-manager with Nvidia. Games start but them seem to never launch, sometimes I get a small black screen that then shuts off.

Any ideas?

4 Likes

Start a new thread? :wink:

4 Likes

:wink:

2 Likes