在Ubuntu 15.04+上安装Steam时遇到问题。

实际上,我已经安装了新的Ubuntu 15.04 64位版本,但是当我尝试在上面安装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

你是不是碰巧在使用AMD架构? - user402087
我在一台装有AMD系统和Radeon GPU的设备上遇到了这个错误,但我仍然在使用14.10版本。尽管我通过aptitude更新了内核,但我认为错误是由此引起的。从我的更新日志中可以看到linux-image-3.16.0-41-generic:amd64 (3.16.0-41.57, automatic),而以前我使用的是Linux 3.16.0-37-generic - pbhj
移动libstdc++.so.6的修复似乎有效。 - pbhj
你也可以尝试一下在https://askubuntu.com/questions/635851/error-in-installing-steam-on-ubuntu-15-04/648953#648953中发布的解决方案,我认为那个更加优雅。 - Tahtisilma
9个回答

这最初是Ubuntu 15.04/15.10上Steam的一个问题。Steam捆绑了旧的库,并与mesa驱动程序冲突,这也是为什么闭源驱动程序没有出现这个问题的原因。更新:也可能是你缺少一些东西。请参考其他mchid的答案。
在Steam的github上有一个已公开的bug
目前的解决方法是删除旧的库版本,至少在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。如果您没有这些文件夹,请通过检查Steam寻找用户配置文件的位置来找到正确的位置:
$ fgrep config=  /usr/games/steam
config=$HOME/.steam

使用这个来找到你的库位置:
[config value] + /ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu
   |
   \-> $HOME/.steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu

它对我有效...但请注意,如果某些游戏需要来自Steam运行时的旧库,可能会崩溃(这就是为什么Valve应该修复这个问题)。 编辑 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

此外,请记住,在每次Steam运行时更新后,您可能需要运行此操作。
编辑于2016年2月16日:
还请参阅下面的mchid回复,只需执行以下操作:
sudo apt-get install libgl1-mesa-dri libgl1-mesa-dri:i386

可能足以修复这个问题。
编辑2016-10-23:
对于Ubuntu 16.10,命令已更新以删除更多破坏Mesa驱动程序的文件,因此这个新命令应该有效。
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:

可悲的是,从度假回来发现一些最近的更新再次破坏了Steam。所以如果你在下载更新后启动时遇到这个问题:

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

然后蒸汽崩溃,然后你遇到了thisbug,它报告为非致命错误,但是在相同的发行版中它确实使蒸汽崩溃。解决方法如下:
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

祝你好运

