在Ubuntu 15.04+上安装Steam时出现问题

实际上我已经安装了新的Ubuntu 15.04 64bit,当我尝试在其上安装Steam时,出现了问题。 事实上,我已经从steam网站下载了deb软件包,安装了它,当我启动它时没有任何反应。 我试图从终端开始,我已经得到了

$ steam Running Steam on ubuntu 15.04 64-bit STEAM_RUNTIME is enabled automatically Installing breakpad exception handler for appid(steam)/version(0_client) libGL error: unable to load driver: r600_dri.so libGL error: driver pointer missing libGL error: failed to load driver: r600 libGL error: unable to load driver: swrast_dri.so libGL error: failed to load driver: swrast 

这最初是Ubuntu 15.04 / 15.10上的Steam问题。 Steam捆绑旧库并与台面驱动器发生碰撞,这也是封闭式驱动程序没有看到此问题的原因。 更新:也许你错过了一些东西。 看其他mchid的回答。

Steam的github中存在一个漏洞 。

目前的解决方法是删除旧的lib版本,至少在Valve修复了它们的启动脚本中的问题之前。

因此,请输入这些文件夹并执行此操作(如果您只有32位系统,请忽略x86_64 ):

 cd $HOME/.steam/steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu mv libstdc++.so.6 libstdc++.so.6.bak cd $HOME/.steam/steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu mv libstdc++.so.6 libstdc++.so.6.bak 

如果您对上面的目录有疑问,那么您应该尝试这样做:

有些人有.steam/steam/ubuntu12_32 ,有些人只有.steam/ubuntu12_32 。 如果您没有这些文件夹,请通过检查您的蒸汽查找用户配置文件的位置来查找正确的位置:

 $ fgrep config= /usr/games/steam config=$HOME/.steam 

用它来查找你的lib位置:

 [config value] + /ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu | \-> $HOME/.steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu 

它适用于我…但请注意,如果某些游戏需要蒸汽运行时的旧lib,它可能会崩溃(这就是为什么阀门应该解决这个问题)

编辑2015-08-22:

由于Steam现在在$HOME/.steam/root中有一个链接,它始终指向正确的Steam安装目录,因此该命令应该适用于所有人,并且更快速修复它更简单:

 find $HOME/.steam/root/ubuntu12_32/steam-runtime/*/usr/lib/ -name "libstdc++.so.6" -exec mv "{}" "{}.bak" \; -print 

此外,请记住,在每次蒸汽运行时更新时,您可能需要运行它。

编辑2016-02-16:

另见下面的mchid回复,只需:

 sudo apt-get install libgl1-mesa-dri libgl1-mesa-dri:i386 

可能足以解决这个问题。

编辑2016-10-23:

对于ubuntu 16.10 ,命令已更新,以删除更多破坏台面驱动程序的文件,因此这个新命令应该有效:

 find $HOME/.steam/root/ubuntu12_32/steam-runtime/*/usr/lib/ \( -name "libstdc++.so.6" -o -name "libgpg-error.so.0" -o -name "libxcb.so.1" -o -name "libgcc_s.so.1" \) -exec mv "{}" "{}.bak" \; -print 

对于NVIDIA封闭源驱动程序 ,请参阅Vincent在下面的回复。

编辑2017-01-08:

可能是最终编辑,最新的Steam linux更新应该解决大多数问题,如果不是所有问题! 最后! :d

编辑2017-08-03:

可悲的是,从假期回来发现最近的一些更新再次爆发了。 所以如果你在启动时得到这个,就在更新下载之后:

 process 23148: arguments to dbus_connection_ref() were incorrect, assertion "connection->generation == _dbus_current_generation" failed in file dbus-connection.c line 2688. 

