在Ubuntu 15.04+上安装Steam的问题


103

实际上,我已经安装了新的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架构?

我在使用radeon GPU的AMD系统上遇到此错误,但我仍然在14.10上-虽然确实更新了内核,所以我认为错误是从那里产生的。从我的更新日志中,我可以得到linux-image-3.16.0-41-generic:amd64 (3.16.0-41.57, automatic)以前使用的信息Linux 3.16.0-37-generic
pbhj 2015年

解决了移动libstdc ++。so.6的问题。
pbhj 2015年

您也可以尝试在askubuntu.com/questions/635851/…中发布的解决方案,我认为它更优雅。
Tahtisilma

Answers:


115

这最初是Ubuntu 15.04 / 15.10上Steam的问题。Steam捆绑了旧库并与台面驱动程序发生冲突,这也是为什么封闭驱动程序看不到此问题的原因。更新:也可能是您缺少了一些东西。请参阅其他mchid的答案。

Steam的github中有一个未解决的错误

当前的解决方法是删除旧的lib版本,至少要等到Valve在其启动脚本或类似的问题中解决了该问题为止。

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

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运行时中的旧lib,则它可能会崩溃(这就是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-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

祝好运


1
嗨,不确定我是否是一个单独的案例,但是我只是在全新的15.04安装中安装了.deb软件包,它可以正常工作。可惜我不能玩一半的游戏……指望是Unix。
thenaglecode

3
这仍然在十二月打破吗?哇。阀吸。
沃伦·P

1
所有这些技巧在16.10
QkiZ

1
我从Steam卸载了版本,从Ubuntu回购安装了版本,现在可以使用了。
QkiZ

3
请注意,在16.10上,您的命令对我没有帮助,但是,这里找到的命令有效:askubuntu.com/a/775667
rjp

20

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 2015年

1
您必须在每次Steam更新后再次应用此功能。
bebbo

再次,这不能解决OP错误消息
2016年

我遇到了与Xenial 16.04上的OP相同的问题,并带有相同的错误消息,这对我有用。我需要在第一次启动Steam之前运行一次这些命令,然后在Steam初始更新之后再运行一次。
Maximillian Laumeister

18

以下是来自在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。让我们检查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版本。解决方案是告诉OS使用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创建菜单项,然后删除桌面文件Steam,否则我无法使.local / share / applications / steam.desktop中的主菜单(xubuntu)条目桌面文件起作用。 .desktop在.local / share / applications / steam.desktop中,然后从.local / share / applications链接到桌面文件,如下所示:ln -s〜/ Desktop / steam.desktop〜/ .local / share / applications / steam .desktop
米勒大猩猩

我最初已经移动了文件,如上面的一些答案所建议。但是,只有您指出的出口才使我的ubuntu 15.04蒸蒸日上。非常感谢!:D
鲁本斯

heck $LIB变量在哪里设置?很多人提到它,但它没有定义
Sergiy Kolodyazhnyy

8

在具有专有驱动程序NVIDIA版本346的Ubuntu 15.04 64位下,这对我来说工作正常:

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

另一个修复程序对我有用,但是在将我的nouveau驱动程序列入黑名单之后,我不得不重新安装Nvidia驱动程序,然后Steam无法启动,因此这次修复了该问题,希望此问题在Ubuntu 16.04发行时得到解决
谐振

这应该在任何版本的NVIDIA工作(来源:阿兰·梅- github.com/ValveSoftware/steam-for-linux/issues/...:)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"
伊基塔

8

这是一个简单的修复。

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

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

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

现在应该解决问题了。

请发布任何其他错误。


1
如果有任何Valve员工出现,我有一个问题。为什么ubuntu安装程序脚本的Steam程序不探测Mesa安装并找到缺少的部分并为我安装它们?
沃伦·P

根本没有解决,有问题的库已经是最新版本。
mystrdat '16

这为我解决了。这应该是您尝试的第一件事。
matthew_360 '16

1

修复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,2016年

1
gdebi将安装依赖项,而dpkg不会。
Havok


0

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

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

0

16.04及更高版本

IMG:  可以将Steam作为Flatpak软件包安装在当前所有受支持的Ubuntu版本中。打开终端并输入:

sudo add-apt-repository ppa:alexlarsson / flatpak#仅在16.04中需要,在以后的版本中不需要
sudo apt更新 
sudo apt安装flatpak
flatpak远程添加-如果不存在flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak安装flathub com.valvesoftware.Steam

在18.04及更高版本中,不需要添加ppa:alexlarsson / flatpak的第一个命令,因为flatpak软件包位于默认存储库中。

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

flatpak run com.valvesoftware.Steam   

许多游戏都需要在线购买,但是一些热门游戏(例如Team Fortress 2)是免费玩的。在商店中搜索时,请确保通过SteamOS / Linux操作系统缩小搜索范围。并非所有Linux游戏都与您的系统兼容,因此请确保在购买游戏之前检查要求。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.