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(): invalid pointerfree(): invalid pointer
在这种情况下,尝试将出问题的游戏的 libsteam_api.so 文件替换为可以正常工作的游戏的 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 的组合,已知 会在 Xorg 下冻结一些游戏 使用 DXVK/Vulkan 于启动时。使用 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。
游戏启动但使用自定义内核后立即关闭
确保您已在“常规设置 -> 名称空间支持”中启用了用户名称空间。
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 在使用 HiDPI 缩放的合成器下作为 Xwayland 客户端运行时,您可能会发现 Steam 和游戏以半分辨率渲染,然后放大以适应 HiDPI 屏幕。这会导致图形模糊。
一种选择是在嵌套的 gamescope 合成器下运行 Steam。安装 gamescope 包
$ gamescope -f -m 1 -e -- steam -gamepadui
这将以全屏方式运行 Steam(实际上是 Steam Deck 模式),无缩放(即以全分辨率)。相同的设置也应该会传播到 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 好友 UI 更新以来,右键菜单中的“加入游戏”、“邀请加入游戏”和“查看游戏信息”条目可能会丢失。
为了解决这个问题,可能需要安装 lsof。
用户界面缓慢且无响应
如果在 YaST 客户端设置的“界面”选项卡中遇到非常缓慢和迟缓的性能,禁用“在 Web 视图中启用 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”,请等待几分钟看过程是否完成,如果没有完成则取消。现在测试您是否能够观看直播,例如通过点击社区 > 直播下方的一个直播。
- 在大屏幕模式下(查看 > 大屏幕模式)启动直播。如果在 YaST 客户端中启动直播正常,请在切换回主界面后测试是否仍然正常。
- 触发 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 已启用并启动,然后创建 /etc/resolv.conf 符号链接,如 systemd-resolved#DNS 中所述。
另一种解决方案是清除 DNS,如此处所述 [6]
以 root 身份运行 resolvectl flush-caches 或 systemd-resolve --flush-caches。
Steam 远程畅玩问题
远程畅玩无法从 Arch Linux 主机到 Arch Linux 客户机工作
很可能您缺少 lib32-libcanberra。安装后,它应该可以按预期工作。
这样,Steam 在尝试通过远程畅玩启动游戏时应该不会再崩溃。
硬件解码不可用
远程畅玩硬件解码使用 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 回退到系统库。
大屏幕模式在失去焦点后会自动最小化
这可能发生在您通过远程畅玩玩游戏时,或者如果您有多显示器设置并将鼠标移出 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 行将为您提供一种 proper 的方式。
- 运行
genfstab -U /并提取包含 ntfs 分区的行,例如:UUID=12345678ABCDEF00 /run/media/user/Gamez ntfs3 rw,uid=1000,gid=1000,windows_names 0 0
- 将该行写入
/etc/fstab,编辑它以使用不带windows_names的 proper 选项。以之前的示例为例,我们将写入:UUID=12345678ABCDEF00 /run/media/user/Gamez ntfs3 rw,uid=1000,gid=1000 0 0
- 卸载分区,然后重新挂载。
或者,通过 udisks#NTFS 文件创建失败(文件名相关) 中的说明全局禁用 udisks 对 windows_names 的使用。
其他解决方法:将 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 目录以斜杠结尾时(Valve GitHub issue 3730),Steam 中的一个错误也会导致此错误消息出现。可以通过编辑 /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 分区上运行 Civilization 5 等 2K 游戏,则游戏可能无法启动或正常运行,因为游戏在启动时加载文件的方式 [10]。
Steam 控制器未正确检测到
Steam 控制器导致游戏崩溃
请参阅 Gamepad#Steam Controller causes a game to crash or not be recognized。
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 笔记本电脑上启动游戏
为了能够玩需要使用 NVIDIA GPU 的游戏(例如,Hitman 2016),您应该在启动选项中使用 primusrun 前缀启动游戏。否则,游戏将无法正常运行。
在 Steam 库中右键单击游戏,然后选择“属性 > 常规 > 启动选项”。将选项更改为
primusrun %command%
曾经使用 primusrun 运行 Steam 是有效的。虽然 Steam 更改了一些行为,导致现在使用 primusrun 运行 Steam 对启动游戏无效。因此,您需要为每个游戏设置启动选项(而且您不必使用 primusrun 运行 Steam)。
对于 primusrun,VSYNC 默认是启用的,这可能会导致鼠标输入延迟,稍微降低性能,并且游戏中的 FPS 可能会被锁定在监视器/显示器的刷新率。为了禁用 VSYNC,需要用环境变量覆盖 vblank_mode 选项的默认值。
vblank_mode=0 primusrun %command%
对于使用 primus 作为桥接器的 optirun 也是如此。
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 解析器,请确保已创建 resolv.conf 符号链接,如 systemd-resolved#DNS 中所述。
该文件应包含类似以下内容:
/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 试图运行完全相同的命令,但预加载和路径中插入了许多 lsi- 前缀的库。
Vulkan 时的卡顿
如果您注意到每 1-2 秒一次的持续剧烈卡顿,您的垂直同步设置可能存在冲突。手动配置参数中的垂直同步可能会解决此问题。
转到游戏属性并在启动选项中配置它
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。
下载时没有互联网连接
如果在下载游戏时看到“无 Internet 连接”,一个可能的解决方案是清除下载缓存(Steam > 设置 > 下载 > 清除下载缓存)。
启动 Steam 后性能下降或卡顿
如果您在启动 Steam 后体验到性能下降或卡顿,持续时间从几秒钟到几分钟不等,这可能是由损坏或过时的 Proton 安装引起的。
删除应用程序 ID 0 下安装的损坏 Proton:~/.steam/root/steamapps/compatdata/0。您可能还需要删除过时且有问题的 Proton 版本,包括自定义版本,如 GE-Proton,特别是 5.21-GE-1。
有关更多详细信息,请参阅 steam-for-linux#8114。
启动非常缓慢,用户界面响应迟钝
Steam 在其 Chromium 后端中使用 steamloopback.host 来引用自身。由于 systemd-resolvd 尝试解析此主机的方式(默认情况下对某些用户通过 mdns),此问题可能导致界面挂起。这会导致启动非常缓慢(即使它从未启动过),并且用户界面响应缓慢(或根本不响应)。通过编辑 /etc/nsswitch.conf 将 mdns 改为 mdns_minimal 并重启 systemd-resolvd,可以暂时解决此问题。有关更多详细信息,请参阅 [11]。
参见
- 多媒体和游戏 / Arch Linux 论坛
- ValveSoftware/steam-for-linux – Steam for Linux 客户端的问题跟踪
- Steam 社区关于游戏的讨论
- Steam 支持 FAQ