在 ubuntu 15.04 上安装 Steam 时出错

Agu*_*udi 30 steam software-installation

agung@agung-K43SJ:~$ steam
Running Steam on ubuntu 15.04 64-bit

STEAM_RUNTIME is enabled automatically

Installing breakpad exception handler for appid(steam)/version(0)

libGL error: unable to load driver: nouveau_dri.so

libGL error: driver pointer missing

libGL error: failed to load driver: nouveau

libGL error: unable to load driver: swrast_dri.so

libGL error: failed to load driver: swrast
Run Code Online (Sandbox Code Playgroud)

在此之前,我也尝试从终端安装 Steam,但在下载更新后它没有启动。

谁能帮我找到安装 Steam 的解决方案?

小智 65

精简版:

使用以下命令在终端中启动 Steam:

LD_PRELOAD='/usr/$LIB/libstdc++.so.6' DISPLAY=:0 steam
Run Code Online (Sandbox Code Playgroud)

而不仅仅是 steam

长版:

Steam 无法打开nouveau_dri.so,负责与图形驱动程序通信的共享库。要检查驱动程序是否启用了 OpenGL,请运行:

DISPLAY=:0 glxinfo | grep -i direct
Run Code Online (Sandbox Code Playgroud)

输出应该是:

direct rendering: Yes
Run Code Online (Sandbox Code Playgroud)

在调试模式下运行 Steam:

DISPLAY=:0 LIBGL_DEBUG=verbose steam
Run Code Online (Sandbox Code Playgroud)

给我们输出,下面几行给了我们提示:

libGL: OpenDriver: trying /usr/lib/i386-linux-gnu/dri/nouveau_dri.so
libGL: dlopen /usr/lib/i386-linux-gnu/dri/nouveau_dri.so failed (/home/user/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /usr/lib/i386-linux-gnu/dri/nouveau_dri.so))
Run Code Online (Sandbox Code Playgroud)

似乎 Steam 使用不同版本的libstdc++.so.6. 让我们检查一下 Steam 使用的是哪个版本:

ls -l ~/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libstdc++.so.6  

lrwxrwxrwx 1 user user 19 Jul 18  2014 /home/user/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libstdc++.so.6 -> libstdc++.so.6.0.18
Run Code Online (Sandbox Code Playgroud)

所以 Steam 使用 ABI 版本 18 加载了 LibC6,其中驱动程序需要版本 20。解决方案是告诉操作系统使用LD_PRELOAD变量预加载正确的 LibC6 版本 :

LD_PRELOAD='/usr/$LIB/libstdc++.so.6' DISPLAY=:0 steam
Run Code Online (Sandbox Code Playgroud)

有点不直观的 $LIB 参数在 ld.so 中根据正在启动的进程的平台扩展到正确的路径(man 8 ld.so 了解详细信息)。

您可以使用以下内容创建脚本来运行它而不是steam

#!/bin/bash
# Export so all child processes are affected as well
export LD_PRELOAD='/usr/$LIB/libstdc++.so.6'
export DISPLAY=:0
#export LIBGL_DEBUG=verbose
steam
Run Code Online (Sandbox Code Playgroud)

一个更好的脚本可以检查全局 LibC6 版本是否比 in STEAM_RUNTIMEand only thenLD_PRELOAD的版本更新。

可以在此处找到更多详细信息。请注意,我在 Debian 上对其进行了测试,现在它已经在 Ubuntu vivid 15.04 上进行了测试并且运行良好。

  • 此解决方案也适用于 Ubuntu 16.04 - 我有相同的错误消息,并且此方法(设置 LD_PRELOAD)允许 Steam 正确运行。 (5认同)

小智 28

在这里找到了另一个帮助我启动 Steam 客户端的解决方案 -

https://wiki.archlinux.org/index.php/Steam/Troubleshooting

我运行了这个命令 -

find ~/.steam/root/ \( -name "libgcc_s.so*" -o -name "libstdc++.so*" -o -name "libxcb.so*" -o -name "libgpg-error.so*" \) -print -delete
Run Code Online (Sandbox Code Playgroud)

现在 Steam 无需任何额外的预加载即可启动。希望这能帮助在 Ubuntu 16.04 上遇到相同问题的每个人

  • 被低估的命令,这适用于 Ubuntu 16.10 (4认同)

小智 6

可能gccSteam 运行时中的库与您的mesa驱动程序不兼容。备份您的主文件夹,然后尝试删除这些库文件:

rm ~/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libstdc++.so.6
rm ~/.local/share/Steam/ubuntu12_32/steam-runtime/i386/lib/i386-linux-gnu/libgcc_s.so.1
Run Code Online (Sandbox Code Playgroud)