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

在 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

答案1

这原本是 Ubuntu 15.04/15.10 上 Steam 的一个问题。Steam 捆绑了旧库并与 mesa 驱动程序发生冲突,这也是为什么封闭的驱动程序没有看到此问题的原因。更新:也可能是你遗漏了一些东西。查看其他 mchid 的回答。

有一个在 Steam 的 github 上打开 bug

当前的解决方法是删除旧的 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 运行时的旧库,它可能会崩溃(这就是为什么 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:

另请参阅麦克里德回复如下,只需这样做:

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:

遗憾的是,度假归来后发现最近的一些更新又失效了。因此,如果您在启动时遇到此问题,请在下载更新后立即解决:

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

然后蒸汽崩溃,然后你就会撞上 漏洞,据报道并非致命的,但它确实导致同一发行版上的 Steam 崩溃。解决方法如下:

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

祝你好运

答案2

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

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

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

简洁版本:

在终端中使用以下命令启动 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 加载的 LibC6 的 ABI 版本为 18,而驱动程序需要的版本为 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 Vid 15.04 上进行了测试并且运行良好。

答案4

这是一个简单的修复。

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

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

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

现在问题应该解决了。

请发布任何其他错误。

相关内容