当前位置: 首页>>技术教程>>正文


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

, ,

问题描述

其实我已经安装了新的Ubuntu 15.04 64bit,当我尝试在其上安装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问题。蒸汽捆绑旧的库,并与台面驱动程序相撞,这也是为什么封闭的驱动程序没有看到这个问题。更新:也可能是你错过了一些东西。查看其他mchid的答案。

有一个open bug in Steam’s github

目前的解决方法是删除旧的lib版本,至少在阀门修复其启动脚本或类似问题之前。

因此,请输入这些文件夹并执行此操作(如果您只有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

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

编辑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,该命令已更新以删除更多打破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:

可能最终的编辑,最新的蒸汽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.

然后蒸汽崩溃,那么您正在打this bug,报告为non-fatal,但它在相同的发行版上会崩溃。解决方法是这样的:

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}

第三种解决思路

以下是来自Error in installing Steam on ubuntu 15.04,是迄今为止这个问题最简单的答案(如上面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

输出应该是:

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

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

看来蒸汽使用不同版本的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在LibI6加载了ABI版本18,其中驱动程序期望版本20.解决方案是告诉操作系统使用LD_PRELOAD变量预装正确的LibC6版本:

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

有些non-intuitive $ LIB参数在ld.so中根据正在启动的进程的平台(man 8 ld.so获取详细信息)扩展到正确的路径。

您可以使用以下内容创建脚本来运行脚本而不是蒸汽:

#!/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。

更多细节可以在here上找到。请注意,我在Debian上测试过它,现在它已经在Ubuntu vivid 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问答整理, 博文地址: https://ubuntuqa.com/article/580.html,未经允许,请勿转载。