protonscr

steamwebhelper doesn't work (libdconfsettings.so: undefined symbol: g_log_structured_standard)

steamclosed runtimeWeb Component
ValveSoftware/steam-for-linux#6458 · opened 2019-08-18 by kapsh · updated 2021-12-18 · 8 comments · github
Kkapsh 2019-08-18 github

Your system information

  • Steam client version (build number or date): Aug 12 2019
  • Distribution (e.g. Ubuntu): Exherbo
  • Opted into Steam client beta?: [Yes/No] Yes
  • Have you checked for system updates?: [Yes/No] Yes

Steps for reproducing this issue:

  1. Start Steam, open Store page in application.
  2. Web browser does not load and shows only black screen.
  3. Log contains errors:
'g_io_module_load': /usr/lib/gio/modules/libgiognutls.so: undefined symbol: g_io_module_load  # probably unrelated
Failed to load module: /usr/lib/gio/modules/libgiognutls.so
./steamwebhelper: symbol lookup error: /usr/lib/gio/modules/libdconfsettings.so: undefined symbol: g_log_structured_standard

Full log: kapsh_stdout.txt

It works with my system libraries when "heavy" runtime is disabled (STEAM_RUNTIME_HEAVY=/dev/null steam) so I guess this runtime should also include some more libraries that it was built against.

Kkisak-valve maintainer 2019-08-18 github

Hello @kapsh, what version of dconf does your system have? I suspect this is the same scenario that was discussed at https://github.com/anyc/steam-overlay/issues/232#issuecomment-490614171 and running Steam with GSETTINGS_BACKEND=memory steam may also workaround the issue.

Kkapsh 2019-08-19 github

dconf 0.32 here, but described issue started to happen a while ago, maybe a couple of months so I'm not sure about other related versions.

Thanks for provided workaround, with SETTINGS_BACKEND=memory built-in browser works. Steam still warns about 'g_io_module_load': /usr/lib/gio/modules/libgiognutls.so: undefined symbol: g_io_module_load on start so it's seems to be unrelated to webhelper issue.

Kkapsh 2021-06-09 github

Ran into this again, steam still needs workaround with setting environment variable GSETTINGS_BACKEND=memory for webhelper to work on some systems. Updated description to reflect real error.

Ssmcv 2021-06-09 github

I'm surprised this is a fatal error: I would have expected that steamwebhelper would fail to load libdconfsettings.so, but then log a warning and carry on anyway. This is the behaviour I get on Ubuntu 20.04, for example:

/usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so: undefined symbol: g_log_structured_standard
Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libdconfsettings.so
GLib-GIO-Message: Using the 'memory' GSettings backend.  Your settings will not be saved or shared with other applications.

and then it carries on, and the Store tab in Steam works fine.

It works with my system libraries when "heavy" runtime is disabled (STEAM_RUNTIME_HEAVY=/dev/null steam) so I guess this runtime should also include some more libraries that it was built against.

Not exactly. The problem here is that the steamwebhelper uses its own copies of libglib-2.0.so.0 and libgio-2.0.so.0 in ~/.steam/root/ubuntu12_64/steam-runtime-heavy, but it's trying to use the GIO modules from your host system (Exherbo in your case), which were compiled with a newer version of GLib/GIO.

For the rest of Steam, and for the actual games, the Steam Runtime "scout" infrastructure is careful to avoid this problem by using your host system's version of GLib/GIO if it's newer than its own bundled copy (~/.steam/root/ubuntu12_32/steam-runtime/setup.sh and ~/.steam/root/ubuntu12_32/steam-runtime/run.sh are responsible for setting this up).

However, the steamwebhelper has a much simpler runtime setup that uses its own bundled copy of GLib/GIO unconditionally, even if the system copy is newer (which in practice it will be, because heavy is based on Debian 8, which was released about 6 years ago - we can't use a newer version without depending on a newer glibc, which would break Steam on Ubuntu 14.04 and SteamOS 2).

There are three main things that Steam could do to solve this:

  1. Use the more complicated setup.sh/run.sh for heavy, the same as for scout
  2. If GIO modules aren't necessary for the steamwebhelper, disable them completely by setting the GIO_MODULE_DIR environment variable (which might require updating to a newer build of heavy)
  3. Run just the steamwebhelper with GSETTINGS_BACKEND=memory, which would mean the rest of Steam could still use GSettings and get them loaded and saved to/from disk, but the steamwebhelper couldn't (which is probably fine, because it probably doesn't use them anyway)

The long-term answer is to either run steamwebhelper in its own container, or run all of Steam in a container (Flatpak or similar), either of which would give the steamwebhelper a completely predictable set of libraries to work with, but that's not feasible right now.

(I'm a Steam Runtime developer, but not a Steam developer.)

Kkisak-valve maintainer 2021-12-17 github

Hello @kapsh, are you still experiencing this issue on an up to date system?

Kkapsh 2021-12-17 github

@kisak-valve hi, looks like current steam release runs without gsettings_backend variable, opens library screen and store pages in built-in browser, and there are no errors in stdout.

Kkisak-valve maintainer 2021-12-17 github

Thanks for retesting. Closing as fixed some time ago (most likely around September and #7935).

Ssmcv 2021-12-18 github

most likely around September and #7935

Yes, the changes we made for #7935 should have resolved this issue too. I mentioned in a previous comment that heavy has a "much simpler runtime setup that uses its own bundled copy of GLib/GIO unconditionally", but that's no longer true: it now uses the same "pinning" machinery as scout, and will use your system copy of GLib/GIO if that's newer.

Nothing extracted yet.