Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Steam: Easy Anti-Cheat does not work under Void #41388

Open
Cynosphere opened this issue Jan 1, 2023 · 131 comments
Open

Steam: Easy Anti-Cheat does not work under Void #41388

Cynosphere opened this issue Jan 1, 2023 · 131 comments
Labels
bug Something isn't working

Comments

@Cynosphere
Copy link

Cynosphere commented Jan 1, 2023

Is this a new report?

Yes

System Info

Void 6.0.15_1 x86_64 AuthenticAMD notuptodate FFFFFFFF

Package(s) Affected

steam-1.0.0.75_2 (theoretical)

Does a report exist for this bug with the project's home (upstream) and/or another distro?

ValveSoftware/Proton#1199 (comment)
#34902 (comment)
ValveSoftware/Proton#6051

Expected behaviour

Games using Easy Anti-Cheat run fine.

Actual behaviour

Games using Easy Anti-Cheat seem to not initialize Easy Anti-Cheat properly.

Steps to reproduce

VRChat:

  1. Launch game through Steam
  2. Login if fresh install
  3. Be greeted with "Can't Travel" screen explaining Easy Anti-Cheat hasn't been initialized.

Apex Legends:

  1. Launch game through Steam
  2. Wait to get to the main menu
  3. Be greeted with Engine Error message box saying "Easy Anti-Cheat Hash Catalogue not found"
@Cynosphere Cynosphere added bug Something isn't working needs-testing Testing a PR or reproducing an issue needed labels Jan 1, 2023
@oreo639
Copy link
Member

oreo639 commented Jan 1, 2023

For comment 2, if you go further, you will see that the issue was that while I was testing with a patched glibc I wasn't using a patched glibc-32bit (hence why it wasn't working).

I tested with Multiversus right now and that works for me.

You can try xbps-install -Sf glibc glibc-32bit to make sure you are using the version from the repos and not an old local build.

(You can use xpkg -L to list which packages are installed locally as opposed to from a repo)

@Cynosphere
Copy link
Author

No change, I don't think I ever had a local build of glibc as this install has only existed since October and I've had no reason to touch glibc.

@oreo639
Copy link
Member

oreo639 commented Jan 1, 2023

When did you first run into this issue and was it working for you before the glibc 2.36 update?

@Cynosphere
Copy link
Author

November 19th is when I first tried to run a game using EAC, which if I'm correct was before 2.36 and it was not working then either.

@oreo639
Copy link
Member

oreo639 commented Jan 1, 2023

Did you try following cat /usr/share/doc/steam/README.voidlinux?

@Cynosphere
Copy link
Author

Already had the needed 32bit packages, none of the troubleshooting steps made any changes.

@oreo639
Copy link
Member

oreo639 commented Jan 1, 2023

Can you join #voidlinux on irc/matrix?

@Cynosphere
Copy link
Author

Joined on IRC

@oreo639
Copy link
Member

oreo639 commented Jan 1, 2023

I can confirm that Apex Legends doesn't work. I can also confirm that DT_HASH is present in glibc so it shouldn't be related to that.
This can be confirmed using:
readelf -e /usr/lib/libc.so.6
readelf -e /usr/lib32/libc.so.6
Both have .gnu.hash and .hash.

As a workaround flatpak should work.

@Cynosphere
Copy link
Author

I do hope someone does attempt to find the actual cause of the issue instead of leaving it to die on the hill of "just use flatpak".

@oreo639
Copy link
Member

oreo639 commented Jan 1, 2023

You can try using strace -f to see where it exits? (you would probably want to edit the launch script or add it as launch args)

@Cynosphere

This comment was marked as off-topic.

@Cynosphere Cynosphere closed this as not planned Won't fix, can't repro, duplicate, stale Jan 1, 2023
@oreo639
Copy link
Member

oreo639 commented Jan 2, 2023

