Thanks to the global effort of the open source community and Valve Corporation, gaming on GNU/Linux is getting more and more accessible.
Open source community created Wine. Wine is not an emulator. It's a compatibility interlayer between Linux POSIX API and Windows WinAPI32. These are two very different software interfaces that let programs access input/output hardware on your computer: keyboard, monitor, mouse, harddrive, audio, internet. Instead of emulating entire system like VirtualBox VMs does, Wine works as a 'language' translator and software written for Windows, thereby being deceived, runs nicely on a Linux machine. That, of course, if the translator does a good job at translating and supporting as much as more possible number of 'words' (API function calls). In reality, some functions are not implemented, some are partly, some have mistakes. Right now only minimum needed functionality is implemented, just enough to run at least something. That means, that very advanced Windows software that uses rare API calls or libraries have less chances to work correctly. Also don't believe charlatans that say Wine is running Windows apps faster, than the Windows itself. It depends, for example, World of Warcraft seem to work faster on Linux, but it maybe because unimplemented API calls are simply ignored, the game still works, it's maybe okay if they don't work, thus they don't consume processing power, but you may experience downgrade in graphics quality and special effects. And most importantly, Wine is still consuming at least some computing resources while it is working translating APIs back and forth. It can be faster, in theory, because latest Windows releases contains a lot of bloatware, spyware, adware and regressions, that running on Wine feels smoother and faster, on a relatively clean Linux machine without all that bullshitware.
Valve Corporation introduced their large gaming platform on Linux natively together with improved version of Wine, which they call Steam Proton and then released Steam Deck, a handheld gaming computer, which runs on Linux with their Proton compatibility layer. Checkmate Micro$oft. Now, if a gaming studio want their creation work on Steam Deck, they got to make it work on Steam Proton, which will automatically make it work on a PC desktop computer running almost any popular Linux distribution.
In this article, I will demonstrate you, how to create a simple Wine environment, that can run some Windows video games without Steam, on Manjaro Linux 22.0.
To get it to work we need to install several various software packages with official package manager and some from unofficial AUR:
- wine — A compatibility layer for running Windows programs.
- winetricks — Script to install various redistributable runtime libraries in Wine.
- wine_gecko — Wine's built-in replacement for Microsoft's Internet Explorer.
- wine-mono — Wine's built-in replacement for Microsoft's .NET Framework.
- vkd3d — Direct3D 12 to Vulkan translation library By WineHQ.
- dxvk-bin[AUR] — A Vulkan-based compatibility layer for Direct3D 9/10/11 which allows running 3D applications on Linux using Wine (Windows DLL binary files).
- vkd3d-proton-bin[AUR] — Direct3D 12 to Vulkan translation library (Windows DLL binary files).
Installation and configuration
Note: Character '$' and '#' before the command-line tells if the command should be executed from user-space or from root user account respectively.
I should use "pamac" to install stuff on Manjaro, because it's an official thing, but out of old habit after archlinux, I still install stuff with "pacman". Some say it'll break stuff, but after 3 years… it's still strong and stable as Everest mountain. Here we go:
# pacman -S wine winetricks wine_gecko wine-mono vkd3d
The AUR packages. I use "yay" (Yet another yogurt. Pacman wrapper and AUR helper written in go) to install these:
(if you don't have "yay" installed yet) # pacman -S yay
$ yay -S vkd3d-proton-bin
It's time to initialize sandbox folder for running Windows apps. By default it is located in user home folder "~/.wine/" as a hidden folder. Initialize with:
$ wineboot --init
To select other sandbox folder, change WINEPREFIX environment variable. Append WINEPREFIX="~/.wine-custom" each time before running Wine commands:
$ WINEPREFIX="~/.wine-custom" wineboot --init
or make it temporarily permanent within current session:
$ export WINEPREFIX="~/.wine-custom" $ wineboot --init
I recommend to install Microsoft Visual C++ Redistributable Runtimes now, because it is very likely you'll need it. This can be done with "winetricks":
$ winetricks vcrun2019
Winetricks is a nice tool that can install various additional Windows libraries. Run it without parameters, click "Next" with "Select the default wineprefix" and choose "Install a Windows DLL or component". You'll get a large list of various Windows components, that is convenient to install if some special software requires it:
Install Direct3D 9/10/11 libraries:
$ setup_dxvk install
Install enhanced Direct3D 12 library:
$ setup_vkd3d_proton install
Some fine tuning is still needed. Run "winecfg", select "Windows 10" as compatibility version and map the D:\ drive to the folder containing video games. It can be NTFS file system, it still works. Just make sure you don't have spaces and/or special characters in the file path, as this breaks a plenty of Windows software:
The most basic way to use Wine, is to run it from command-line by giving file path to the app as a parameter. I got D:\ drive mapped to second data storage harddrive on my desktop PC with a large NTFS partition. Mounted partitions in Manjaro Linux can be found in "/run/media/$USER_NAME/$PARTITION_NAME". It is possible to specify Windows file path:
$ wine "D:\Games\Blood - Fresh Supply\anuket_x64.exe"
or linux path:
$ wine "/run/media/valka/Новый том 2/Games/Blood - Fresh Supply/anuket_x64.exe"
First test video games in terminal emulator, as you'll see error messages then, in case it doesn't work, which you can google in hope for a solution. If it works fine, then you can desktop shortcut, start menu shortcut, or use runners like Lutris.
High On Life
GTA: San Andreas
https://wiki.archlinux.org/title/Gaming — Generic information about gaming on linux.
https://wiki.archlinux.org/title/Wine — More detailed information about Wine configuration.
https://appdb.winehq.org/ — Wine Application Database (AppDB). Here you can get information on application compatibility with Wine.
https://www.protondb.com/ — Steam Proton video game compatibility database.
https://linux-gaming.ru/ — PortProton, is a runner for Wine developed by russian linux gamers. Has plenty of scripts for automatic installation of gaming platforms Ubisoft Game Launcher, GoG Galaxy Launcher, Origin, Epic Games Launcher, Origin, Rockstart Game Launcher and others.
You'll probably experience troubles with running almost every game title. It's normal. Consider this as beta testing. Seek for support with online search engines and help others. All Linux distributions are a bit different, one video game can run smoothly on distribution A, but on distribution B some tweaking needed, or vice versa. Read log messages, try different launchers, try deleting Wine sandbox folder "~/.wine" and start fresh, try libraries from different sources, try different combinations of options, try WINEARCH=win32, try Steam Proton, experiment. If you see video game marked as operational on online application databases by most of the users and it doesn't work for you, then it's highly likely that something is wrong with your configuration. Often it's difficult to figure out. Application databases might have comments from users containing valuable hints how to workaround troubles.
It's slowly getting better and better everyday. Have some patience, stubbornness and you'll be rewarded :3