1嗨,不确定我是否是个例外,但我刚在我的全新15.04安装上安装了.deb包,它运行良好。可惜我不能玩一半的游戏...因为它是Unix系统。 - thenaglecode
@thenaglecode 但你仍然可以玩到许多最好的游戏(如DOTA2、无尽工厂和Kerbal太空计划),而且还会不断有更多新游戏推出。 - AJMansfield
3十二月还是坏的?哇,VALVE太糟糕了。 - Warren P
@WarrenP 因为它没有坏,只是人们将不同的错误合并在一起。这个回答与OP发布的错误无关。看看我的回答。 - mchid
非常感谢,重命名/删除"libstdc++.so.6"确实有帮助! - Leo Chapiro
这很困难。我放弃在Linux上玩游戏了。=[ - Casper
@CasperLI运行find $HOME/.steam/root/ubuntu12_32/steam-runtime/*/usr/lib/ -name "libstdc++.so.6" -exec mv "{}" "{}.bak" \; -print是“相当困难”吗?!那就切换到steamos或支持的ubuntu版本解决问题。不论你是想在linux上玩游戏还是不想,这不能成为停止这么做的借口 - higuita
1所有这些技巧在16.10版本中都不起作用。 - QkiZ
@QkiZ:请检查上面更新的命令,现在应该也适用于16.10版本。 - higuita
1我从Steam卸载了版本,然后从Ubuntu仓库安装了版本,现在可以正常工作。 - QkiZ
3只是一条留言,在16.10版本中,你的命令对我没有起作用,然而,在这里找到的这个命令:https://askubuntu.com/a/775667 确实有效。 - rjp
顺便说一句,我非常感谢你努力保持这个更新。我真的希望Valve能够跟上进度。 - rjp
rjp的链接对我在16.10上解决了Steam的问题。谢谢 - k1l

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}

3嗯,这看起来应该会起作用——它确实压制了一个错误消息,但仍然显示无法加载swrast。 - rm-vanda
1每次蒸汽更新后,您都需要再次应用此操作。 - bebbo
再次强调,这并不能解决原始帖子中的错误信息。 - mchid
我在Xenial 16.04上遇到了和OP一样的问题,出现了相同的错误信息,而这个方法对我有效。在首次启动Steam之前,我需要运行这些命令一次,然后在Steam进行初始更新后再运行第二次。 - Maximillian Laumeister

以下内容来自在Ubuntu 15.04上安装Steam时出现错误,这是迄今为止最简单的解决方案(正如tahtisilma所指出的)。我想补充一点,如果你想避免每次都要使用命令终端的痛苦,那么你可以通过右键点击桌面并选择属性来编辑桌面文件,然后将桌面文件中的命令替换为以下内容:
sh -c "LD_PRELOAD='/usr/$LIB/libstdc++.so.6' DISPLAY=:0 steam"  

简短版本:

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

LD_PRELOAD='/usr/$LIB/libstdc++.so.6' DISPLAY=:0 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。让我们检查一下 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

所以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 vivid 15.04上进行了测试,并且运行良好。

虽然桌面文件编辑会起作用,但除非我使用alacarte创建菜单项并从.local/share/applications/steam.desktop中移除desktop文件,否则无法使主菜单(xubuntu)的entry desktop file起作用,并且然后链接到.local/share/applications中的desktop文件,像这样: ln -s ~/Desktop/steam.desktop ~/.local/share/applications/steam.desktop - miller the gorilla
我最初移动了文件,正如上面一些答案建议的那样。但是只有你指出的导出才让我在我的Ubuntu 15.04上使得Steam工作正常。非常感谢!:D - Rubens
$LIB变量在哪里被设置的?很多人提到它,但是它并没有定义。 - Sergiy Kolodyazhnyy

这是一个简单的修复。
根据错误信息,您缺少以下文件:r600_dri.soswrast_dri.so 运行以下命令来安装这些缺失的文件:
sudo apt-get update
sudo apt-get install libgl1-mesa-dri libgl1-mesa-dri:i386

问题现在应该已经解决了。
请发布任何额外的错误。

1如果有任何Valve员工路过,我有一个问题:为什么Steam for Ubuntu安装脚本不会检测Mesa的安装情况,并自动安装缺失的部分呢? - Warren P
完全没有解决,所涉及的库已经是最新版本了。 - zrooda
这个方法对我很有用。这应该是你尝试的第一件事。 - matthew_360

这对我来说在Ubuntu 15.04 64位操作系统上使用专有驱动程序NVIDIA版本346正常工作。
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib32/nvidia-346/:/usr/lib/nvidia-346/" steam

之前有另一个修复方法对我有效,但在禁用nouveau驱动程序后,我不得不重新安装我的Nvidia驱动程序,然后Steam就无法启动了,所以这次修好了,希望到Ubuntu 16.04发布时这个问题能得到修复。 - resonant7hand
这应该适用于任何NVIDIA版本(来源:Alan Plum - https://github.com/ValveSoftware/steam-for-linux/issues/3801#issuecomment-256324040): NVIDIA_VERSION=$(nvidia-settings -q NvidiaDriverVersion | grep -oP "[0-9]{3}" | sed -n 1p); export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib32/nvidia-$NVIDIA_VERSION:/usr/lib/nvidia-$NVIDIA_VERSION" - higuita

这两行代码来自menasheh在github问题上的评论,适用于Ubuntu 15.10。
export LD_PRELOAD='/usr/$LIB/libstdc++.so.6'
export DISPLAY=:0

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

修复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了,太棒了!

如果你已经安装了dpkg,就不需要再安装gdebi了: sudo dpkg -i ./steam.deb - CSkau
1gdebi会安装依赖项,而dpkg则不会。 - Havok

16.04 及以上版本

IMG: Steam 可以在所有当前支持的 Ubuntu 版本中作为 flatpak 包进行安装。打开终端并输入以下命令:

sudo add-apt-repository ppa:alexlarsson/flatpak # 仅适用于 16.04,不适用于后续版本
sudo apt update 
sudo apt install flatpak
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install flathub com.valvesoftware.Steam

18.04 和之后的版本不需要执行第一条命令添加 ppa:alexlarsson/flatpak,因为 flatpak 包已经包含在默认软件源中。

可以通过点击 Dash 中的图标或使用以下命令从终端启动 Steam:

flatpak run com.valvesoftware.Steam   

很多游戏需要在线购买,但是一些热门游戏,比如《团队要塞2》,是免费玩的。在商店搜索时,请务必按SteamOS/Linux操作系统来缩小结果范围。并非所有Linux游戏都与你的系统兼容,所以在购买游戏前请确保检查系统需求。

在新安装的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