When running it with proton 6.3:
I found logs at $HOME/.local/share/Steam/steamapps/compatdata/1172470/pfx/dosdevices/c:/users/steamuser/AppData/Roaming/EasyAntiCheat
It shows the following error Connect result: Couldn't resolve host name (6) Response Code: 0 Destination IP: Unavailable

When using proton experimental:
The logs here indicate no error (although the "Easy Anti-Cheat Hash Catalogue not found" error still show up when trying to start the game).
There are also logs generated at ~/.cache/com.epicgames.easyanticheat/154 when using proton expiremental which also indicate no error.

I'll see if I can find anything from the strace output.

Edit: I am not getting the hash catalogue error when using strace -f (and EAC isn't working) so maybe it is detecting that?

@Naia-love
Copy link

Naia-love commented Jan 2, 2023

Hello, have same troubles here, on Void too, can't play apex or vrchat, I can play Elden Ring but in offline only.
For Apex replacing the EAC dll/so by the one present in the proton EAC runtime make the game goes past the "Easy Anti-Cheat Hash Catalogue not found", launching properly, accessing to the loby and all, but after a while it'll kick you out saying that EAC isn't running.

I also want to report that EAC isn't the only thing acting strange on Void, steamvr is too

(and quick note, yes it do work in flatpak. Thanks for reminding me, i totally forgot steam flatpak existed. But while it's a great workaround, it still suck that it just dont work by default)

@paper42 paper42 removed the needs-testing Testing a PR or reproducing an issue needed label Jan 2, 2023
@paper42 paper42 reopened this Jan 2, 2023
@paper42
Copy link
Member

paper42 commented Jan 2, 2023

reopening because this is not fixed

@Johnnynator
Copy link
Member

Actually the issue seems to be the compination of eac and our glibc, did setup a quick chroot and changing the glibc to the one from arch satisfies eac, using the void one doesn't 🤷

@Naia-love
Copy link

Naia-love commented Jan 2, 2023

what is very strange is that:

and that so in both case its broken

@ahesford
Copy link
Member

ahesford commented Jan 3, 2023

I've read through some of the links on this page and, transitively, an essay at https://maskray.me/blog/2022-08-21-glibc-and-dt-gnu-hash that leaves me wondering:

  1. Why we carry a patch attempting to revert the linker change contrary to our usual deference to upstream. They have been aware of this problem for months and are apparently uninterested in the issue or reverting the change.
  2. Why this issue isn't closed as WONTFIX with a note that EAC needs to fix its shit. The patch doesn't fix Void-packaged software, it fixes proprietary software fetched optionally by one of our packages. Furthermore, as already noted, there are alternatives like flatpak while people bother the EAC people to fix what broke.

@oreo639
Copy link
Member

oreo639 commented Jan 3, 2023

Why we carry a patch attempting to revert the linker change contrary to our usual deference to upstream. They have been aware of this problem for months and are apparently uninterested in the issue or reverting the change.

I assume you are referring to:
https://sourceware.org/pipermail/libc-alpha/2022-August/141304.html

At present I would not make any changes to glibc. I would close bug 29456
as RESOLVED/WONTFIX. I'm open to hearing from the EPIC EAC developers
if they have a case to make about DT_HASH.

Carlos later said:
https://sourceware.org/pipermail/libc-alpha/2022-September/142353.html

The fix is available in version 1.15.2 of the EOS SDK and in the new
corresponding version of the anti-cheat module. This was released in August.

Fixing this issue though requires several steps that need to be taken by the
developers of the game itself.
...
Looking across the distributions some of them are carrying a revert that adds
back DT_HASH. Therefore I think it would help the distributions and add
back DT_HASH support for a longer period of time before final removal.

I don't think this will solve all the problems, but I will work to test out
the revert on my Fedora system.

Carlos added a temporary revert for DT_HASH in Fedora:
https://src.fedoraproject.org/rpms/glibc/c/a9713abfbd4db4350fbc201e4d5cd6ddc36cfd27?branch=f37

@ahesford
Copy link
Member

ahesford commented Jan 3, 2023

I'm referring to the fact that the upstream issue at https://sourceware.org/bugzilla/show_bug.cgi?id=29456 remains open and unassigned five months after it was reported.

Whether other distributions carry a patch to revert the change is irrelevant here. Void favors upstream decisions and eschews patches unless they are backports of upstream changes or fix issues introduced specifically by our packaging. This is neither. Upstream made a change to drop support for DT_HASH and continues to stand by it. We should be uninterested in fixing this problem until either upstream reverts the patch (in which case we can backport it if we don't want to wait for the next release) or EAC is fixed to support the glibc change (in which case the problem goes away entirely).

This is not our problem to fix.

@ghost
Copy link

ghost commented Feb 23, 2023

I'm referring to the fact that the upstream issue at https://sourceware.org/bugzilla/show_bug.cgi?id=29456 remains open and unassigned five months after it was reported.

Whether other distributions carry a patch to revert the change is irrelevant here. Void favors upstream decisions and eschews patches unless they are backports of upstream changes or fix issues introduced specifically by our packaging. This is neither. Upstream made a change to drop support for DT_HASH and continues to stand by it. We should be uninterested in fixing this problem until either upstream reverts the patch (in which case we can backport it if we don't want to wait for the next release) or EAC is fixed to support the glibc change (in which case the problem goes away entirely).

This is not our problem to fix.

This issue isn't caused because support for DT_HASH was dropped though; as other comments indicate, Easy Anti Cheat has been broken on Void since at least glibc 2.32. After all, the current glibc package does contain this patch and yet EAC is still broken. IOW, discussion about this patch is off-topic and would be better suited in a separate issue IMO.

I'm posting this mainly because as a user your comment (being the last one in the chain) made me think that the issue is related to the glibc 2.36 update, when it isn't actually. This discouraged me from attempting to troubleshoot it on my own, which seems counter-productive to me (although admittedly I didn't get very far when I did try troubleshooting on my own). This is significant, as currently Void is the only distribution I am aware of in which EAC is broken despite the aforementioned patch being applied.

In any case, I would very much like to see this issue fixed, and I would be glad to help with any testing (I own Elden Ring and Fall Guys on Steam, both of which use EAC unfortunately).

BTW, I don't use the Steam Flatpak since I also use Steam as a launcher for emulated games - setting this up is very complicated with the Flatpak version (Flatpak in general is way too complicated IMO, so I'd prefer to avoid it if possible).

@numfin

This comment was marked as spam.

@caszuu
Copy link

caszuu commented Jun 26, 2024

The example above is incomplete, sorry should have clarified that better... You should get the full command from steam the same as Tyfuzzle did above (steam used to print the command it used to launch the game but doesn't now)

The goal is to call the same command as steam would by default with the Linux runtime removed

For example on my system the full command for vrchat is

/home/caszu/.local/share/Steam/ubuntu12_32/reaper SteamLaunch AppId=438100 -- /home/caszu/.local/share/Steam/ubuntu12_32/steam-launch-wrapper -- '/home/caszu/.local/share/Steam/steamapps/common/Proton - Experimental'/proton waitforexitandrun  '/home/caszu/.local/share/Steam/steamapps/common/VRChat/launch.exe' # %command%

@okawo80085
Copy link

Ohhhh, yeah that would explain it, what does the last # %command% do tho? Is it some more proton args or?

@Naia-love
Copy link

Ohhhh, yeah that would explain it, what does the last # %command% do tho? Is it some more proton args or?

im not sure what the # do but the %command% tell steam its a command that need to be run before launching the game and not arguments to pass to the game executable

@caszuu
Copy link

caszuu commented Jun 26, 2024

It's what makes the original command from steam a shell comment as a way to deactivate it

It's explained on the archwiki

@okawo80085
Copy link

YOOOOOOOOOOOOOOOOOOOOOOOOO

It finally worked! Im gonna poke around with it a bit more, and if all is well i'll have a decent script that can launch stuff and not make EAC crash!

And i guess we can narrow this issue down to the linux sniper runtime that steam ships, the _v2-entry-point script in particular

@okawo80085
Copy link

okawo80085 commented Jun 26, 2024

Correction, Insurgency still does not work, however VRChat does? But only when launched using launch.exe instead of VRChat.exe

Script that i used to test looks like this

#!/bin/bash

STEAM_PATH="$HOME/.local/share/Steam/ubuntu12_32"
PROTON_PATH="$HOME/.local/share/Steam/steamapps/common/Proton - Experimental"

APP_BIN=$2
APP_ID=$1

echo Launching \'$APP_BIN\' AppId=$APP_ID without _v2-entry-point...
echo

$STEAM_PATH/reaper SteamLaunch AppId=$APP_ID -- $STEAM_PATH/steam-launch-wrapper -- "$PROTON_PATH"/proton waitforexitandrun $APP_BIN

VRChat works fine if i launch it like this

./run_steam_without_v2_entry_point.sh 438100 ~/.steam/steam/steamapps/common/VRChat/launch.exe

However Insurgency does not work fine if i launch it in a similar fashion

./run_steam_without_v2_entry_point.sh 581320 ~/.steam/steam/steamapps/common/sandstorm/Insurgency.exe

@Naia-love
Copy link

Correction, Insurgency still does not work, however VRChat does? But only when launched using launch.exe instead of VRChat.exe

Script that i used to test looks like this

#!/bin/bash

STEAM_PATH="$HOME/.local/share/Steam/ubuntu12_32"
PROTON_PATH="$HOME/.local/share/Steam/steamapps/common/Proton - Experimental"

APP_BIN=$2
APP_ID=$1

echo Launching \'$APP_BIN\' AppId=$APP_ID without _v2-entry-point...
echo

$STEAM_PATH/reaper SteamLaunch AppId=$APP_ID -- $STEAM_PATH/steam-launch-wrapper -- "$PROTON_PATH"/proton waitforexitandrun $APP_BIN

VRChat works fine if i launch it like this

./run_steam_without_v2_entry_point.sh 438100 ~/.steam/steam/steamapps/common/VRChat/launch.exe

However Insurgency does not work fine if i launch it in a similar fashion

./run_steam_without_v2_entry_point.sh 581320 ~/.steam/steam/steamapps/common/sandstorm/Insurgency.exe

be sure to launch the executable steam launch, there's high chance its actualy a "start protected.exe" or something like that (its the case on multiple eac game afaik)

@okawo80085
Copy link

Well for Insurgency there are only two exe's, and the other one just doesn't work :/
Unless there is some way to see what command Steam is using to launch it

@okawo80085
Copy link

Huh, well for Insurgency, the command that Steam uses is this

/home/okawo/.local/share/Steam/ubuntu12_32/reaper SteamLaunch AppId=581320 -- /home/okawo/.local/share/Steam/ubuntu12_32/steam-launch-wrapper -- /home/okawo/.local/share/Steam/steamapps/common/SteamLinuxRuntime_sniper/_v2-entry-point --verb=waitforexitandrun -- /home/okawo/.local/share/Steam/steamapps/common/Proton - Experimental/proton waitforexitandrun /home/okawo/.local/share/Steam/steamapps/common/sandstorm/InsurgencyEAC.exe

And that exe does not seem to want to launch without _v2-entry-point ???

@okawo80085
Copy link

okawo80085 commented Jun 26, 2024

And for those wondering to see the launch command of any game put this into the launch options echo %command% > /tmp/test.txt

@caszuu
Copy link

caszuu commented Jun 26, 2024

Huh, well for Insurgency, the command that Steam uses is this

/home/okawo/.local/share/Steam/ubuntu12_32/reaper SteamLaunch AppId=581320 -- /home/okawo/.local/share/Steam/ubuntu12_32/steam-launch-wrapper -- /home/okawo/.local/share/Steam/steamapps/common/SteamLinuxRuntime_sniper/_v2-entry-point --verb=waitforexitandrun -- /home/okawo/.local/share/Steam/steamapps/common/Proton - Experimental/proton waitforexitandrun /home/okawo/.local/share/Steam/steamapps/common/sandstorm/InsurgencyEAC.exe

And that exe does not seem to want to launch without _v2-entry-point ???

I guess that makes sense since we're launching the game outside the expected runtime, so there's only a chance that a game will run outside of it.

After I get home, I'll try to sus out why the entry point is making eac panic, closest I got is that the pressure-vessel container itself is somehow blocking eac (this is also useful if anyone is also digging)

@kshade
Copy link
Contributor

kshade commented Jul 1, 2024

Leaving out the runtime works for Halo Infinite as well!

@Tyfuzzle
Copy link

Tyfuzzle commented Jul 1, 2024

The fix was working for me last week on Halo MCC. Went back to it today and now I'm getting some EAC violation about an unknown file version. I think it might be more to do with Halo MCC than Void. I've seen threads about the same error from Windows users.

@nonchip
Copy link
Contributor

nonchip commented Jul 10, 2024

@fishslips sure, look at all the info gathered so far, gather any info you have ideas about, and try to figure out what the problem is, just like everyone else.

@fishslips
Copy link

fishslips commented Jul 13, 2024

Okay, so I did a proton log for the flatpak version of steam running The Finals which uses EAC as well as our xbps package for steam.

I created a gist here.

In both instances, anticheatlauncher.log in the prefix folder for the finals basically says Easy Anti-Cheat successfully loaded in-game, successfully initialized. There was no difference in the log for EAC when running in flatpak or xbps package.

Both proton logs are fairly similar except for a few differences here and there (had to cut off most of the beginning of the files because it was over 100k lines), and mostly notably the end . The flatpak version continues as normal and it looks like Discovery.exe gets launched (pretty sure that's the exe for The Finals). Whereas the package version does not, renames some threads , says pids don't match, and it just abruptly stops. So I think EAC starting/running, it's something that happens during the hand off when the app itself tries to launch.

Idk how helpful this is, again I'm new to Linux and trying to learn as much as I can so I can contribute. Lmk if this is useless information or not.

@caszuu
Copy link

caszuu commented Jul 13, 2024

TL;DR: For now GCONV_PATH="/usr/lib/gconv" %command% in stream launch options should fix the issue.


After a day of mindless tracing, i was able to finally come to the cause of the issue. In short i used bpftrace to create a traces of all open() syscalls made by the app or eac. (similar to strace but without triggering eac)

All traces in this comment are logs from bpftrace of open() and openat() syscalls filtered for the processes and files in question. All testing was done on VRChat. Non-runtime in this comment means test ran without the steam linux runtime. (no _v2_entry_point)

I will try to sum it up in short and hopefully in a way that make sense. (let me know if something's unclear)

The crash

It turned out that the root of the issue was right when starting the game executable, specifically with eac bundled with the apps executable.

When you start VRChat non-runtime or on Arch Linux, the trace of the all VRChat.exe open() syscalls looks similar to this:

PID    COMM               FD ERR FLAGS PATH
1166   VRChat.exe          4   0 65536 /home/caszu/.local/share/Steam/steamapps/compatdata/438100/pfx/.. 
1166   VRChat.exe          4   0 591872 /home/caszu/.local/share/Steam/steamapps/compatdata/438100/pfx/.. 
1166   VRChat.exe         -1   2 524288 /home/caszu/.local/share/Steam/compatibilitytools.d/GE-Proton9-.. 
1166   VRChat.exe          4   0 524288 /usr/lib64/gconv/UTF-16.so 
1166   VRChat.exe          4   0 2048 /home/caszu/.local/share/Steam/steamapps/compatdata/438100/pfx/.. 
1166   VRChat.exe          4   0 591872 /home/caszu/.local/share/Steam/steamapps/compatdata/438100/pfx/.. 
1166   VRChat.exe         -1   2 524288 /home/caszu/.local/share/Steam/compatibilitytools.d/GE-Proton9-.. 
1166   VRChat.exe          4   0    0 /proc/self/maps 
1166   VRChat.exe          4   0  577 /tmp/eac_wine_pid_48E 
1166   VRChat.exe         15   0    0 . 
1166   VRChat.exe         16   0 591872 . 
1166   VRChat.exe         15   0    0 . 
...

note: on Arch Linux /usr/lib/gconv/UTF-16.so is used instead of /usr/lib64/gconv/UTF-16.so

This is the very start of VRChat.exe's execution, it loads it's dependencies and a file eac_wine_pid_<random> is created.

But when VRChat is started on Void (in-runtime):

PID    COMM               FD ERR FLAGS PATH
2122   VRChat.exe          4   0 65536 /home/caszu/.local/share/Steam/steamapps/compatdata/438100/pfx/.. 
2122   VRChat.exe          4   0 591872 /home/caszu/.local/share/Steam/steamapps/compatdata/438100/pfx/.. 
2122   VRChat.exe         -1   2 524288 /home/caszu/.local/share/Steam/compatibilitytools.d/GE-Proton9-.. 
2122   VRChat.exe         -1   2 524288 /usr/share/locale/locale.alias      <-- no UTF-16.so loaded
2122   VRChat.exe         -1   2    0 /usr/share/locale/en_US.UTF-8/LC_MESSAGES/libc.mo 
2122   VRChat.exe         -1   2    0 /usr/share/locale/en_US.utf8/LC_MESSAGES/libc.mo 
2122   VRChat.exe         -1   2    0 /usr/share/locale/en_US/LC_MESSAGES/libc.mo 
2122   VRChat.exe         -1   2    0 /usr/share/locale/en.UTF-8/LC_MESSAGES/libc.mo 
2122   VRChat.exe         -1   2    0 /usr/share/locale/en.utf8/LC_MESSAGES/libc.mo 
2122   VRChat.exe         -1   2    0 /usr/share/locale/en/LC_MESSAGES/libc.mo 
2122   VRChat.exe          4   0 2048 /home/caszu/.local/share/Steam/steamapps/compatdata/438100/pfx/.. 
2122   VRChat.exe          4   0 591872 /home/caszu/.local/share/Steam/steamapps/compatdata/438100/pfx/.. 
2122   VRChat.exe         -1   2 524288 /home/caszu/.local/share/Steam/compatibilitytools.d/GE-Proton9-.. 
2122   VRChat.exe         15   0    0 . 
2122   VRChat.exe         16   0 591872 . 
2122   VRChat.exe         15   0    0 . 
...

There are two differences, VRChat.exe fails to find locales (fd that equals -1 means file not found) instead of loading the UTF-16.so lib and the eac_wine_pid file is never created which causes "The timeout" later.

As far as i can tell failing to find the locales causes eac to silently die on the app side. (when launching at least)

This then probably tricks the app into thinking eac was never launched judging by the wording of the error in VRChats logs which sounds more "anti-cheat not found" than "anti-cheat triggered"

2024.07.13 18:55:16 Log        -  [EOSManager] [Info][LogEOSAntiCheat] [AntiCheatClient] Anti-cheat client not available. Verify that the game was started using the anti-cheat bootstrapper if you intend to use it.

The reason why VRChat.exe does not load UTF-16.so in this case is unknown but probably related to the Steam runtime itself as there are multiple oddities with the runtime container, for example /usr/lib/gconv and /usr/lib/locale/ inside the container are symlinked to equivalent host files but /usr/lib64/gconv/ and usr/share/locale/ are mostly empty directories. (you can test this by using steam-runtime-launch-options to create a xterm shell inside the container)

Thankfully after defining GCONV_PATH="/usr/lib/gconv", Void also starts working the same as other distros. (loading the UTF-16.so file)

I'm not sure which part of the stack (Void, Steam Runtime or eac) is to blame here or why, it might be steam if the gconv directory is improperly mapped or some missing env vars but i'm not sure.

So yeah, i don't know if i fell better or worse by knowing that a character conversion lib was to blame this whole time!

The timeout (extra info)

This is extra information not needed for the main explainer.

VRChat itself is made by three executable files: launch.exe, start_protected.exe and VRChat.exe

When VRChat launches, first launch.exe is started and the eac service/driver loads, this is the file that shows you the eac loading screen. start_protected.exe and VRChat.exe are then started by launch.exe after eac fully loads. (VRChat.exe is the actual unity executable and start_protected.exe is also a part of eac, probably)

When the start_protected.exe is started, it waits for a creation of a file at /tmp/eac_wine_pid_<random>. It is supposed to be written by VRChat.exe pretty much immediately after start and is deleted also immediately.

successful start from non-runtime trace and from an Arch Linux trace watching the eac file: (trimmed down)

PID    COMM               FD ERR FLAGS PATH
... bunch of start_protected opens ...
26702  start_protected    -1   2    0 /tmp/eac_wine_pid_6871 
26702  start_protected    -1   2    0 /tmp/eac_wine_pid_6871 
26702  start_protected    -1   2    0 /tmp/eac_wine_pid_6871 
26702  start_protected    -1   2    0 /tmp/eac_wine_pid_6871 
26737  VRChat.exe          4   0  577 /tmp/eac_wine_pid_6871 <-- eac from VRChat.exe creates the file  
26702  start_protected   129   0    0 /tmp/eac_wine_pid_6871 
26702  start_protected   129   0    0 /tmp/eac_wine_pid_6871 
26702  start_protected   129   0    0 /tmp/eac_wine_pid_6871 
26702  start_protected   129   0    0 /tmp/eac_wine_pid_6871 
26702  start_protected   129   0    0 /tmp/eac_wine_pid_6871 
...

But on Void this file is never created and start_protected.exe "times out", which probably leaves eac in a confused state:

PID    COMM               FD ERR FLAGS PATH
...
27489  start_protected    -1   2    0 /tmp/eac_wine_pid_6B83 
27489  start_protected    -1   2    0 /tmp/eac_wine_pid_6B83 
27489  start_protected    -1   2    0 /tmp/eac_wine_pid_6B83 
27489  start_protected    -1   2    0 /tmp/eac_wine_pid_6B83 
27489  start_protected    -1   2    0 /tmp/eac_wine_pid_6B83 
27489  start_protected    -1   2    0 /tmp/eac_wine_pid_6B83 
27489  start_protected    -1   2    0 /tmp/eac_wine_pid_6B83 
27489  start_protected    -1   2    0 /tmp/eac_wine_pid_6B83 // VRChat.exe is never seen
...

This might also be cause of the final eac failure instead of eac dying when starting VRChat.exe but in any way is the root cause is eac dying when stating VRChat.exe.

@Naia-love
Copy link

Amazing work
I can confirm it work on my end for both VRC and EldenRing with this workaround
Thanks

@kshade
Copy link
Contributor

kshade commented Jul 14, 2024

TL;DR: For now GCONV_PATH="/usr/lib/gconv" %command% in stream launch options should fix the issue.

Works for Halo Infinite as well, great work!

@oreo639
Copy link
Member

oreo639 commented Jul 14, 2024

Thank you for looking in to this. Our default gconv path is /usr/lib{bits}/gconv.
Testing it with GCONV_PATH="/usr/lib64/gconv" does not work whereas GCONV_PATH="/usr/lib/gconv" does.

Apparently this is because the _v2-entry-point/pressure-vessel container only exposes gconv modules though /usr/lib and /usr/lib32 but not /usr/lib64.
https://gitlab.steamos.cloud/steamrt/steam-runtime-tools/-/blob/main/pressure-vessel/runtime.c#L5499-5654

@fanyx
Copy link
Contributor

fanyx commented Jul 14, 2024

Wouldn't a simple symlink also solve this?

nvm me, i didn't think about this

@classabbyamp
Copy link
Member

/usr/lib64 is a symlink to /usr/lib already

@oreo639
Copy link
Member

oreo639 commented Jul 14, 2024

Wouldn't a simple symlink also solve this?

The pressure-vessel container exposes the host filesystem through /run/host/.
/usr/ contains libraries bundled with the steam linux runtime with some other stuff such as the loader and the gconv modules being exposed to /usr/lib///usr/lib32/ since $(libdir)/gconv is the default path in glibc for gconv modules.

@okawo80085
Copy link

Great job @caszuu ! Adding GCONV_PATH="/usr/lib/gconv" %command% fixed both VRChat and Insurgency for me!

@okawo80085
Copy link

Also prob worth tagging @kisak-valve, looks like there will have to be a patch for the env setup script, its either picking up gconv path wrong or the symlink is not working

@oreo639
Copy link
Member

oreo639 commented Jul 14, 2024

Moderator on Github for Valve Software

Don't tag them here, instead an issue should be made on the steam linux runtime gitlab/github (which I can do later).

@caszuu
Copy link

caszuu commented Jul 14, 2024

Thank you for looking in to this. Our default gconv path is /usr/lib{bits}/gconv. Testing it with GCONV_PATH="/usr/lib64/gconv" does not work whereas GCONV_PATH="/usr/lib/gconv" does.

Apparently this is because the _v2-entry-point/pressure-vessel container only exposes gconv modules though /usr/lib and /usr/lib32 but not /usr/lib64. https://gitlab.steamos.cloud/steamrt/steam-runtime-tools/-/blob/main/pressure-vessel/runtime.c#L5499-5654

hmm i still wonder if /usr/lib64/gconv not being symlinked is intentional or a mistake in the container, as /usr/lib64/locale is symlinked to ../lib/locale but /usr/lib64/gconv (while it exists) is just a empty directory.

But at the same time VRC never even checked for the existence of gconv modules without GCONV_PATH being defined, trying to load locales instead. I'm probably missing how glibc works under the hood.

@oreo639
Copy link
Member

oreo639 commented Jul 14, 2024

hmm i still wonder if /usr/lib64/gconv not being symlinked is intentional or a mistake in the container, as /usr/lib64/locale is symlinked to ../lib/locale but /usr/lib64/gconv (while it exists) is just a empty directory.

It is not supposed to be symlinked and the folders not being symlinked is intentional. The issue is that the 64-bit gconv modules are being mounted to /usr/lib/gconv but not /usr/lib64/gconv which is most likely an oversight.

VRC never even checked for the existence of gconv modules...

VRC isn't checking for gconv modules, glibc is through the iconv() API and GCONV_PATH allows you to specify extra paths to search beyond just the default one (/usr/lib64/gconv in this case).

@okawo80085
Copy link

Moderator on Github for Valve Software

Don't tag them here, instead an issue should be made on the steam linux runtime gitlab/github (which I can do later).

Please do

@cesorious
Copy link

cesorious commented Jul 15, 2024

This only seems to somewhat fix it for me, when trying to play elden ring for example, I now get past the "inapropriate activity", but when trying to log in I get "Connection to epic online services failed: 01-00000", but that might just be a wholy independent issue.
However, EAC also doesn't work in brawlhalla

edit:
Elden Ring issue was an actual elden ring bug and fixed by creating a DLC.bdt file in the elden ring directory

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests