跳转至内容

Steam

来自 ArchWiki
(重定向自 Proton)

Steam 是 Valve 公司一款流行的游戏分发平台。

注意 Linux 版 Steam 仅支持最新的 Ubuntu 或 Ubuntu LTS。 [1][2] 因此,不要就 Steam 在 Arch Linux 上的问题向 Valve 寻求支持。

安装

启用 multilib 仓库并 安装 steam 包(推荐),或者选择安装 steam-native-runtimeAUR 包,以便使用原生系统库运行 Steam。参见 /故障排除#Steam 运行时

注意 如果是首次安装,可能会提示安装 32 位 Vulkan 驱动程序包。默认情况下,pacman 会按字母顺序选择 lib32-nvidia-utils,但如果您为不同 GPU 厂商意外安装了该驱动,可能会导致完全无法使用 Vulkan 等问题。

要运行 Steam

SteamCMD

安装 steamcmdAUR 以获取 Steam 的命令行版本

目录结构

Steam 的默认安装位置是 ~/.local/share/Steam。如果 Steam 找不到它,它会提示您重新安装或选择新位置。本文档使用 ~/.steam/root 符号链接来指代安装位置。

库文件夹

每个 Steam 游戏都有一个唯一的 AppID,您可以通过查看其 Steam 商店页面路径或访问 SteamDB 来找到它。

Steam 将游戏安装在 LIBRARY/steamapps/common/ 目录下的一个文件夹中。 LIBRARY 通常是 ~/.steam/root,但您也可以拥有多个库文件夹(Steam > 设置 > 存储 > (+) 添加驱动器)。

为了让 Steam 识别游戏,它需要在 LIBRARY/steamapps/ 目录下有一个 appmanifest_AppId.acf 文件。appmanifest 文件使用 KeyValues 格式,其 installdir 属性决定了游戏目录的名称。

注意 要向通过 Flathub 安装的 Steam 添加额外驱动器,用户必须首先通过 flatseal 等工具手动授权 Steam 客户端访问额外驱动器的挂载点。

用法

