Summary: | [gamerlay overlay] games-util/steam-launcher with app-admin/eselect-opengl-1.3.0 - libGL error: No matching fbConfigs or visuals found | ||
---|---|---|---|
Product: | Gentoo Linux | Reporter: | nE0sIghT <ykonotopov> |
Component: | [OLD] Games | Assignee: | Vadim A. Misbakh-Soloviov (mva) <mva> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | dev, mgorny, reavertm |
Priority: | Normal | ||
Version: | unspecified | ||
Hardware: | AMD64 | ||
OS: | Linux | ||
URL: | https://github.com/ValveSoftware/steam-for-linux/issues/3624 | ||
Whiteboard: | |||
Package list: | Runtime testing required: | --- | |
Bug Depends on: | |||
Bug Blocks: | 531842 | ||
Attachments: |
Screenshot
strace -f steam | grep -C 5 libGL /etc/ld.so.conf Patch against steam-launcher-1.0.0.47-r1.ebuild ld.so.conf-steam-launcher-1.0.0.49.patch ld.so.conf-steam-launcher-1.0.0.49.patch |
Description
nE0sIghT
2014-12-08 16:28:35 UTC
Console output LANG=C steam Running Steam on gentoo 64-bit STEAM_RUNTIME is enabled automatically Installing breakpad exception handler for appid(steam)/version(1417829162) libGL error: No matching fbConfigs or visuals found libGL error: failed to load driver: swrast Installing breakpad exception handler for appid(steam)/version(1417829162) (steam:30949): Gtk-WARNING **: Unable to locate theme engine in module_path: "adwaita", (steam:30949): Gtk-WARNING **: Unable to locate theme engine in module_path: "adwaita", /usr/share/themes/Adwaita/gtk-2.0/gtkrc:1137: error: unexpected identifier `direction', expected character `}' (steamwebhelper:30983): Gtk-WARNING **: Unable to locate theme engine in module_path: "adwaita", (steamwebhelper:30983): Gtk-WARNING **: Unable to locate theme engine in module_path: "adwaita", /usr/share/themes/Adwaita/gtk-2.0/gtkrc:1137: error: unexpected identifier `direction', expected character `}' Installing breakpad exception handler for appid(steamwebhelper)/version(20141205165716) Installing breakpad exception handler for appid(steamwebhelper)/version(1417798636) [1208/194101:ERROR:nss_util.cc(1018)] Failed to load NSS libraries. Installing breakpad exception handler for appid(steamwebhelper)/version(20141205165716) Installing breakpad exception handler for appid(steamwebhelper)/version(1417798636) Installing breakpad exception handler for appid(steamwebhelper)/version(1417798636) Fontconfig error: "/etc/fonts/conf.d/10-scale-bitmap-fonts.conf", line 70: non-double matrix element Fontconfig error: "/etc/fonts/conf.d/10-scale-bitmap-fonts.conf", line 70: non-double matrix element Fontconfig warning: "/etc/fonts/conf.d/10-scale-bitmap-fonts.conf", line 78: saw unknown, expected number Installing breakpad exception handler for appid(steam)/version(1417829162) libGL error: No matching fbConfigs or visuals found libGL error: failed to load driver: swrast Error: OpenGL GLX context is not using direct rendering, which may cause performance problems. For more information visit https://support.steampowered.com/kb_article.php?ref=9938-EYZB-7457. Installing breakpad exception handler for appid(steam)/version(1417829162) Installing breakpad exception handler for appid(steam)/version(1417829162) Installing breakpad exception handler for appid(steam)/version(1417829162) Installing breakpad exception handler for appid(steam)/version(1417829162) Installing breakpad exception handler for appid(steam)/version(1417829162) Installing breakpad exception handler for appid(steam)/version(1417829162) FillInMachineIDInfo took a total of 0 milliseconds Installing breakpad exception handler for appid(steam)/version(1417829162) Installing breakpad exception handler for appid(steam)/version(1417829162) ** (steam:30949): WARNING **: Could not initialize NMClient /org/freedesktop/NetworkManager: Unit dbus-org.freedesktop.NetworkManager.service failed to load: No such file or directory. ** (steam:30949): WARNING **: Error enabling/disabling networking: Unit dbus-org.freedesktop.NetworkManager.service failed to load: No such file or directory. Did you actually update your environment before running that? (In reply to Jeroen Roovers from comment #2) > Did you actually update your environment before running that? I restarted PC Could you try running 'lddtree' on the steam executable? Or at least 'readelf -d' for a start. Just make sure to run it on the real executable, not some wrapper :). ne0sight@vortex ~> export LANG=C ne0sight@vortex ~> lddtree ~/.local/share/Steam/ubuntu12_32/steam steam => /home/ne0sight/.local/share/Steam/ubuntu12_32/steam (interpreter => /lib/ld-linux.so.2) libX11.so.6 => /usr/lib32/libX11.so.6 libxcb.so.1 => /usr/lib32/libxcb.so.1 libXau.so.6 => /usr/lib32/libXau.so.6 libXdmcp.so.6 => /usr/lib32/libXdmcp.so.6 librt.so.1 => /lib32/librt.so.1 libm.so.6 => /lib32/libm.so.6 libdl.so.2 => /lib32/libdl.so.2 libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.3/32/libstdc++.so.6 libgcc_s.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.3/32/libgcc_s.so.1 libpthread.so.0 => /lib32/libpthread.so.0 libc.so.6 => /lib32/libc.so.6 ne0sight@vortex ~> readelf -d ~/.local/share/Steam/ubuntu12_32/steam Dynamic section at offset 0x2656e0 contains 31 entries: Tag Type Name/Value 0x00000001 (NEEDED) Shared library: [libX11.so.6] 0x00000001 (NEEDED) Shared library: [librt.so.1] 0x00000001 (NEEDED) Shared library: [libm.so.6] 0x00000001 (NEEDED) Shared library: [libdl.so.2] 0x00000001 (NEEDED) Shared library: [libstdc++.so.6] 0x00000001 (NEEDED) Shared library: [libpthread.so.0] 0x00000001 (NEEDED) Shared library: [libc.so.6] 0x0000000c (INIT) 0x12d78 0x0000000d (FINI) 0x1d357c 0x00000019 (INIT_ARRAY) 0x25f130 0x0000001b (INIT_ARRAYSZ) 304 (bytes) 0x00000004 (HASH) 0x1ac 0x00000005 (STRTAB) 0x2ff0 0x00000006 (SYMTAB) 0x1530 0x0000000a (STRSZ) 5991 (bytes) 0x0000000b (SYMENT) 16 (bytes) 0x00000015 (DEBUG) 0x0 0x00000003 (PLTGOT) 0x2667f8 0x00000002 (PLTRELSZ) 2496 (bytes) 0x00000014 (PLTREL) REL 0x00000017 (JMPREL) 0x123b8 0x00000011 (REL) 0x4c90 0x00000012 (RELSZ) 55080 (bytes) 0x00000013 (RELENT) 8 (bytes) 0x00000018 (BIND_NOW) 0x6ffffffb (FLAGS_1) Flags: NOW 0x6ffffffe (VERNEED) 0x4ab0 0x6fffffff (VERNEEDNUM) 6 0x6ffffff0 (VERSYM) 0x4758 0x6ffffffa (RELCOUNT) 6234 0x00000000 (NULL) 0x0 I don't see libGL there. I'm starting to be afraid that it uses some poor dlopen(). Could you maybe 'strace -f ... | grep -C 5 libGL' it a bit? Created attachment 391236 [details]
strace -f steam | grep -C 5 libGL
Could you paste your /etc/ld.so.conf then, please? Created attachment 391238 [details]
/etc/ld.so.conf
I think there is problem with steam user wrapper. It overrides LD_LIBRARY_PATH before running executable and return system variable after execution. It looks like that: /home/ne0sight/.local/share/Steam/ubuntu12_32:/home/ne0sight/.local/share/Steam/ubuntu12_32/steam-runtime/i386/lib/i386-linux-gnu:/home/ne0sight/.local/share/Steam/ubuntu12_32/steam-runtime/i386/lib:/home/ne0sight/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu:/home/ne0sight/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib:/home/ne0sight/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/lib/x86_64-linux-gnu:/home/ne0sight/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/lib:/home/ne0sight/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu:/home/ne0sight/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/usr/lib::/usr/lib32 This wrapper is placed in ~/.local/share/Steam and automatically updated by steam. I look into steam wrappers (system and user) and think that proper solution would be to modify system steam wrapper (/usr/games/bin/steam) to define LD_LIBRARY_PATH from /etc/ld.so.conf while executing user steam wrapper. User steam wrapper prepends steam runtime paths to LD_LIBRARY_PATH and appends /usr/lib32 For example this call: "LD_LIBRARY_PATH="/usr/lib32/opengl/nvidia/lib:/usr/lib64/opengl/nvidia/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib32:/usr/lib32:/usr/local/lib32:/lib:/usr/lib:/usr/local/lib:/usr/lib32/OpenCL/vendors/nvidia:/usr/lib64/OpenCL/vendors/nvidia:/usr/lib64/qt4:/usr/lib32/qt4:/usr/lib/qt4:/opt/nvidia-cg-toolkit/lib64:/opt/nvidia-cg-toolkit/lib32:/usr/games/lib64:/usr/games/lib32:/usr/games/lib:/opt/cuda/lib64:/opt/cuda/lib" steam" works for me. Created attachment 391242 [details, diff]
Patch against steam-launcher-1.0.0.47-r1.ebuild
Here is a patch
Argv. Honestly, it would be better if they didn't play with LD_LIBRARY_PATH like this. Especially if ld.so.conf has /usr/lib32 already... Reported upstream: https://github.com/ValveSoftware/steam-for-linux/issues/3624 Comment on attachment 391242 [details, diff]
Patch against steam-launcher-1.0.0.47-r1.ebuild
That looks terrible. A proper unified diff would make this a lot easier on the eyes.
CC'ing dev of steam-overlay as it also affected (In reply to Jeroen Roovers from comment #15) > Comment on attachment 391242 [details, diff] [details, diff] > Patch against steam-launcher-1.0.0.47-r1.ebuild > > That looks terrible. A proper unified diff would make this a lot easier on > the eyes. This is just temporal workaround. Nothing more. I do not know how to make it better. Except perhaps replace second sed with tr Comment on attachment 391242 [details, diff]
Patch against steam-launcher-1.0.0.47-r1.ebuild
Nope, this patch won't do it. It needs to respect contents of ld.so.conf during run-time, not the one that was there during the build.
Does the wrapper do anything useful? Maybe we could just ignore it.
(In reply to Michał Górny from comment #18) > Comment on attachment 391242 [details, diff] [details, diff] > Patch against steam-launcher-1.0.0.47-r1.ebuild > > Does the wrapper do anything useful? Maybe we could just ignore it. There is actually 2 wrappers. 1. System wrapper /usr/{games/}bin/steam - it just prepare actual stuff in user profile and call 2nd wrapper there 2. User wrapper ~/.local/share/Steam/steam.sh - it is part of "steam bootstrap" and automatically updated by Steam itself. User wrapper contains LD_LIBRARY_PATH with /usr/lib32 and steam runtime dirs. I do not think we could ignore it. So for cheap solutions, I have two ideas. Either: a. add an extra wrapper that does 'sed -i -e' on the user wrapper -- so that the line is always removed, even if the wrapper is updated upstream. However, if Steam auto-restarts it using the wrapper this won't be of help on upgrades, b. add an extra wrapper that fills LD_LIBRARY_PATH in from ld.so.conf *in a readable* way. Just don't forget about ld.so.conf.d. (if the system wrapper is in our control, we can add the extra code there) (In reply to Michał Górny from comment #20) > So for cheap solutions, I have two ideas. Either: > > a. add an extra wrapper that does 'sed -i -e' on the user wrapper -- so that > the line is always removed, even if the wrapper is updated upstream. > However, if Steam auto-restarts it using the wrapper this won't be of help > on upgrades, This will not work as user wrapper will detect changes and self-update. Ok. Could you tell me if the system wrapper is /bin/sh or bash? I will prepare some clean code for ya. (In reply to Michał Górny from comment #23) > Ok. Could you tell me if the system wrapper is /bin/sh or bash? I will > prepare some clean code for ya. It's bash Created attachment 391538 [details, diff]
ld.so.conf-steam-launcher-1.0.0.49.patch
I think it must look like this.
Ebuild patch:
--- ../../../../portage/layman/gamerlay/games-util/steam-launcher/steam-launcher-1.0.0.47-r1.ebuild 2014-12-08 19:49:45.860677134 +0300
+++ ./steam-launcher-1.0.0.49.ebuild 2014-12-13 12:28:56.933075754 +0300
@@ -54,12 +54,16 @@
S=${WORKDIR}/steam/
src_prepare() {
+ epatch "${FILESDIR}"/ld.so.conf-${P}.patch
+
# we use our ebuild functions to install the files
rm Makefile
sed -i \
-e "s:/usr/bin/steam:${GAMES_BINDIR}/steam:" \
- ${S}/steam.desktop || die "sed failed"
+ ${S}/steam.desktop || die "sed failed"
+
+ epatch_user
}
src_install() {
Nope, ugly and incorrect. You should read ldconfig.c in glibc, then you'd know how to read the file format :P. But seriously, something much simpler: # Steam appends /usr/lib32 to LD_LIBRARY_PATH. We need to make sure that # OpenGL implementation dir goes before that, so we need to append it # to user's LD_LIBRARY_PATH ourselves. But that's needed only with # the new eselect-opengl that uses 000opengl file. if [ -f /etc/env.d/000opengl ]; then . /etc/env.d/000opengl # Append only when LDPATH is non-empty -- i.e. using nvidia or ati. if [ -n "${LDPATH}" ]; then export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH+:}${LDPATH} fi fi Solves the specific issues. Created attachment 391542 [details, diff] ld.so.conf-steam-launcher-1.0.0.49.patch (In reply to Michał Górny from comment #26) > But seriously, something much simpler: Thanks for proper solution! Works good for me *** Bug 567200 has been marked as a duplicate of this bug. *** |