Patreon Logo Support us on Patreon to keep GamingOnLinux alive. This ensures all of our main content remains free for everyone. Just good, fresh content! Alternatively, you can donate through PayPal Logo PayPal. You can also buy games using our partner links for GOG and Humble Store.
Latest Comments by Grogan
Steam not working right on Arch Linux? It's an issue with FreeType and there's a fix
5 Sep 2021 at 9:54 pm UTC Likes: 2

The "regression" is all Steam, not Arch. It's not even freetype that was (still is, on non-beta) the problem, it was their own stupidly bundled libharfbuzz in steam-runtime-heavy and linux runtime soldier. See, the new freetype is no longer compatible with the old harfbuzz API. This is Valve's mistake... what do they think is going to happen? System freetype, old bundled harfbuzz. That's even a circular dependency, freetype linked against harfbuzz, harfbuzz linked against freetype.

The clue was this:

steamwebhelper: symbol lookup error: /usr/lib/libfreetype.so.6: undefined symbol: hb_ot_tags_from_script_and_language

That's a harfbuzz symbol. Note that with later beta clients updates, it didn't print this error anywhere on console, so I was lucky to get this clue when the problem first surfaced.

I had upgraded to freetype 2.11 long before Arch did. I keep my systems binary compatible because I compile some things to run on all my systems, so when my other systems (LFS, Slackware) get an upgrade for something like that, all do.

I tried forcing Steam to load my libharfbuzz with LD_PRELOAD and it worked for the UI and the client worked correctly, but bombed out on Proton because it was being overridden in the runtime soldier bwrap container.

So what I ended up doing was dropping in the previous libfreetype.so.6 from my freetype 2.10.4 package and setting LD_LIBRARY_PATH. That worked until Valve finally fixed it with a somewhat newer libharfbuzz (from Dec. 2019 lol... they are still trying to support old Ubuntu) and probably a recompile of the embedded Chrome.

Also note, it was only the 64 bit parts of Steam that had this problem. I used lsof to help me solve this problem and Steam was correctly hooking both lib32-freetype and lib32-harfbuzz from /usr/lib32 and the Steam client does not bundle them.

I think that everyone using Steam on Linux should be using the beta client (to ensure the latest proton bits etc.) but anyone not, that wants to fix this, instead of downgrading freetype, could simply stick their previous libfreetype.so.6 (copy the real library and rename or symlink) to a directory that doesn't have any other libraries and start Steam with "LD_LIBRARY_PATH=/path/to/directory steam" or better yet, to the wrapper script used to start it (e.g. /usr/bin/steam), "export LD_LIBRARY_PATH=/path/to/directory" which is how I did it.