Gaming on Linux

  1. Home
  2. Docs
  3. Gaming on Linux

Gaming on Linux

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

PlatformProsCons
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

TermDescription
PREFIX / WINEPREFIXSeparate 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
ARCHArchitecture 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 / WINEDLLOVERRIDESIt’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 / ProtontricksVery 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.
DXVKVulkan-based translation layer for DirectX 9 / 10 / 11
Probably most important project and milestone for gaming on Linux!
VKD3DAims to implement the full DirectX 12 API on top of Vulkan.
:exclamation: Early in development, may have a lot of bugs and performance problems
EsyncRemoves wineserver overhead for synchronization objects. This can increase performance for some games, especially ones that rely heavily on the CPU.
FsyncMore recent alternative with even better performance improvements, then Esync. However, you do need an Engine and Kernel that supports it.

3. Engines

EngineDescription
WineIn 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 stagingIt 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.
ProtonThis 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-GECustom 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
  1. Launch client and login to your account
  2. 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:   ButtonMake 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=Details]

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

# Colors
c0=

[/details]
\e[0m'
c1=$(tput setaf 202)
c2=$(tput setaf 154)
b0=

[/details]
\e[25m'
b1=

[/details]
\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 "$@"

[/details]

create-prefix.sh

[details=Details]

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

# Colors
c0=

[/details]
\e[0m'
c1=$(tput setaf 202)
c2=$(tput setaf 154)
b0=

[/details]
\e[25m'
b1=

[/details]
\e[5m'

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

# OPTIONS
NAME="GameName"
ENGINE="5.11-staging"
ARCH="amd64"

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 "$@"

[/details]

install.sh

[details=Details]

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

# Colors
c0=

[/details]
\e[0m'
c1=$(tput setaf 202)
c2=$(tput setaf 154)
b0=

[/details]
\e[25m'
b1=

[/details]
\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"

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 "$@"

[/details]

tricks.sh

[details=Details]

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

# Colors
c0=

[/details]
\e[0m'
c1=$(tput setaf 202)
c2=$(tput setaf 154)
b0=

[/details]
\e[25m'
b1=

[/details]
\e[5m'

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

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

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 "$@"

[/details]

1. Setup

  1. Install Wine package (it doesn’t really matter which one you use as system version):
    bash wine-staging
    or
    bash wine
  2. Install Winetricks package
   winetricks
  1. 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 😉

  1. :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:

   ~/.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:
    bash ~/.PlayOnLinux/wineprefix/Crysis

[details=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!


[/details]

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

[details=PRO TIP]
In case you don’t like auto-installed proprietary garbage (sadly GOG installers doesn’t ask you about installing redistributables)

  • Create temporary PREFIX CrysisTemp
  • Install game as usual
  • Move game folder to clean Crysis PREFIX
  • Remove CrysisTemp PREFIX

  • [/details]

    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!

    1. 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
    2. 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)!

    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:
      text ~/.local/share/lutris/runners/wine
      text ~/.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!
      text ~/.PlayOnLinux/wineprefix/Crysis/drive_c/Games/Crysis/Bin64/Crysis.exe
    • Wine prefix
      text ~/.PlayOnLinux/wineprefix/Crysis
    1. Save – your game will now be available on list
    2. 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:
    3. Select game, Right :mouse: Button -> Configure
    4. Identifier Change now paste crysis
    5. Apply
    6. 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. <kbd>Apply</kbd>
    
    4. For **Wine** / **Lutris** override dll with **winecfg**

    text
    openal32 (builtin)

       _______
    
       For **Steam** you need to run from **Lutris** and:
       Select game, <kbd>Right&nbsp;:mouse:&nbsp;Button</kbd> -> <kbd>Configure</kbd>
    
       <kbd>Runner options</kbd> tab:
    
       - :white_check_mark: **Disable Steam runtime (use native libraries)**
    
       <kbd>System options</kbd> tab:
    
       - **Enviroment variables** -> <kbd>Add</kbd>
    
          Key
          ```text
          WINEDLLOVERRIDES
          ```
          Value
          ```text
          "openal32=b"
          ```
    ______
    
    ### Can't set resolution / resolution is messed up
    
    For **Wine** / **Lutris**:
    1. Select game in **Lutris**, <kbd>Right&nbsp;:mouse:&nbsp;Button</kbd> -> <kbd>Wine Configuration</kbd> open <kbd>Graphics</kbd> tab
    2. :white_check_mark: **Emulate a virtual desktop**
    3. You can change **Desktop size** if you need
    4. Press <kbd>Apply</kbd> and <kbd>OK</kbd>
    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**
    
    <br>
    
    
    <h1 id="heading--linux-gaming-advanced">Advanced</h1>
    
    
    <h3 id="heading--linux-gaming-advanced-physx">GPU PhysX</h3>
    
    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**:

    text
    physx
    “`

    1. 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

    ProjectRepositoryDevsBugsWikiSupport
    DXVKGitHubdoitsujin, Joshua-AshtonGitHubWiki
    VKD3DGitHub (proton)
    Git (Wine)
    Józef Kucia (RIP), Alexandre Julliard, Hans-Kristian ArntzenGitHubWiki
    LutrisWebsite, DatabaseMathieu ComandonGitHubWikiDonate
    WineWebsite, Databasearmy of themBugzillaWiki, DocsDonate
    Wine stagingGitHubzfigura, alesliehughesBugzillaWikiPatreon
    ProtonGitHub, DatabaseValveGitHubWiki, OptionsPatreon (protondb)
    Wine-TKG
    Proton-TKG
    GitHubFrogging-FamilyBugsGitHubPatreon
    Proton-GEGitHubGloriousEggroll, CreditsGitHubPatreon
    PlayOnLinux (Phoenicis)Website,
    Binaries
    qparis, plataGitHub (Winebuild)
    Follow us
    Was this article helpful to you? Yes 1 No

    How can we help?