Eve Online on Arch Linux

Submitted by kevin on Sun, 02/10/2019 - 22:08

After 8+ years of running EVE Online on Linux with great success, recently there have been major changes to the nvidia and vulkan libraries causing some issues. Along with the changes on EVE Client towards DX11 and 64bit upgrades there has been a few hurdles to keep EVE running smoothly.

On the 26th Feb 2020 CCP turned off the ability to launch and use 32bit clients so any reference to 32bit installations here is for historical purposes and won't work.

DX11 performs reasonably now on both wine DX11 and through the DXVK vulkan library. The only main issue I've experienced with DX11 are clouds in sites / anomalies appear as semi transparent squares:

EVE Online DX11 Black Square Bug

The only way I've found to stop this from happening in DX11 is to set the shaders to low. Interestingly Vulkan through DXVK instead of DX11 renders the clouds perfectly:

Vulkan and DXVK Cloud Rendering

Personally I've been running optimus nvidia laptops for 8+ years with varying levels of success.

NVIDIA
 

Using bumblebee, bbswitch and optirun/primusrun commands to run games on the discrete graphics card worked, but was a pain and broke regularly. Windows runs differently and silently passes graphic intensive workloads off to the discrete card for processing, there is a similar implementation on Linux called PRIME Sync (https://forums.developer.nvidia.com/t/prime-and-prime-synchronization/44423).

PRIME Sync works by keeping the nvidia discrete graphic card on/running which will impact battery life, however you'll find the laptop performs better and even IDEs and slightly graphic intensive applications / desktop environments start to run smoother.

Firstly one of the following drivers will need installing:

nvidia-vulkan-dkms 
nvidia-dkms 


Alternatively you can go with the NVIDIA base package with no dkms hook for the kernel however you'll need to make sure the NVIDIA package is installed in each kernel. Currently i've got the standard Arch Linux kernel along with Zen and LTS all installed and bootable via separate bootctl loader files. If you have multiple kernels dkms works great and reduces the amount of manual intervention needed after each update.

Quick search for installed packages for me gives:

lib32-nvidia-vulkan-utils 440.66.08-1 
lib32-opencl-nvidia-vulkan 440.66.08-1 
nvidia-prime 1.0-1 
nvidia-vulkan-dkms 440.66.08-1 
nvidia-vulkan-utils 440.66.08-1 
​​​​​​​opencl-nvidia-vulkan 440.66.08-1

Next you'll need to make sure the nvidia-drm module is loaded in the kernel:

vim /etc/modprobe.d/nvidia-drm-modeset.conf

options nvidia-drm modeset=1

OR

vim /boot/loader/entries/arch.conf

options root=PARTUUID=xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxx rw nvidia-drm.modeset=1

Make sure to have the Intel graphic drivers (https://www.archlinux.org/packages/?name=mesa) installed as well, otherwise the passthrough to intel won't work:

lib32-mesa 20.0.4-1
lib32-mesa-vdpau 20.0.4-1
mesa 20.0.4-1
mesa-demos 8.4.0-2
vulkan-mesa-layer 20.0.4-1

Additionally wayland on gnome doesn't appear to support PRIME Sync yet, so make sure to disable inside:

vim /etc/gdm/custom.conf 

WaylandEnable=false

More information on this setup and other options can be found on the Arch Linux Wiki (https://wiki.archlinux.org/index.php/PRIME#Closed-source_drivers). To check prime sync is working either run the following command or check inside the nvidia-settings app:

xrandr --prop | grep PRIME

or

NVIDIA Settings application showing PRIME Sync active

Once the proprietary NVIDIA drivers are installed and the discrete graphics card is running under PRIME Sync, setting up EVE Online can be done in one of two ways. Either by DirectX 9/11 or alternatively Vulkan with the DXVK library.

WINE SETUP
 

Firstly install the required packages for wine-staging and other required libraries, only run the second line if you want to run a vulkan + dxvk setup:

sudo pacman -S wine-staging wine_gecko winetricks wine-mono  ttf-ms-fonts samba gnutls mpg123 sdl libpulse libldap

sudo pacman -S vulkan-icd-loader vulkan-intel vulkan-tools vkd3d


EVE Online 32bit legacy client (deprecated):

Enable multilib see https://wiki.archlinux.org/index.php/Multilib (uncomment BOTH lines)

sudo vim /etc/pacman.conf

[multilib]
    Include = /etc/pacman.d/mirrorlist

Next install the 32 bit libraries:

sudo pacman -S lib32-gnutls lib32-mpg123 lib32-sdl lib32-libldap lib32-libpulse
sudo pacman -S lib32-vulkan-icd-loader lib32-vulkan-intel

Create a "wine prefix", think of this as the installation area for your windows based application, in this case EVE Online. Using winecfg we create a new prefix:

WINEARCH=win64 WINEPREFIX=~/.eve64 winecfg
WINEARCH=win64 WINEPREFIX=~/.eve64-dxvk winecfg
​​​​​​​
OR

WINEARCH=win32 WINEPREFIX=~/.eve32 winecfg

Here there are a few different ways to run EVE Online which heavily depends on the software you choose next. In order of current recommendation:

DX9/DX11 Stanard (no Vulkan dxvk)
This is still currently the most stable way to run EVE Online on Linux, however note the graphics issue with dust clouds at the start of this post.

Next use winetricks to install the required wine packages:

WINEARCH=win64 WINEPREFIX=~/.eve64 winetricks vcrun2017 7zip d3dcompiler_43 d3dx11_43 d3dx9_43
OR

WINEARCH=win32 WINEPREFIX=~/.eve32 winetricks vcrun2017 7zip d3dcompiler_43 d3dx11_43 d3dx9_43

Once EVE Online has been installed inside this newly created prefix you can switch the DirectX version being used inside the launcher settings. DX9 has better performance, however DX11 supports newer shadings and looks better (apart from the black cube clouds).

DXVK / Vulkan for DX11/12

WINEARCH=win64 WINEPREFIX=~/.eve64-dxvk winetricks vcrun2017 7zip dxvk

OR

WINEARCH=win32 WINEPREFIX=~/.eve32-dxvk winetricks vcrun2017 7zip dxvk

DXVK / Vulkan for DX9
A more performant way to run EVE Online with a conversion layer from DX9 to Vulkan

WINEARCH=win64 WINEPREFIX=~/.eve64-dxvk9 winetricks vcrun2017 7zip d3dcompiler_43 d9vk040

OR

WINEARCH=win32 WINEPREFIX=~/.eve32 winetricks vcrun2017 7zip d3dcompiler_43 d9vk040


EveOnline


Download installer and full offline zip into the same folder

https://www.eveonline.com/download

Make the exe file executable:

chmod +x ~/Downloads/EveLauncher-xxxxxxx.exe

Launch with the correct wine prefix:

DX11/12
WINEARCH=win64 WINEPREFIX=~/.eve64 ~/Downloads/EveLauncher-xxxxxxx.exe

OR

Vulkan DXVK
WINEARCH=win64 WINEPREFIX=~/.eve64-dxvk ~/Downloads/EveLauncher-xxxxxxx.exe

OR

WINEARCH=win32 WINEPREFIX=~/.eve32 ~/Downloads/EveLauncher-xxxxxxx.exe


If the installation has created a desktop file, it may need amending:

vim ~/.local/share/applications/wine/Programs/EVE\ Launcher/EVE\ Launcher.desktop

[Desktop Entry]
Name=EVE Launcher
Exec=env SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS=0 __GL_MaxFramesAllowed=1 WINEESYNC=1 WINEDEBUG=-all WINEARCH=win64 WINEPREFIX=/home/user/.eve64 wine /home/user/.eve64/drive_c/EVE/eve.exe
Type=Application
StartupNotify=true
Path=/home/user/.eve64/dosdevices/c:/EVE
Icon=539E_evelauncher.0
StartupWMClass=evelauncher.exe

OR 

[Desktop Entry]
Name=EVE Launcher
Exec=env SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS=0 __GL_MaxFramesAllowed=1 WINEESYNC=1 WINEDEBUG=-all WINEARCH=win64 WINEPREFIX=/home/user/.eve64-dxvk wine /home/user/.eve64-dxvk/drive_c/EVE/eve.exe
Type=Application
StartupNotify=true
Path=/home/user/.eve64-dxvk/dosdevices/c:/EVE
Icon=539E_evelauncher.0
StartupWMClass=evelauncher.exe

OR 

[Desktop Entry]
Name=EVE Launcher
Exec=env SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS=0 __GL_MaxFramesAllowed=1 WINEESYNC=1 WINEDEBUG=-all WINEARCH=win64 WINEPREFIX=/home/user/.eve64-dxvk9 wine /home/user/.eve64-dxvk9/drive_c/EVE/eve.exe
Type=Application
StartupNotify=true
Path=/home/user/.eve64-dxvk9/dosdevices/c:/EVE
Icon=539E_evelauncher.0
StartupWMClass=evelauncher.exe

OR 

[Desktop Entry]
Name=EVE Launcher
Exec=env SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS=0 __GL_MaxFramesAllowed=1 WINEESYNC=1 WINEDEBUG=-all WINEARCH=win64 WINEPREFIX=/home/user/.eve32 wine /home/user/.eve32/drive_c/EVE/eve.exe
Type=Application
StartupNotify=true
Path=/home/user/.eve32/dosdevices/c:/EVE
Icon=539E_evelauncher.0
StartupWMClass=evelauncher.exe

More info: https://wiki.archlinux.org/index.php/Desktop_entries

chmod +x ~/.local/share/applications/wine/Programs/EVE\ Launcher/EVE\ Launcher.desktop
update-desktop-database ~/.local/share/applications

Strangle
 

Strangle is a useful library to limit down the FPS without relying on intervals (vsync) inside EVE Online (and other games/programs). At the moment with DX11/9 and NVIDIA PRIME Sync only Interval 1 works inside EVE Online which will enable vsync restricting down the FPS to the same as the panel's refresh. Having bought a laptop with a 144HZ panel this give 144 FPS on every EVE Online client, which puts significant load on the laptop and generates lots of heat. When running DXVK and Vulkan instead of straight DX11 the additional 2,3 and 4 Intervals work, restricting down the client's FPS further, however with vsync enabled in DXVK and NVIDIA PRIME Sync there is a freezing bug which will make using more than one client impossible (https://forums.developer.nvidia.com/t/prime-and-prime-synchronization/44423). Strangle has resolved this bug for my setup, so please get in touch if this resolves it for you as well!

Strangle FPS to 30 with DX11:

__GL_THREADED_OPTIMIZATIONS=1 SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS=0 __GL_MaxFramesAllowed=1 WINEESYNC=1 WINEDEBUG=-all WINEARCH=win64 WINEPREFIX=/home/user/.eve64 strangle 30 wine /home/user/.eve64/drive_c/EVE/eve.exe

Strangle FPS to 30 with DXVK/Vulkan:

__GL_THREADED_OPTIMIZATIONS=1 SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS=0 __GL_MaxFramesAllowed=1 DXVK_HUD=1 DXVK_STATE_CACHE=0 DXVK_LOG_LEVEL=none WINEESYNC=1 WINEDEBUG=-all WINEARCH=win64 WINEPREFIX=/home/user/.eve64-dxvk strangle 30 wine /home/user/.eve64-dxvk/drive_c/EVE/eve.exe

https://aur.archlinux.org/packages/libstrangle-git/ - https://gitlab.com/torkel104/libstrangle

~  strangle --help                         
Usage: strangle [OPTION]... [FPS] PROGRAM
  or:  strangle [OPTION]... [FPS]:[BATTERY_FPS] PROGRAM
Limit the framerate of PROGRAM to FPS

Mandatory arguments to long options are mandatory for short options too.
  -a, --aniso AF           sets the anisotropic filtering level. Makes textures
                             sharper at an angle. Limited OpenGL support
  -b, --battery-fps FPS    alternative framerate cap for when running on
                             battery power. See --fps
  -f, --fps FPS            limit the framerate to FPS.
                             A value of 0 will disable the limiter.
  -k, --vulkan-only        prevent the OpenGL libs from loading
  -n, --no-dlsym           disable dlsym hijacking in the OpenGL library
  -p, --picmip PICMIP      set the mipmap LoD bias to PICMIP. A higher value
                             means blurrier textures. Can be negative
  -t, --trilinear          force trilinear filtering. Vulkan only
  -v, --vsync VSYNC        Force vertical synchronisation on or off.
                             For OpenGL the following rules apply:
                               0 - Force off
                               1 - Force on
                               n - Sync to refresh rate / n
                             For Vulkan the following rules apply:
                               0 - Force off
                               1 - Mailbox mode. Uncapped framerate
                               2 - Traditional vsync. Capped framerate
                               3 - Adaptive vsync. tearing at low framerates

Short options may not be combined into one string.
Options will override environment variables.

Some programs will crash, freeze or behave unexpectedly when dlsym is hijacked
If a program is exhibiting these symptoms when run with strangle try using the
'--no-dlsym' option. Or if the program uses the Vulkan API you can disable
strangle's OpenGL libs altogether with the '--vulkan-only' option.

Strangle home page: <https://gitlab.com/torkel104/libstrangle>


Notes:
 

  • DX9 (enable in launcher settings) make sure to set interval one in eve client settings for smoother performance (enables vsync)
  • DX11 make sure to set interval immediate or switching applications (alt+tab) freezes for long periods when dxvk (vulkan) is enabled (install wine prefix without dxvk to disable and use vsync) https://devtalk.nvidia.com/default/topic/1044496/linux/hangs-freezes-when-vulkan-v-sync-vk_present_mode_fifo_khr-is-enabled/ - update or combine with libstrangel for DXVK + PRIME Sync and vsync/restricted FPS
  • Kernel 5.4 breaks PRIME Sync which then prevents vsync from working (restricts FPS to monitior frame rate) https://devtalk.nvidia.com/default/topic/957814/linux/prime-and-prime-synchronization/25 advisable to switch to the LTS kernel or look at patching the nvidia driver: https://devtalk.nvidia.com/default/topic/1068045/5-4-kernel-breaks-prime-synchronization-/ 
  • kernel 5.4 apparently works with the nvidia beta vk driver
  • kernel 5.4 has now fixed vsync with NVIDIA PRIME Sync
  • For Arch Linux at the moment i would highly recommend switching to the nvidia vulkan drivers for a newer driver that works with kernel 5.4 and PRIME Sync out of the box. This makes sure vsync is working on dual GPU laptops with and without vulkan.
yay -S nvidia-vulkan-dkms lib32-nvidia-vulkan-utils lib32-opencl-nvidia-vulkan opencl-nvidia-vulkan

Disabling Gnome Left-Alt + F1 + Left-Alt + F2 combo, Left Alt + F* is used by eve for activating and deactivating mid slot items. Slightly annoying to be forced out of the game to the window switcher:

gsettings set org.gnome.desktop.wm.keybindings panel-main-menu "[]" # disable Alt+F1
gsettings set org.gnome.desktop.wm.keybindings panel-run-dialog "[]" # disable Alt-F2

If using opensource drivers (intel/nouveua/mesa) use wine-staging-nine for the gallium-nine native direct x 9 implementation for a good performance boost. Set DX9 in the eve launcher settings. To enable run in that particular wine prefix:

WINEARCH=win32 WINEPREFIX=~/.wine32 winecfg
Staging Tab
Check "Enable Gallium Nine for better D3D9 graphic performance"


Known Bugs

  • Currently wine 4.10 breaks all games requiring a chromium embedded browser, fixed in 4.11 https://bugs.winehq.org/show_bug.cgi?id=47167 Recommend to downgrade back to 4.9 if possible via the pacman cache files: pacman -U /var/cache/pacman/pkg/package_name_here
     
  • Since Wine 4.9 adding WINEESYNC=1 has significantly increased performance and smoothed a lot of loading lag out of the game, would highly recommend adding this flag to the desktop/start commands.
     
  • Kernel 5.4 breaks PRIME Sync which then prevents vsync from working (restricts FPS to monitior frame rate) https://devtalk.nvidia.com/default/topic/957814/linux/prime-and-prime-synchronization/25 advisable to switch to the LTS kernel or look at patching the nvidia driver: https://devtalk.nvidia.com/default/topic/1068045/5-4-kernel-breaks-prime-synchronization-/ - now fixed
     
  • PRIME Sync with DXVK and vsync causes system wide freezing when switching windows or workspaces (https://devtalk.nvidia.com/default/topic/1044496/linux/hangs-freezes-when-vulkan-v-sync-vk_present_mode_fifo_khr-is-enabled/) not fixed, however libstrangle appears to work around this issue.