Linux support (again)

Opening a new thread with some interesting new EAC updates for Linux. For context, I’m in the below situation and would very much like to change that:

This weekend there was an interesting update at reddit with regards to using Windows EAC in Wine (note: not Linux EAC!): Reddit - Dive into anything

At this point, EAC will load, correctly process an IOCTL in which the loader sends an encrypted “internal dll”, which it expects the driver to inject into the game process. EAC will then correctly map this dll when the process loads, and try to initialize it. This is the point where it is failing right now (the internal dll will yield an error), but we seem to be really close to the end of the initialization function, and once blitzcrank finishes devirtualizing it, we should be able to quickly get the function to succeed. In theory, if all goes to plan, the game should then launch, and be able to load the EAC library through the hooks setup by the internal DLL / kernel.

The discussion takes place at Discord and channel #easy-anti-lobster for those who want to keep up to date. The work is primarily (as I understand it) being done by employees at Codeweavers (i.e. the company behind Crossover Linux / Chrome / etc).

For those new to the Linux situation with VT2 the game itself runs flawlessly (I even get better perfomance with Proton and DXVK than on Windows*) but is hampered by EAC not functioning on Wine (i.e. Proton), which puts the game in the untrusted state and prevents progress (see Warhammer: Vermintide 2 (552500) · Issue #1528 · ValveSoftware/Proton · GitHub). Valve and Epic (the company behind EAC, and yes, the Tim Sweeney Epic, so a competitor to Valve) are said to be working on Proton compatibility with (Windows) EAC, although nothing has been stated publicly for almost a year.

*Could very well be related to the fact that EAC is not running…

4 Likes

An update for the interested (in particular @OrsonMaxwell and @alsozara who liked the post):

[Info] [LauncherFinished] EACAsyncResult: 0 Message: ‘Easy Anti-Cheat successfully loaded in-game’.
[Info] Entering background wait for the game process to exit.
[Info] Game process exited with process exit code (0).
[Info] Unloading the EasyAntiCheat library.
[Info] Destroying windows.
[Info] Exit.

EAC loads fine with Vermintide 2, but says that the game is in an untrusted state. I wonder if that has to do with that I have to bypass the launcher.

Launcher error (I don’t think I’ll get that working since it depends on how Wine emulates some Windows APIs, but you never know):

08:38:41.426 [Launcher] [Main Window] Error when checking parent process: System.ArgumentNullException: Value cannot be null.
Parameter name: ptr

@Fatshark_Hedge Could you confirm whether or not you have to go via the launcher to get Vermintide 2 running with EAC? If you have to go via the launcher, are you (i.e. Fatshark) willing to modify the launcher so it runs in Wine?

Anyhow, I will dig a bit deeper into this tonight (got work to do during the day somehow).

1 Like

Users can use the bypass launcher option and still enter the game in a trusted state.

PS: Slay the Spire is an amazing game, you should all play it

1 Like

Ty for the info!

The chaos warrior splash screen (as pictured, ignore the error, just a google find) is the EAC launcher/moment when EAC initialises.
image

1 Like

Ty for the additional info. I dug a bit in my logs and it does look like EAC starts fine, but there is some communication error between game and EAC.

I.e. game starts EAC, says awesome, I started EAC. EAC says, awesome I’m running. Game says sad-face, I can’t find EAC-process. EAC says awesome, I’m running and getting no errors and so forth, and EAC quits nicely when I end the game.

Anyhow, back to what I’m paid to do…

2 Likes

So, the EAC fix for wine worked for an older version of EAC, and they pushed a new EAC version around two days ago which broke it.

The EAC version is game specific, and FS does a good job keeping it up to date (sadly for us Linux peeps).

Its alive! Its freaking alive!

Wine version which supports EAC:

This is very bleeding edge, unless you are very comfortable with Wine, DXVK, etc, hold of for now. It is likely to be integrated into both Wine (i.e. potentially as a runner with Lutris) and Proton (possible to run directly from Steam for Linux) within a semi-near future. Also, I’m sure people will start spreading packaged versions of this to the most popular Linux distros.

All development credit goes to guy and blitzcrank at the VKx discord (see earlier posts).

Performance is remarkably good out of the box, I’ll probably spend some evenings after the rest of the family is asleep to optimize the game a bit.

2 Likes

Everything more or less works optimally, except that the current EAC patched version of wine is not patched with ESYNC, which puts a lot of extra load on the CPU. The load is such that the single thread performance when running multiple threads is the bottleneck. Practically I’m frame capped at around 40 fps, and during hordes on higher difficulties I’m down to 5 fps or so (with the GPU at 5% load or so…).

Recruit and veteran are playable though, due to the smaller amounts of vermin which need to be coordinated on the main thread :wink:

1 Like

TKG packaged a new version of EAC-enabled Wine this morning, which add rudimentary optimizations. With this version I get around 70% of my Windows performance (still CPU bound).

A short short guide:

  1. UNDERSTAND THAT THIS IS ON YOUR OWN RISK, I AM NOT RESPONSIBLE FOR ANYTHING WHICH MIGHT HAPPEN, INCLUDING GETTING AN EAC-BAN
  2. Run Arch or compatible distro (if you want to build pacman or another pkgbuild manager for Debian, you are on your own if you don’t have pkgbuild support)
  3. Download the package (i.e. the .zst file)
  4. Use your package manager to install the package (i.e. sudo pacman -U wine-tkg-git-eac-christmas-tree-edition-5.5.r12.g4d01e488-292-x86_64.pkg.tar.zst for Arch and derivatives with pacman)
  5. Use Wine to Install Steam and Vermintide 2 through Steam (i.e. WINEPREFIX=/path/to/prefix winetricks steam).
  6. Ensure you have DXVK installed in the prefix you use (see https://github.com/doitsujin/dxvk if you are unsure, you want dx11 and dx12 support).
  7. Launch Steam with -no-browser through the modified wine executable (i.e. WINEPREFIX=/path/to/prefix/with/vermintide WINEESYNC=1 wine "C:/program files (x86)/steam/steam.exe" -no-browser 2>/dev/null, the last part to get rid of error messages which will flow freely) (technically ESYNC is not supported yet, but it doesn’t break anything anymore)
  8. Run game.
  9. Kill some rats! :rat: :warhammer:

I played a game this morning and it was quite enjoyable, a little bit lower fps than I get on my Windows instance, but works well enough for me to finally get rid of my Windows partition.

As a sidenote, I run Manjaro with a modified Xanmod-kernel (based on linux 5.7.8) and nvidia 450 drivers (most linux distros are probably still using 430 or 440).

@Fatshark_Hedge Can you holler if you hear anything from EAC about banning Wine-users? I’ll remove this short guide then.

2 Likes