然后蒸汽崩溃,然后你正在击中这个 bug ,报告为非致命的,但它确实在相同的发行版上崩溃。 解决方法是:

 ln -s ${HOME}/.local/share/Steam/ubuntu12_32/steam-runtime/i386/lib/i386-linux-gnu/libdbus-1.so.3 ${HOME}/.local/share/Steam/ubuntu12_32/steam-runtime/pinned_libs_32/libdbus-1.so.3 

祝好运

Fastfix(在Ubuntu 15.04上测试)

 mv ~/.local/share/Steam/ubuntu12_32/steam-runtime/i386/lib/i386-linux-gnu/libgcc_s.so.1{,.disable} mv ~/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libstdc++.so.6{,.disable} 

以下是来自于在ubuntu 15.04上安装Steam的错误,并且是迄今为止这个问题的最简单答案(如上所述由tahtisilma )。 我想补充一点,如果你想避免每次都必须使用命令终端的痛苦,那么你可以在桌面上编辑桌面文件,方法是右键单击并选择属性,然后用桌面文件中的命令替换以下:

 sh -c "LD_PRELOAD='/usr/$LIB/libstdc++.so.6' DISPLAY=:0 steam" 

精简版:

使用以下方法在终端启动蒸汽:

 LD_PRELOAD='/usr/$LIB/libstdc++.so.6' DISPLAY=:0 steam 

而不仅仅是蒸汽

长版:

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

 DISPLAY=:0 glxinfo | grep -i direct 

输出应该是:

直接渲染:是在调试模式下运行steam:

 DISPLAY=:0 LIBGL_DEBUG=verbose steam 

给我们输出,其中以下行给出了提示:

 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)) 

似乎steam使用不同版本的libstdc ++。so.6。 让我们检查一下蒸汽使用的版本:

 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 

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

 LD_PRELOAD='/usr/$LIB/libstdc++.so.6' DISPLAY=:0 steam 

有点非直观的$ 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 

一个更好的脚本可以检查全局LibC6版本是否比STEAM_RUNTIME中的版本新,而且只有LD_PRELOAD版本。

更多细节可以在这里找到。 请注意,我在Debian上测试它,现在它已经在Ubuntu生动15.04上测试过并且工作正常。

在Ubuntu 15.04 64位下使用专有驱动程序NVIDIA版本346,这对我来说很好用:

 LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib32/nvidia-346/:/usr/lib/nvidia-346/" steam 

这是一个简单的修复。

根据错误消息,您缺少以下文件: r600_dri.soswrast_dri.so

运行以下命令以安装这些丢失的文件:

 sudo apt-get update sudo apt-get install libgl1-mesa-dri libgl1-mesa-dri:i386 

现在应该解决这个问题。

请发布任何其他错误。

修复了Ubuntu 16.04,Xenial Xerus,64位

自升级到16.04以来,我只对Steam有这个问题,它在14.04上工作正常。 我尝试了旧版Ubuntu上面的所有修复程序。

该解决方案的第二部分对我有用。

 $ sudo dpkg --add-architecture i386 $ sudo apt-get update $ sudo apt-get install wget gdebi libgl1-mesa-dri:i386 libgl1-mesa-glx:i386 libc6:i386 $ wget http://media.steampowered.com/client/installer/steam.deb $ sudo gdebi steam.deb 

现在我再次在Ubuntu中运行L4D2 – 非常棒!

menasheh对github问题的评论中的这两行与Ubuntu 15.10一起使用:

 export LD_PRELOAD='/usr/$LIB/libstdc++.so.6' export DISPLAY=:0 

请注意,如果Steam自行更新,您可能需要再次输入这些行。

刚刚在全新安装的Ubuntu 18.04 LTS上遇到了这个问题。 原来libgcc_s.so.1的Steam运行时版本是罪魁祸首。 重命名文件为我解决了问题:

 $ cd ~/.steam/root/ubuntu12_32/steam-runtime/i386/lib/i386-linux-gnu/ $ mv libgcc_s.so.1 libgcc_s.so.1.bak