steam [ -options ] [ steam:// URL ]

有关可用的命令行选项,请参见 Valve Developer Wiki 上的 命令行选项文章

Steam 还接受可选的 Steam URL,请参见 Steam 浏览器协议

启动选项

当您启动 Steam 游戏时,Steam 会使用 /bin/sh 执行其启动命令。为了让您修改启动命令,Steam 提供了启动选项,您可以通过在库中右键单击游戏,选择“属性”并点击设置启动选项来为游戏设置。

默认情况下,Steam 只是将您的选项字符串附加到启动命令中。要设置环境变量或将启动命令作为参数传递给另一个命令,您可以使用 %command% 替换。

示例

  • 仅参数: -foo
  • 环境变量: FOO=bar BAZ=bar %command% -baz
  • 完全不同的命令: othercommand # %command%

技巧与提示

最小化启动

可以使 Steam 最小化到系统托盘启动,而不是获得焦点。将 -silent 添加到命令行参数列表中;有关如何默认执行此操作,请参阅 桌面条目#修改桌面文件

小型模式

Steam 支持一个替代的、极简的 UI,只显示您的游戏列表——商店、社区和封面收藏视图都会隐藏。您可以通过查看 > 小型模式切换到它。要返回标准 UI,请选择查看 > 大型模式

您也可以使用此参数启动 Steam:+open steam://open/minigameslist

Proton Steam-Play

Valve 开发了一个基于 Wine 和其他组件的 Steam Play 兼容性工具,名为 Proton。它允许您运行许多 Windows 游戏(请参见 兼容性列表)。

它是开源的,可在 GitHub 上找到。当启用 Steam Play 时,Steam 会安装其自身的 Proton 版本。

“Proton Experimental”默认在 Steam 客户端中启用:Steam > 设置 > 兼容性。您可以在该对话框中为 Valve 已批准和未批准的游戏启用 Steam Play。

Proton 支持简易反作弊集成,前提是开发者激活它。但是,EAC 可能需要特定 补丁版本 的 glibc:如果某个游戏报告运行正常但在您的机器上却不行,请尝试使用 Steam Flatpak,因为它自带已修补的 glibc。此外,将 procfs 挂载选项 hidepid 设置为更严格的值可能会导致简易反作弊失败,并显示消息“启动错误:261”。

强制使用 Proton

如果需要,要强制为某个游戏启用 Proton 或特定版本的 Proton,请右键单击游戏,选择属性 > 兼容性 > 强制使用特定的 Steam Play 兼容工具,然后选择所需的版本。这样做也可以用于强制使用 Linux 端口的游戏使用 Windows 版本。

在 Steam 外使用 Proton

您可以 安装 proton-cachyosAUR,但需要额外的设置才能与 Steam 一起使用。有关 Steam 如何识别 Proton 安装的详细信息,请参见 Proton GitHub

Steam 输入

当控制器插入 Steam 运行时,Steam 的默认行为是将其置之不理,让游戏按原样使用它。内核会暴露游戏手柄的 evdev 和 joystick 设备,游戏可以使用像 SDL2 这样的 API 来使用它们,就好像 Steam 不存在一样。

Steam 输入子系统提供了一个抽象层,允许更高级的功能,例如重新映射按钮和轴,拥有游戏特定的配置文件,以及基于游戏内操作的高级按钮映射。Steam 输入配置器(SIC)是实现此功能的系统部分。要为控制器启用 Steam 输入,请前往Steam > 设置 > 控制器 > 外部游戏手柄设置。在此处您会找到对应于您的控制器的启用 Steam 输入的开关。

Steam 输入配置器

本文档或部分内容可能被移至 Steam 输入配置器

说明:如果内容可以独立成文,就没有理由将其保留在此篇幅巨大的文章中(在 Talk:Steam 中讨论)

有关配置器使用说明,请参见 Steam 输入配置器

当为控制器启用 SIC 时,有几种不同的控制器设备

  • 虚拟 Steam 控制器,供使用 Steam 输入 API 的游戏使用。所有重新映射和 Steam 特有功能均可正常工作。
  • 一个模拟 Xbox 360 控制器的 evdev 设备,供不支持 Steam 输入的游戏使用。基本重新映射生效。 [3]
  • 原始控制器 evdev 设备,其输入通过 SIC 传递。重新映射不生效,但游戏应默认使用 360 控制器。
  • 上述两个设备的 joystick 模拟。

SIC 的行为取决于上下文

  • 启动支持 Steam 输入 API 的游戏时,它以原生模式使用 SIC。游戏接收“操作”(actions)而不是原始输入进行处理。
    • 这适用于在 Proton 中运行的游戏,这些游戏在 Windows 上会使用 Steam 输入。
    • 即使理论上不需要,模拟的 360 控制器仍然存在。
    • 游戏可以选择同时支持 Steam 输入和其他传统输入 API 库,后者通过 evdev 和 joystick 在后台进行处理。当游戏在 Steam 中启动且控制器启用了 SIC 时,Steam 输入具有更高的优先级。
    • 游戏也可以选择支持 Steam 输入。例如,在《Among Us》中,如果您没有运行 SIC,游戏手柄将无法工作。
  • 启动不支持 Steam 输入的游戏时,它(不知不觉地)以旧模式使用 SIC。游戏从看似 360 控制器的设备接收预期的低级原始输入,但这些输入实际上是由 SIC 伪造的,以模拟原生模式所需的行为。
    • 这适用于使用 evdev 或 joystick 的原生游戏,以及通过 Proton 运行的、使用 DirectInput 或 XInput 的 Windows 游戏。
  • 启动不支持 Steam 输入或其他游戏手柄 API 的游戏时,SIC 可以激活一个配置文件来模拟如下所述的游戏手柄支持。
  • 当大屏幕模式具有焦点时,当前的大屏幕模式配置文件生效。此设置不可配置。
  • 当其他任何内容具有焦点时,当前桌面配置文件生效,可通过Steam > 设置 > 控制器 > 桌面布局进行配置。
  • 当任何内容具有焦点时,可通过Steam > 设置 > 控制器 > Guide 按钮组合布局配置其他全局绑定。Steam Deck 上不提供此功能。

游戏根据其对游戏手柄的全面支持程度进行评级。这取决于控制器型号。

  • 支持您的控制器,表示游戏具有完整的控制器支持。即使游戏不使用 Steam 输入 API,也可以实现这一点;重点在于可访问性,无论使用何种 API。
  • 基本可与您的控制器游玩,表示游戏具有部分游戏手柄支持。即使游戏正在使用 Steam 输入 API,也存在像《Team Fortress 2》那样某些部分仍然无法访问的情况,因此需要此评级。
  • 不支持控制器,表示游戏没有原生游戏手柄支持。
  • 未知控制器支持,表示 Valve 尚未验证游戏的控制器支持。


在游戏没有完整游戏手柄支持的情况下,SIC 会尝试填补空白。例如,在《Bloons Tower Defense 5》中,一个需要您指向和点击的游戏,Steam 会自动激活键盘(WASD)和鼠标配置文件,允许您使用游戏手柄进行移动和点击。

总结一下这对使用意味着什么

  • 启用“配置支持”推荐用于增强游戏手柄支持,例如自定义按键绑定,或自动修复,如 Nintendo 风格的按键重映射或键盘/鼠标。
  • 对于某些游戏,如果它们不支持传统游戏手柄 API,启用此项是绝对必需的。
  • 默认情况下,如果您启用了此项,那么控制器将无法与非 Steam 游戏一起使用,因为 360 控制器优先于原始控制器设备,但默认的桌面配置文件中的按钮是禁用的。要解决此问题,您可以
    • 让配置更改动作集。一些官方的桌面配置会在按下开始按钮时切换到游戏手柄模式。如果您的控制器配置没有这个功能,您可以添加一个动作集到配置中,将该集合设置为包含游戏手柄按钮,为开始按钮添加一个额外命令,将额外命令设置为更改动作集,然后将其设置为长按激活。
    • 将您的桌面配置文件设置为游戏手柄模板。这将把输入传递给 360 控制器,使默认设备可供其他程序使用。
    • 让其他游戏使用原始设备(如果它支持)。请注意,游戏将不会受益于任何 Steam 输入重新绑定。
    • 为控制器禁用整个功能,这样 Steam 就不会创建 360 控制器。请注意,Steam 游戏将不会受益于增强的游戏手柄支持。
    • 使用其他游戏时关闭 Steam。

禁用 Steam 输入

如果您想完全禁用 Steam 输入,请使用 -nojoy 参数启动 Steam,并且也要单独为每个游戏禁用 Steam 输入,因为没有全局选项可以做到这一点。


HiDPI

参见 HiDPI#Steam

从显示管理器启动大屏幕模式

要从显示管理器使用 Gamescope 作为其 合成器 来启动 Steam 大屏幕模式

/usr/share/wayland-sessions/steam-big-picture.desktop
[Desktop Entry]
Name=Steam Big Picture Mode
Comment=Start Steam in Big Picture Mode
Exec=/usr/bin/gamescope -e -- /usr/bin/steam -tenfoot
Type=Application
注意 -tenfoot 标志告诉 Steam 以大屏幕模式启动。

然后指示您的显示管理器启动 gamescope。

警告 “切换到桌面”菜单项会软锁定会话。要退出到显示管理器,您需要在终端中运行 steam -shutdown。您也可以创建一个包含此命令的脚本,并将其添加为非 Steam 游戏。这会创建一个退出回显示管理器的“快捷方式”。

Steam 主题

注意 Steam 于 2023 年 6 月发布了新的 UI。未更新到此新 UI 的主题将无效。

Steam 界面可以使用主题进行自定义。请遵循 此 Steam 指南了解更多信息。

一些为 2023 年 UI 更新的主题包括:

更改 Steam 通知位置

Steam 的默认通知位置是右下角。

您可以修改 Notifications.PanelPosition 来更改 Steam 通知的位置

  • resource/styles/steam.styles 用于桌面通知,以及
  • resource/styles/gameoverlay.styles 用于游戏内通知

这两个文件会在 Steam 启动时被覆盖,而 steam.styles 只在启动时读取。

注意 某些游戏不遵循 gameoverlay.styles 中的设置,例如 XCOM: Enemy Unknown。

使用主题

您可以创建一个主题来根据需要更改通知位置。例如,将位置更改为右上角

$ cd ~/.steam/root/skins
$ mkdir -p Top-Right/resource
$ cp -r ~/.steam/root/resource/styles Top-Right/resource
$ sed -i '/Notifications.PanelPosition/ s/"[A-Za-z]*"/"TopRight"/' Top-Right/resource/styles/*

实时修补

gameoverlay.styles 可以在 Steam 运行时被覆盖,允许您设置游戏特定的通知位置。

~/.steam/notifpos.sh
sed -i "/Notifications.PanelPosition/ s/\"[A-Za-z]*\"/\"$1\"/" ~/.steam/root/resource/styles/gameoverlay.styles

#启动选项 应为

~/.steam/notifpos.sh TopLeft && %command%

Steam 远程畅玩

注意 Steam In-Home Streaming 已成为 Steam 远程畅玩

Steam 内置支持 远程畅玩

参见 此 Steam 社区指南,了解如何在 Linux 上设置无头流媒体服务器。

使用 Proton 时与 Windows 共享游戏

如果您使用 Proton(Steam Play)来运行您的游戏,但出于某些原因仍保留 Windows 安装(例如,某些游戏存在反作弊问题,或者您想与 Windows 进行比较测试),您可能希望将游戏存储在公共分区中,而不是为每个操作系统保留两份游戏副本。

要添加另一个库文件夹,请点击Steam > 设置 > 下载 > STEAM 库文件夹,然后点击⊕ (加号) 按钮。

有四种文件系统可以被 Windows 和 Linux 读写。

NTFS

警告 Valve 不鼓励使用 NTFS 来存储 Steam 库,因为它可能导致意外错误,特别是当库在多个操作系统之间共享时。您*肯定*会遇到游戏无法启动的问题。您*肯定*会遇到游戏意外崩溃的问题。

有关如何配置 NTFS 的更多信息,请参见 使用 Linux 和 Windows 的 NTFS 磁盘。要从 NTFS 驱动器启动游戏,请按照 Steam/故障排除#NTFS 分区中的 Steam 库中的步骤操作。

使用 NTFS 有缺点。着色器缓存文件夹经常会损坏。会收到消息 ntfs3: sdb6 ino=1921f, steamapprun_pipeline_cache 看起来你的目录已损坏。 您无法从 Linux 修复此问题。您需要启动到 Windows 并使用 chkdsk 进行修复。

exFAT

此文件系统有一个缺点,它不区分大小写。您会收到类似的消息:SteamLibrary 同时包含 'SteamApps' 和 'steamapps' 目录。这将导致问题。请手动修复并仅保留 'steamapps' 参见 issue #7665

此外,在 exfat 上创建符号链接很麻烦,因此您无法使用 NTFS 方法中的符号链接 compatdata 的方法。

Btrfs

Btrfs 有一个相当成熟的 Windows 驱动程序

NTFS 也可以转换为 Btrfs,参见 Btrfs#NTFS 到 Btrfs 转换

此文件系统消除了大多数 NTFS/exFAT 兼容性问题,但在 Windows 和 Linux 之间共享 Steam 库存在局限性

Valve 官方不鼓励在操作系统之间共享 Steam 库。即使正确配置了 WinBtrfs 的 UID/GID 映射,Windows 进程也会创建属于 nobody:100 的锁定文件和暂存文件夹,导致 Linux 出现“磁盘写入失败”或“内容文件被锁定”的错误。

使用 Windows 后,您必须运行

# chown -R $USER:$USER /path/to/steam_library/steamapps
$ find /path/to/steam_library/steamapps -name "*.lock" -delete
$ rm -rf /path/to/steam_library/steamapps/{downloading,temp}/*

在此之后才能在 Linux 上启动 Steam。为了可靠运行,请为每个操作系统保持单独的库。

UDF

此文件系统可以无问题地使用,但要确保兼容性,必须将其格式化为正确的 UDF 版本。Linux 缺乏对版本 2.50 及更高版本的写入支持。因此,需要版本 2.01 才能正常工作。

UDF 块大小必须与分区的逻辑扇区大小匹配。可以使用 blockdev(8) 获取此值。

# blockdev --getss /dev/the_partition_to_be_formatted

然后使用 mkfs.udf(8)(由 udftools 提供)将分区格式化为 UDF。对于 HDD 和 SSD,适当的媒体类型是 hd

# mkfs.udf --utf8 --label=label --blocksize=block-size --media-type=hd --udfrev=0x0201 /dev/the_partition_to_be_formatted

其中:

  • 要格式化的分区 是目标分区的名称(例如 sdb4nvme2n5p3 等)。
  • 标签 是所需的卷标。
  • 块大小blockdev 命令的输出。

或者,可以使用 gparted 等图形工具来处理格式化。它们能正确管理 UDF 版本选择,以确保兼容性。

更快的着色器预编译

在某些情况下,着色器预编译可能只使用一个核心,但用户可以覆盖此设置,例如使用 8 个核心

~/.steam/steam/steam_dev.cfg
unShaderBackgroundProcessingThreads 8

Proton 以外的兼容层

除了 Proton/Wine 之外,还有其他兼容工具。

  • Luxtorpeda — 使用原生 Linux 引擎运行游戏。
https://luxtorpeda-dev.github.io/ || luxtorpeda-gitAUR
  • Boxtron — 使用原生 Linux DosBox 运行 DOS 游戏
https://github.com/dreamer/boxtron || boxtronAUR

您还可以使用 protonup-qtAUR 来管理它们

  1. 关闭 Steam
  2. 安装 protonup-qtAUR
  3. 打开 protonup-qt 并安装所需的工具
  4. 启动 Steam
  5. 游戏属性窗口中,选择强制使用特定的 Steam Play 兼容工具并选择所需的工具。

禁用 HTTP2 以加快下载速度

某些系统和配置似乎在 HTTP2 方面存在问题。禁用 HTTP2 可能会在这些配置中提供更快的下载速度。您可以使用控制台命令 @nClientDownloadEnableHTTP2PlatformLinux 0,或者在 steam_dev.cfg 中进行设置,如下所示

~/.steam/steam/steam_dev.cfg
@nClientDownloadEnableHTTP2PlatformLinux 0

运行游戏使用独立显卡

混合显卡笔记本电脑上,Steam 默认使用集成显卡运行游戏。请参见 PRIME#PRIME GPU offloading 来为特定游戏切换到更强大的独立显卡。

Flatpak

本文或本节正考虑移除。

原因:不支持 Flatpak。有关移除的先例,请参见 Special:Diff/806019。也可以考虑将其移至 Flatpak 的新应用程序部分。(在 Talk:Steam 中讨论)
注意 从 Flathub/Flatpak 安装 Steam 可以解决客户端遇到的许多问题,但从长远来看,它将需要另类的、文档较少的故障排除方法。

Steam 也可以通过 Flatpakcom.valvesoftware.Steam 的形式从 Flathub 安装。为当前用户安装它的最简单方法是使用 Flathub 仓库

$ flatpak --user remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
$ flatpak --user install flathub com.valvesoftware.Steam
$ flatpak run com.valvesoftware.Steam

Flatpak 应用程序目前不支持主题。此外,您目前无法通过 optirun/primusrun 运行游戏,有关更多详细信息,请参见 Issue#869

通过 Flatpak 安装的 Steam 无法访问您的主目录,覆盖此限制将导致 Steam 无法运行,因为它不安全。但是,您可以自由添加主目录之外的目录。如果您想添加一个外部库,请运行以下命令进行添加

$ flatpak override --user com.valvesoftware.Steam --filesystem=/path/to/directory

使用 Flatpak 启动 Steam 可能会警告您安装 steam-devices 包。此包目前不存在,但可以安装 game-devices-udevAUR 来代替,参见 游戏手柄#设备权限

Flatpak 的亚洲字体问题

如果您在游戏中无法正确显示亚洲字体,是因为 org.freedesktop.Platform 不包含它们。首先尝试挂载您的本地字体 

$ flatpak run --filesystem=~/.local/share/fonts --filesystem=~/.config/fontconfig com.valvesoftware.Steam

如果那不起作用,可以考虑这个变通方法:通过直接将字体文件复制到 org.freedesktop.Platform 的目录中来使字体可用,例如

/var/lib/flatpak/runtime/org.freedesktop.Platform/x86_64/version/hash/files/etc/fonts/conf.avail
/var/lib/flatpak/runtime/org.freedesktop.Platform/x86_64/version/hash/files/etc/fonts/conf.d 
/var/lib/flatpak/runtime/org.freedesktop.Platform/x86_64/version/hash/files/share/fonts

Steam Flatpak 启动(运行)问题

启动后,Steam 会尝试下载文件,您会看到一个进度条。如果它崩溃了,您可以尝试为 flatpak 包授予额外的权限

$ flatpak permission-set background background com.valvesoftware.Steam yes
$ flatpak run com.valvesoftware.Steam

要获得控制权限的替代方法,请安装 flatseal

减少显卡内存占用的 Steam 设置

这对于显存较小的显卡很有用。

制作 Steam 快捷方式的副本

$ cp /usr/share/applications/steam.desktop ~/.local/share/applications/steam_minimal.desktop

并在快捷方式副本中修改 Exec=Name= 部分

~/.local/share/applications/steam_minimal.desktop
Name=Steam Minimal (Runtime)
Exec=/usr/bin/steam -cef-disable-gpu-compositing -cef-disable-gpu steam://open/minigameslist %U

因此,当启动 Steam Minimal (Runtime) 快捷方式时,您将获得一个极简界面,该界面仍然足以安装和运行游戏;而当启动标准的 Steam (Runtime) 快捷方式时,您将获得一个功能齐全的客户端。

故障排除

请参阅 Steam/Troubleshooting

参见