Steam/故障排除
- 确保您已按照 Steam#安装 进行操作。
- 如果 Steam 客户端/游戏无法启动,并且/或者您收到有关某个库的错误消息,请阅读 #Steam 运行时库 并查看 #调试共享库。
- 如果问题与网络有关,请确保您已转发 Steam 所需的端口。
- 如果问题是关于游戏的,请查阅 Steam/游戏特定故障排除。
Steam 运行时库
Linux 版 Steam 自带一套库,称为 Steam 运行时库。默认情况下,Steam 在运行时库环境中启动所有 Steam 应用程序。Steam 运行时库位于 ~/.steam/root/ubuntu12_32/steam-runtime/。
如果您将 Steam 运行时库与系统库混合使用,将导致二进制不兼容问题,请参阅 steam-for-linux issue #4768。二进制不兼容可能导致 Steam 客户端和游戏无法启动(表现为崩溃、挂起或无声返回)、音频问题以及各种其他问题。
steam 包提供了两种启动 Steam 的方式:
/usr/bin/steam(别名为steam),它通过LD_PRELOAD环境变量覆盖已知会导致问题的运行时库(请参阅 ld.so(8))。/usr/lib/steam/steam,这是默认的 Steam 启动脚本。
由于 Steam 运行时库版本较旧,它们可能缺少较新的功能,例如,Steam 运行时库的 OpenAL 版本缺少 HRTF 和 surround71 支持。
Steam 原生运行时库
该 steam-native-runtimeAUR 包依赖于超过 130 个包来替代 Steam 运行时库,但某些游戏可能仍需要额外的包。
此包提供了 steam-native 脚本,该脚本使用 STEAM_RUNTIME=0 环境变量和 -compat-force-slr off 标志启动 Steam,使其忽略其运行时库并仅使用系统库。
./<game_executable>; exit; %command%,这将以系统环境启动游戏,因为运行时库仅适用于 %command%。您也可以在不使用 steam-native-runtimeAUR 的情况下使用 Steam 原生运行时库,只需手动安装所需的包即可。请参阅 #查找丢失的运行时库。
调试共享库
要查看程序或共享库所需的共享库,请在上面运行 ldd 命令,请参阅 ldd(1)。LD_LIBRARY_PATH 和 LD_PRELOAD 环境变量可以更改加载哪些共享库,请参阅 ld.so(8)。因此,要正确调试程序或共享库,这些环境变量在您的调试环境中匹配您希望调试的环境非常重要。
如果您发现缺少某个库,可以使用 pacman 或 pkgfile 搜索包含该丢失库的包。
查找丢失的游戏库
如果游戏无法启动,可能的原因是缺少所需的库。您可以通过运行 ldd game_executable 来找出它需要哪些库。game_executable 可能位于 ~/.steam/root/steamapps/common/ 某个位置。请注意,这些“丢失”的库中的大多数实际上已包含在 Steam 中,不需要全局安装。
查找丢失的运行时库
如果在使用 steam-native 时,单个游戏或 Steam 本身无法启动,则可能缺少库。要查找所需的库,请运行
$ cd ~/.steam/root/ubuntu12_32 $ file * | grep ELF | cut -d: -f1 | LD_LIBRARY_PATH=. xargs ldd | grep 'not found' | sort | uniq
或者,使用 steam 运行 Steam,并使用以下命令查看 Steam 正在使用哪些非系统库(并非所有这些都是 Steam 运行时库的一部分)
$ for i in $(pgrep steam); do sed '/\.local/!d;s/.* //g' /proc/$i/maps; done | sort | uniq
调试 Steam
Steam 启动器将其 stdout 和 stderr 重定向到 /tmp/dumps/USER_stdout.txt。这意味着您不必从命令行运行 Steam 即可查看该输出。
可以通过调试 Steam 来获取更多信息,这可能有助于找出某个功能无法工作的原因。
您可以设置 DEBUGGER 环境变量,并将其设置为 gdb、cgdb、valgrind、callgrind、strace 中的一个,然后启动 steam。
例如,使用 gdb
$ DEBUGGER=gdb steam
gdb 将会打开,然后输入 run,这将启动 steam。一旦发生崩溃,您可以输入 backtrace 来查看调用堆栈。
运行时库问题
使用 Bumblebee 时提示 'GLBCXX_3.X.XX' 未找到
此错误很可能是因为 Steam 打包了自己过时的 libstdc++.so.6。请参阅 #查找丢失的运行时库 以了解如何解决不良库问题。另请参阅 steam-for-linux issue 3773。
Steam>警告: 无法初始化 SDL 线程优先级管理器: 未找到 SDL
解决方案: 安装 lib32-sdl2AUR 包。
游戏立即崩溃
这很可能是由于 #Steam 运行时库 问题,请参阅 #调试共享库。
在游戏属性中禁用游戏内 Steam Overlay 可能会有帮助。
最后,如果这些方法无效,您应该检查 Steam 的输出以获取任何游戏错误。您可能会遇到以下情况
munmap_chunk(): 无效指针free(): 无效指针
在这种情况下,请尝试将有问题的游戏中的 libsteam_api.so 文件替换为能正常工作的游戏中的文件。当禁用 Steam 运行时库时,通常会发生此错误,这对于最近未更新的游戏尤其如此。在 AYIM、Bastion 和 Monaco 中遇到了此错误。
如果游戏崩溃并显示
terminate called after throwing an instance of 'dxvk::DxvkError'
则很可能是因为安装了冲突版本的 Vulkan。 lib32-vulkan-intel 和 NVIDIA Vulkan 驱动程序是互斥的。这可以通过卸载不需要的驱动程序来解决。要获取有关芯片组供应商的信息,可以运行
# lshw -C display | grep vendor
要获取已安装包的列表
# pacman -Qs vulkan
游戏和 Steam 在游戏启动后崩溃
如果输出了以下错误
failed to dlopen engine.so error=/home/GAMEPATH/bin/libgcc_s.so.1: version `GCC_7.0.0' not found (required by /usr/lib32/libopenal.so.1)
移动不兼容的库可以作为一种解决方法。
mv .local/share/Steam/steamapps/common/GAME/bin/libgcc_s.so.1 .local/share/Steam/steamapps/common/GAME/bin/libgcc_s.so.1.b
某些游戏在启动时聚焦时冻结
结合使用 ForceFullCompositionPipeline、特定 Proton 版本和 NVIDIA 驱动程序 535 版本,已知 会导致某些使用 DXVK/Vulkan 的游戏在 Xorg 下启动时冻结 。使用 Alt+Tab 可以将 Steam 调至焦点,游戏似乎在后台正常运行。解决方案:禁用 ForceFullCompositionPipeline 或降级 NVIDIA 驱动程序。
版本 `CURL_OPENSSL_3` 未找到
这是因为单独的 curl 与旧版本不兼容。您需要安装兼容性库
可能会出现以下消息之一
# Nuclear Throne ./nuclearthrone: /usr/lib32/libcurl.so.4: version `CURL_OPENSSL_3' not found (required by ./nuclearthrone) # Devil Daggers ./devildaggers: /usr/lib/libcurl.so.4: version `CURL_OPENSSL_3' not found (required by ./devildaggers)
您需要安装 libcurl-compat 或 lib32-libcurl-compat 并手动链接兼容性库
# Nuclear Throne $ ln -s /usr/lib32/libcurl-compat.so.4.4.0 "LIBRARY/steamapps/common/Nuclear Throne/lib/libcurl.so.4" # Devil Daggers $ ln -s /usr/lib/libcurl-compat.so.4.4.0 LIBRARY/steamapps/common/devildaggers/lib64/libcurl.so.4
Steam 网页视图/游戏浏览器在原生运行时库中无法工作(黑屏)
自新的 Steam 好友 UI 更新以来,客户端网页视图在使用原生运行时库时无法正常工作。
./steamwebhelper: error while loading shared libraries: libpcre.so.3: cannot open shared object file: No such file or directory
可以通过预加载 glib 库来解决;这些库不需要 libpcre 和 selinux 即可工作。
$ LD_PRELOAD="/usr/lib/libgio-2.0.so.0 /usr/lib/libglib-2.0.so.0" steam-native
或者,您可以创建一个符号链接到原生的 Arch libpcre 库。
# ln -s /usr/lib/libpcre.so /usr/lib64/libpcre.so.3
自 2022 年 3 月 3 日左右的更新以来,有一些报告称在应用上述解决方法后,黑屏问题仍然存在。
目前的解决方法是使用 -no-cef-sandbox 选项运行 Steam。可以在 Github Steam-For-Linux 存储库的 Issue #8451 和 #8420 中找到更多信息。
Steam: 发生 X 错误
在使用 NVIDIA GPU 和专有驱动程序时,Steam 可能无法启动,并且(如果从终端运行)会产生类似以下的错误:
Steam: An X Error occurred X Error of failed request: GLXBadContext Major opcode of failed request: 151 Serial number of failed request: 51 xerror_handler: X failed, continuing
确保已安装您显卡的 lib32- NVIDIA 驱动程序,并与主包版本匹配,使用
# pacman -Qs nvidia
如果驱动程序不匹配,您可能需要更改正在使用的 镜像 来安装驱动程序。
如果您使用的是 AMD 显卡,启用了 10 位颜色深度,并且遇到此问题。您可能需要禁用 10 位颜色深度。
导致此错误消息的另一个问题是 通过删除 config.vdf 文件解决
$ rm ~/.local/share/Steam/config/config.vdf
Steam: 兼容性工具配置失败
如果您尝试使用 Proton 运行原生游戏,但在开始游戏后立即收到 Steam 兼容性工具错误,您可能需要重新安装运行时库。
- 导航到您的 Steam 库。
- 在游戏列表上方的下拉菜单中,选择“工具”选项以使其可见。
- 搜索 Proton,右键单击每个已安装的工具,选择“属性”,打开“本地文件”选项卡,然后为每个条目单击“验证工具文件完整性”。
- 搜索 Steam Linux Runtime 并重复相同的过程。如果没有可用的,请安装最新的 Steam Linux Runtime - Soldier。
使用自定义内核时,游戏启动后立即关闭
确保您已在“通用设置 -> Namespaces 支持”中启用了用户命名空间。
Steam 库无法启动
打开 Steam 库要么显示为空,要么显示一个短暂的启动画面,但没有窗口出现。在终端窗口中运行 /usr/bin/steam 会出现此错误:
Assertion 'device' failed at src/libsystemd/sd-device/device-private.c:103, function device_get_tags_generation(). Aborting.
已提交 Bug 报告: #79006
另请参阅讨论: Steam 自 systemd 253.5-2 更新后无法启动
一种解决方法是安装 lib32-libnm。
图形问题
Xwayland 和 HiDPI 下文本和图形模糊
当 Steam 作为 Xwayland 客户端在使用了 HiDPI 缩放的合成器下运行时,您可能会发现 Steam 和游戏以一半分辨率渲染,然后放大以适应 HiDPI 屏幕。这会导致图形模糊。
一种选择是使用嵌套的 gamescope 合成器来运行 Steam。安装 gamescope 包
$ gamescope -f -m 1 -e -- steam -gamepadui
这将以“巨幕模式”(实际上是 Steam Deck 模式)全屏运行 Steam,不进行缩放(即全分辨率)。相同的设置也应传播到 Steam 下运行的游戏。
另一种选择是配置您的合成器以防止 Xwayland 缩放应用程序。例如,Hyprland 用户可以在 hyprland.conf 文件中添加
xwayland {
force_zero_scaling = true
}
以防止 Xwayland 缩放任何应用程序。请注意,所有 使用 Xwayland 的应用程序将停止缩放,因此在 HiDPI 显示器上,这些应用程序中的文本和其他元素可能会变得太小而无法舒适地查看。
Steam 闪烁/黑屏,无法加载商店/库或其他页面
当 Steam 在 Wayland(未在 X11 上确认)上启动,并且具有双显卡时,在某些情况下,Steam 客户端显示黑屏和闪烁/闪烁是不稳定的。这是由于桌面条目中的 PrefersNonDefaultGPU 选项被启用。
通过编辑桌面条目修复
首先,创建 Steam 的桌面条目用户副本(从 /usr/share/applications/steam.desktop)。然后,更改选项
~/.local/share/applications/steam.desktop
... PrefersNonDefaultGPU=false ...
如果已打开,请关闭 Steam 并重新启动。
绕过桌面条目
如果您从终端启动 Steam,则桌面条目选项将不起作用,从而绕过了此问题。
$ steam &
末尾的 Ampersand (&) 表示在后台运行 Steam,启动 Steam 后可以关闭终端。
音频问题
如果下面的章节没有解决问题,使用 #Steam 原生运行时库 可能会有帮助。
配置 PulseAudio
明确依赖 ALSA 的游戏可能会导致 PulseAudio 出错。请遵循 PulseAudio#ALSA 的说明,让这些游戏改用 PulseAudio。
如果您使用的是 PipeWire,那么请安装 lib32-pipewire 并设置 PipeWire#PulseAudio 客户端。
无音频或 756 段错误
首先 #配置 PulseAudio 并查看是否能解决问题。如果您在 Steam 客户端内播放的视频中没有音频,则可能是 Steam 打包的 ALSA 库不起作用。
尝试在 Steam 客户端内播放视频时会收到类似以下错误的提示:
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
一种解决方法是重命名或删除 alsa-lib 文件夹和 libasound.so.* 文件。它们可以在以下位置找到:
~/.steam/steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/
另一种解决方法是将 libasound.so.* 库添加到 LD_PRELOAD 环境变量中:
$ LD_PRELOAD='/usr/$LIB/libasound.so.2 '${LD_PRELOAD} steam
如果音频仍然无法工作,将 PulseAudio 库添加到 LD_PRELOAD 变量中可能有助于解决问题。
$ LD_PRELOAD='/usr/$LIB/libpulse.so.0 /usr/$LIB/libpulse-simple.so.0 '${LD_PRELOAD} steam
请注意,它们的名称可能会随时间而改变。如果是这样,则有必要查看
~/.steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu
并找到新的库及其版本。
FMOD 音频引擎
FMOD 音频中间件包有些 Bug,因此使用它的游戏可能存在声音问题。
这通常发生在未使用的声音设备被用作 ALSA 的默认设备时。请参阅 Advanced Linux Sound Architecture#设置默认声卡。
- 受影响的游戏: Hotline Miami, Hotline Miami 2, Transistor
PulseAudio & OpenAL: 音频流无法在设备之间移动
如果您使用 PulseAudio 且无法在接收器之间移动音频流,可能是因为较新版本的 OpenAL 默认不允许移动音频流。尝试将以下内容添加到您的 ~/.alsoftrc 文件中:
[pulse] allow-moves=true
Steam 语音和游戏中麦克风爆音
如果您在使用 Steam 语音或游戏时遇到输入音频爆音,可以尝试使用环境变量 PULSE_LATENCY_MSEC=30 启动 Steam。
Steam 客户端问题
无法浏览文件系统以添加库文件夹,或库文件夹显示为空
如果尝试添加库文件夹时文件选择器为空,或者先前设置的文件夹现在显示已安装 0 个游戏,这可能是由于根目录或库文件夹上的时间戳不正确。可以使用 stat 命令检查时间戳:
$ stat path
如果时间戳在未来,请运行
$ touch path
以将其重新初始化为当前日期,然后重新运行 Steam。
由于缺少执行权限而无法添加库文件夹
如果您在另一个驱动器上添加了另一个 Steam 库文件夹,可能会收到以下错误消息:
New Steam library folder must be on a filesystem mounted with execute permissions
请确保您在 /etc/fstab 中使用正确的标志挂载文件系统,通常是通过将 exec 添加到挂载参数列表中。该参数必须出现在任何 user 或 users 参数之后,因为这些参数可能意味着 noexec。
此错误也可能发生,因为您的库文件夹不包含 steamapps 目录。早期版本使用 SteamApps,所以请确保名称全为小写。
此错误也可能由于 Steam 运行时库问题而发生,可以通过遵循 #查找丢失的运行时库 部分来修复,或者由于设备上没有剩余空间。为了调试,从控制台运行 Steam 并观察日志可能会有所帮助。
下载速度异常缓慢
如果您的 Steam(游戏、软件…)通过客户端的下载速度异常缓慢,但浏览 Steam 商店和播放视频不受影响,安装一个 DNS 缓存程序,例如 dnsmasq,可以有所帮助 [1]。
另一些可能有助于解决问题的方法是禁用 IPv6。请参阅 [2] 获取更多信息。
另一个潜在的解决方法是禁用 HTTP2 [3],方法是创建文件
~/.steam/steam/steam_dev.cfg
@nClientDownloadEnableHTTP2PlatformLinux 0
为了增加服务器连接数(可能会以降低速度为代价),请添加
~/.steam/steam/steam_dev.cfg
... @fDownloadRateImprovementToAddAnotherConnection 1.0
"需要在线" 错误
如果 Steam 启动器拒绝启动,并且您收到一条错误消息:“致命错误:Steam 需要在线才能更新”,而您实际上是在线的,那么可能是名称解析方面存在问题。
尝试安装 lib32-systemd、lib32-libcurl-compat、nss-mdns、lib32-nss、lib32-glu 或 lib32-dbus。
这也可能仅仅是 DNS 解析未能正常工作,并且并不总是显而易见的,因为现代浏览器会使用自己的 DNS 服务器。请遵循 域名解析。
如果 systemd-resolved 提供 DNS 解析,Steam 可能会出现问题。请确保存在 lib32-systemd 来解决此问题。
如果 DNS 解析正常工作,但 Steam 启动器仍然显示相同的错误消息,启用 DNS 缓存(例如通过“名称服务缓存守护程序”nscd.service)已证明可以解决此问题。
尚不清楚运行 nscd 具体做了什么使其重新工作。请查看 讨论页面 以获取更多信息。
Steam 忘记密码
Linux 版 Steam 有一个 Bug,会导致它忘记某些用户的密码。
作为一种解决方法,在登录 Steam 后,运行
# chattr +i ~/.steam/registry.vdf
这将设置文件的不可修改位,因此 Steam 无法修改、删除或重命名它,从而不会将您注销。
防止崩溃内存转储
每次 Steam 崩溃时,它都会将内存转储写入 /tmp/dumps/。如果 Steam 进入崩溃循环,转储文件可能会变得很大。当 /tmp 被挂载为 tmpfs 时,内存和交换文件可能会被不必要地消耗。
为防止这种情况,请将 /tmp/dumps/ 链接到 /dev/null
# ln -s /dev/null /tmp/dumps
或者,创建 /tmp/dumps 并修改其权限。然后 Steam 将无法将转储文件写入该目录。
# mkdir /tmp/dumps # chmod 600 /tmp/dumps
这样做还有额外的好处,即 Steam 不会将这些转储文件上传到 Valve 的服务器。
播放视频时的 Steam 许可证问题
Steam 对某些视频使用 Google 的 Widevine DRM。如果未安装,您将收到以下错误:
This video requires a license to play which cannot be retrieved. This may be a temporary network condition. Please restart the video to try again.
要解决此问题,请遵循 在 Steam 上播放视频 支持页面。
没有用于添加好友/邀请好友的上下文菜单
自新的 Steam 好友界面更新以来,右键菜单中的“加入游戏”、“邀请至游戏”和“查看游戏信息”等选项可能已丢失。
为了解决此问题,可能需要安装 lsof。
用户界面缓慢且无响应
如果您在使用 Steam 客户端时遇到极其缓慢和迟钝的性能问题,可以尝试在 Steam 客户端设置的“界面”选项卡下禁用“在网页视图中启用 GPU 加速渲染”选项。
好友列表也可能导致此问题。在 https://github.com/ValveSoftware/steam-for-linux/issues/7245 中提到了两个解决方法。
Steam 启动失败
一种故障排除步骤是运行
$ steam --reset
这可以修复由于安装损坏而出现的各种问题。
任务栏菜单丢失
如果点击 Steam 任务栏图标没有出现菜单,可能需要安装 libappindicator-gtk2AUR 和 lib32-libappindicator-gtk2AUR 包,然后重启 Steam。
“您的浏览器不支持观看此直播所需的最少功能集”错误
请参阅 steam-for-linux issue 6780。
如果您在尝试观看流/直播时收到“您的浏览器不支持观看此直播所需的最少功能集”的错误消息,请尝试以下故障排除步骤。
- 导航到“社区”>“直播”。如果页面显示“正在更新 Steam”,请等待几分钟,看看过程是否完成,如果没有,过一会儿可以取消。现在测试您是否能够观看直播,例如通过点击“社区”>“直播”下显示的一个。
- 在巨幕模式下(视图>巨幕模式)开始直播。如果在巨幕模式下直播可以正常开始,请在切换回主界面后检查它是否仍然有效。
- 使用以下命令触发 Steam 客户端直接解锁 H.264 解码:
steam steam://unlockh264/。Steam 客户端应在后台运行并执行解锁命令。等待一分钟以确保过程完成,然后关闭并重新启动 Steam 客户端。
使用系统标题栏和边框
目前 Steam 客户端会尝试自行管理窗口,但它处理不当,请参阅 steam-for-linux#1040。作为一种解决方法,您可以使用 steamwm 项目。像这样运行 Steam:./steamwm.cpp steam。该项目还提供了一个皮肤,可以移除非原生控件按钮和边框,但保留默认皮肤装饰。
更具选择性的 DPMS 抑制
默认情况下,Steam 客户端在运行时会完全禁用屏幕保护程序,无论是否启动了游戏。
steam-screensaver-fixAUR 提供了此问题的解决方法:运行 steam-screensaver-fix-native 或 steam-screensaver-fix-runtime。
这将允许您的屏幕在 Steam 运行时关闭,但如果启动了游戏,将继续阻止屏幕保护程序。
有关详细信息,请参阅 Valve GitHub 上的 Issue 5607。
启用分数缩放
如果 Steam 客户端窗口中的文本和图标太小而无法阅读,启用分数缩放可能会有所帮助。Steam 客户端有一个设置选项可以启用它,位于“设置>界面>将文本和图标缩放到与显示器设置匹配”。启用此选项应会指示客户端使用系统的分数缩放设置。
但是,如果此设置未自动生效,则有一个命令行参数可以强制分数缩放。使用 -forcedesktopscaling 1.5 标志运行 Steam 将客户端缩放到 1.5 倍大小。此值可以更改为适合您显示器的正确缩放因子。如果您希望使此更改永久生效,可以编辑 steam.desktop 文件中的 Exec 字段。
Steam Beta 版崩溃
如果您正在使用 Steam Beta 版(可以通过日志中出现 You are in the 'publicbeta' client beta 来确认)并遇到严重错误,请手动切换回非 Beta 版。
$ rm -f ~/.local/share/Steam/package/beta
在 https://github.com/ValveSoftware/steam-for-linux 上查找重复项后报告问题。
无法访问商店页面(客户端显示错误 -105 或 -102)
如果商店页面无法访问,但其他网络功能(如游戏下载)正常工作,则可能是 DNS 解析失败。可能的解决方案是确保 systemd-resolved 已启用并启动,然后按照 systemd-resolved#DNS 中的说明创建 /etc/resolv.conf 符号链接。
另一个解决方案是清除 DNS,如在此处所述 [6]。
以 root 身份运行 resolvectl flush-caches 或 systemd-resolve --flush-caches。
Steam Remote Play 问题
Remote Play 从 Arch Linux 主机到 Arch Linux 访客无法工作
很可能是您缺少 lib32-libcanberra。安装后,它应该可以按预期工作。
这样,Steam 在尝试通过 Remote Play 启动游戏时就不再崩溃了。
硬件解码不可用
Remote Play 硬件解码使用 vaapi,但 Steam 需要 libva2_32bit,而 Arch 默认使用 64 位。
作为基本设置,这是 libva 和 lib32-libva。Intel 显卡用户还需要 libva-intel-driver 和 lib32-libva-intel-driver。
有关 vaapi 的更多信息,请参阅 硬件视频加速。
可能还需要删除 Steam 运行时版本的 libva,以强制其使用系统库。当前使用的库可以通过以下方式找到
$ pgrep steam | xargs -I {} cat /proc/{}/maps | grep libva
如果这显示了 ~/.local/Share/steam 中的位置,则 Steam 仍在使用其打包的 libva 版本。可以通过删除 ~/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libva* 处的 libva 库文件来解决此问题,这样 Steam 将回退到系统库。
巨幕模式在失去焦点后最小化
当您通过 Remote Play 玩游戏时,或者当您有多个显示器并将其鼠标移出 BPM 窗口时,可能会发生这种情况。为防止此问题,请设置 SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS=0 环境变量并重启 Steam。
另请参阅 steam-for-linux issue 4769。
其他问题
NTFS 分区上的 Steam 库
如果您的 Steam 库位于 NTFS 分区上,那么其中的游戏可能无法启动。
问题在于 Wine 在其 $WINEPREFIX/dosdevices 目录中使用冒号,当使用 windows_names 选项挂载时,它被指示不创建可能混淆 Windows 的此类冒号名称。不添加它并不算不安全:Windows 可以正常工作,除了无法打开符号链接(它反正也不需要这样做);chkdsk 可能会删除该链接,但很容易重新创建。
更好的解决方法:在挂载时不使用 windows_names。GUI 文件浏览器通常会出于谨慎通过 udisks 添加此选项,但添加一个真正的 fstab 行将提供正确的方法。
- 运行
genfstab -U /并提取包含 ntfs 分区的行,例如UUID=12345678ABCDEF00 /run/media/user/Gamez ntfs3 rw,uid=1000,gid=1000,windows_names 0 0
- 将该行写入
/etc/fstab,并编辑它以使用正确的选项,不带windows_names。以之前的示例为例,我们将写入UUID=12345678ABCDEF00 /run/media/user/Gamez ntfs3 rw,uid=1000,gid=1000 0 0
- 卸载分区,然后重新挂载。
或者,全局禁用 udisks 对 windows_names 的使用,请遵循 udisks#NTFS 文件创建失败(依赖文件名) 中的说明。
其他解决方法:将 steamapps/common/Proton x.y 和 steamapps/compatdata 移动到非 NTFS 驱动器,然后在它们原来的位置创建符号链接。但是,您可能会浪费 Linux 驱动器上一些重要的空间。
$ mv SteamLibrary/steamapps/common/Proton\ x.y /home/user/dir/ $ mv SteamLibrary/steamapps/compatdata /home/user/dir/ $ ln -s /home/user/dir/Proton\ x.y/ SteamLibrary/steamapps/common/Proton\ x.y $ ln -s /home/user/dir/compatdata/ SteamLibrary/steamapps/compatdata
错误的 ELF 类
如果在 Steam 的控制台输出中看到此消息
ERROR: ld.so: object '~/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
您可以安全地忽略它。这实际上不是错误:Steam 包含一些库的 64 位和 32 位版本,只有其中一个版本可以成功加载。即使 Steam(和游戏内覆盖)工作正常,也会显示此“错误”。
多显示器设置
多显示器设置可能会阻止游戏启动。尝试禁用所有额外的显示器,然后运行游戏。游戏成功启动后可以启用它们。
您也可以尝试设置此环境变量来运行 Steam
$ export LD_LIBRARY_PATH=/usr/lib32/nvidia:/usr/lib/nvidia:$LD_LIBRARY_PATH
文本损坏或丢失
尝试安装 lib32-fontconfig、ttf-liberation、xorg-fonts-misc(如果未安装此包,Steam 更新器窗口会显示空方块而不是所有非拉丁字符)以及 wqy-zenhei(用于亚洲字符),然后重启 Steam 查看问题是否已解决。
SetLocale('en_US.UTF-8') 在游戏启动时失败或在 Steam 客户端中输入非 ASCII 字符不起作用
您需要生成 en_US.UTF-8 UTF-8 区域设置。请参阅 Locale#Generating locales。
缺少 libc
这可能是由于 Steam 可执行文件损坏。检查以下命令的输出
$ ldd ~/.local/share/Steam/ubuntu12_32/steam
如果 ldd 声称它不是动态可执行文件,那么 Steam 可能在更新过程中损坏了二进制文件。以下操作应能解决问题
$ cd ~/.local/share/Steam/ $ ./steam.sh --reset
如果无效,请尝试删除 ~/.local/share/Steam/ 目录并重新启动 Steam,让它重新安装。
当您的 $HOME 目录以斜杠结尾时,Steam 中会出现一个错误,该错误也可能导致此错误消息(Valve GitHub issue 3730)。可以通过编辑 /etc/passwd 将 /home/username/ 更改为 /home/username 来修复此问题,然后注销并重新登录。之后,Steam 应该会自动修复。
旧版 Intel 硬件上的游戏无法启动
在不支持 OpenGL 3 的旧版 Intel 硬件上,例如 Intel GMA 芯片或 Westmere CPU,游戏在运行时可能会立即崩溃。它在 /tmp/dumps/mobile_stdout.txt 中显示为 gameoverlayrenderer.so 错误,但在 /tmp/gameoverlayrenderer.log 中查看会显示 GLXBadFBConfig 错误。
可以通过强制游戏使用比它想要的更高版本的 OpenGL 来修复此问题。将 MESA_GL_VERSION_OVERRIDE=3.1 MESA_GLSL_VERSION_OVERRIDE=140 添加到您的 启动选项。
Mesa:游戏启动失败,抱怨显卡支持的 OpenGL 版本
一些游戏编程不当,会使用高于 3.0 的 OpenGL 版本。使用 Mesa 时,应用程序必须请求一个特定的核心配置文件。如果它不进行此类请求,则只能使用 OpenGL 3.0 及更低版本。
可以通过强制游戏使用它实际需要的 OpenGL 版本来修复此问题。将 MESA_GL_VERSION_OVERRIDE=4.1 MESA_GLSL_VERSION_OVERRIDE=410 添加到您的 启动选项。
2K 游戏在 XFS 分区上无法运行
如果您在 XFS 分区上运行 2K 游戏(如 Civilization 5),由于游戏在启动时加载文件的方式,游戏可能无法正常启动或运行。[10]
Steam 控制器未正确检测到
Steam 控制器导致游戏崩溃
请参阅 Gamepad#Steam Controller 导致游戏崩溃或未被识别。
Steam 在“正在安装 breakpad 异常处理程序...”时挂起
您拥有 NVIDIA GPU 并且 Steam 有以下输出
Running Steam on arch rolling 64-bit STEAM_RUNTIME is enabled automatically Installing breakpad exception handler for appid(steam)/version(0_client)
然后什么也没发生。请确保您已安装正确的驱动程序及其 32 位版本(64 位和 32 位变体必须是相同的版本):请参阅 NVIDIA#Installation。
启动游戏时杀死独立合成器
使用 %command% 开关,您可以杀死独立合成器(如 Xcompmgr 或 picom)——这些合成器可能会在某些系统上导致某些游戏的延迟和撕裂——并在游戏结束后重新启动它们,方法是在游戏的启动选项中添加以下内容。
killall compositor && %command%; nohup compositor &
当然,您也可以向 %command% 或 compositor 添加 -options。
Steam 将会附加在 %command% 之后启动的任何进程,并且您的 Steam 状态将显示为游戏中。因此,在本例中,我们通过 nohup 运行合成器,以便它不与 Steam 关联(当您关闭 Steam 时它会继续运行),然后后面跟一个 ampersand (&),以便命令行的结尾不会影响您的 Steam 状态。
如果您的合成器支持以守护进程模式运行,您可以使用它。例如,picom(1) 具有 --daemon / -b 选项来守护进程化其进程。
killall picom && %command%; picom -b
使用 DRI3 时出现符号查找错误
Steam 输出此错误并退出。
symbol lookup error: /usr/lib/libxcb-dri3.so.0: undefined symbol: xcb_send_request_with_fds
作为解决方法,请使用 LIBGL_DRI3_DISABLE=1 运行 Steam,禁用 Steam 的 DRI3。
在 NVIDIA Optimus 笔记本上启动游戏
要在 Optimus 启用的笔记本上玩需要使用 NVIDIA GPU 的游戏(例如,Hitman 2016),您应该在启动选项中使用 primusrun 前缀启动游戏。否则,游戏将无法工作。
右键点击 Steam 库中的游戏,然后选择属性>通用>启动选项。将选项更改为
primusrun %command%
以前使用 primusrun 运行 Steam 可以工作。然而,Steam 已经改变了一些行为,导致现在使用 primusrun 运行 Steam 对启动游戏无效。因此,您需要为每个游戏设置启动选项(您不需要使用 primusrun 运行 Steam)。
对于 primusrun,VSYNC 默认启用,这可能导致鼠标输入延迟,略微降低性能,并且游戏内 FPS 可能被锁定在显示器/显示器的刷新速率。为了禁用 VSYNC,primusrun 的默认值 vblank_mode 需要被环境变量覆盖。
vblank_mode=0 primusrun %command%
optirun 也一样,它使用 primus 作为桥梁。
vblank_mode=0 optirun -b primus %command%
如果那不起作用,请尝试
LD_PRELOAD="libpthread.so.0 libGL.so.1" __GL_THREADED_OPTIMIZATIONS=1 optirun %command%
有关更多详细信息,请参阅 Bumblebee#Primusrun 鼠标延迟(禁用 VSYNC)。
HiDPI
HiDPI 支持应该开箱即用,尽管在某些系统上,有必要通过设置 -forcedesktopscaling factor 命令行选项或 STEAM_FORCE_DESKTOPUI_SCALING 环境变量来强制设置所需的缩放因子。
KDE Plasma 下的协议支持
如果您在通过 Web 浏览器运行游戏(或通过 xdg-open 执行链接)后收到错误消息
Error — KIOExec File not found: steam://run/440
转到系统设置 -> 应用程序 -> 文件关联,添加新项,选择 inode 组并将其命名为 vnd.kde.service.steam,然后在“应用程序偏好顺序”下添加 Steam。应用更改,现在应该可以正常工作了。
使用 Steam Linux Runtime - Soldier 时游戏崩溃
自 Proton 5.13 起,Steam 默认使用 Steam Linux Runtime - Soldier。某些游戏在使用它时会崩溃。
要绕过它,您可以
- 手动 构建 一个不包含 Steam Runtime 的 proton。
- 替换 Soldier 入口点脚本
~/.steam/steam/steamapps/common/SteamLinuxRuntime_soldier/_v2-entry-point
#!/bin/bash
shift 2
exec "${@}"
Proton 5.13+ 运行的游戏没有互联网连接
如果您使用 systemd-resolved 作为您的 DNS 解析器,请确保已按照 systemd-resolved#DNS 中的说明创建了 resolv.conf 符号链接。
该文件应包含类似以下内容:
/etc/resolv.conf
# This is /run/systemd/resolve/stub-resolv.conf managed by man:systemd-resolved(8). # Do not edit.
“无法确定 java 的 32/64 位”
遗忘安装 linux-steam-integrationAUR 包导致了至少一个游戏的此问题。早期,系统和 Steam 运行时版本的某些库之间存在冲突,该包有助于解决其中一些问题。目前尚不清楚它是否仍然有用,但卸载它解决了 Project Zomboid 的上述错误消息。解决方案是在运行 projectzomboid.sh 命令从命令行运行时,通过将启动选项更改为 sh -xc 'echo %command%; declare -p' 来发现的,该选项显示 Steam 正在尝试运行相同的命令,但在 preload 和 path 中插入了许多 lsi- 前缀的库。
Vulkan 时的卡顿
如果您注意到每 1-2 秒出现一次持续的剧烈卡顿,可能是您的 vsync 设置存在冲突。手动配置 vsync 参数可能会解决此问题。
转到游戏属性并在启动选项中进行配置
DXVK_FRAME_RATE=60 %command%
强制 OpenGL 仿真
某些游戏,尤其是旧游戏,可能无法与 Proton 使用的默认 Vulkan (DXVK) 包装器配合使用。尝试使用 WineD3D OpenGL 包装器代替运行应用程序。
PROTON_USE_WINED3D=1 %command%
文件选择器除了 Steam 库什么都看不到
请参阅 FS#78625。您需要安装 xdg-desktop-portal。
混合显卡上的 DirectX 错误
对于遇到以下错误的 Intel/NVIDIA 混合显卡的笔记本电脑
A d3d11-compatible gpu (feature level 11.0, shader model 5.0) is required to run the engine.
这很可能是因为您的游戏正在使用 iGPU 而不是独立 GPU,您需要配置 PRIME。如果仍然无效,请尝试使用 Direct3D 而非 DXVK。
下载时无互联网连接
如果您在下载游戏时看到“无互联网连接”,可能的解决方案是清除下载缓存(Steam > 设置 > 下载 > 清除下载缓存)。
启动 Steam 后性能低下或卡顿
如果您在启动 Steam 后经历性能下降或卡顿,持续时间从几秒钟到几分钟不等,这可能是由有 bug 或过时的 Proton 安装引起的。
删除 ID 为 0 的应用程序下安装的 bugged Proton:~/.steam/root/steamapps/compatdata/0。您可能还需要删除过时且有问题的 Proton 版本,包括自定义版本(如 GE-Proton),尤其是 5.21-GE-1。
有关更多详细信息,请参阅 steam-for-linux#8114。
启动时间非常长且用户界面响应缓慢
Steam 在其 Chromium 后端中使用 steamloopback.host 来引用自身。由于 systemd-resolvd 尝试解析此主机的方式(默认情况下对某些用户通过 mdns),此问题可能会导致界面挂起。这会导致启动时间非常长(如果它 ever 启动)并且用户界面响应缓慢(或根本不响应)。通过编辑 /etc/nsswitch.conf 将 mdns 更改为 mdns_minimal 并重启 systemd-resolvd,可以暂时解决此问题。有关更多详细信息,请参阅 [11]。
参见
- 多媒体和游戏 / Arch Linux 论坛
- ValveSoftware/steam-for-linux – Steam for Linux 客户端问题跟踪
- Steam 社区游戏讨论
- Steam 支持 FAQ