Gamescope

来自 ArchWiki

Gamescope 是 Valve 的一个 微合成器,用于 Steam Deck。它的目标是提供一个专为游戏定制的隔离合成器,并支持许多以游戏为中心的功能,例如

  • 欺骗分辨率。
  • 使用 AMD FidelityFX™ Super Resolution 或 NVIDIA Image Scaling 进行放大。
  • 限制帧率。

作为一个微合成器,它被设计为在你现有的桌面环境之上作为嵌套会话运行,尽管也可以将其用作嵌入式合成器。

安装

Gamescope 可以通过 gamescope 软件包(或 gamescope-gitAUR 软件包)安装。此外,还有 gamescope-plusAUR,其中包含主线版本中没有的额外补丁。

要求

  • AMD:Mesa 20.3 或更高版本
  • Intel:Mesa 21.2 或更高版本
  • NVIDIA:专有驱动程序 515.43.04 或更高版本,以及 nvidia-drm.modeset=1 内核参数

用法

Gamescope 提供了许多选项,此处无法全部涵盖。如需完整列表,请从终端使用 gamescope --help 命令。

从显示管理器启动

请参阅 Steam#从显示管理器启动 Big Picture 模式

从桌面会话启动

以下命令将使用 Gamescope 运行 supertuxkart,并强制使用 1920x1080 分辨率,60 FPS

$ gamescope -W 1920 -H 1080 -r 60 -- supertuxkart

从 Steam 启动

你可以通过将以下内容添加到游戏的启动选项中,从 Steam 使用 Gamescope 运行游戏

gamescope -- %command%
注意: 从 Steam 启动时,仍然需要设置分辨率、FPS 等标志,否则 Gamescope 将以错误的分辨率启动。你可以像从终端一样执行此操作,例如
gamescope -W 1920 -H 1080 -r 60 -- %command%

从 Wine 启动

要通过 Wine 使用 Gamescope 运行程序,只需附加 wine,后跟可执行文件。

$ gamescope -W 1920 -H 1080 -r 60 -- wine supertuxkart

几乎所有流行的 Wine 管理器,如 LutrisBottlesPlayOnLinux 都支持 Gamescope。使用它们非常简单,只需安装所需的 Gamescope 软件包并选中使用 Gamescope(或类似)选项。

注意: Wine 管理器通常也具有图形界面来配置基本的 Gamescope 选项,这使它们通常成为使用 Gamescope 最简单的方式。

从 Flatpak 启动

你也可以像从软件包安装一样,从 Wine 管理器和 SteamFlatpak 版本中使用 Gamescope。但这确实需要你首先使用以下命令从 Flathub 安装 Gamescope

$ flatpak install gamescope

放大

-F fsr-F nis 标志可用于分别使用 AMD FidelityFX™ Super Resolution 1.0 (FSR) 或 NVIDIA Image Scaling v1.0.3 (NIS) 放大游戏。你也可以使用 -S integer 进行整数放大,或使用 -S stretch 进行拉伸缩放。

要使用 FSR 将 720p 游戏放大到 1440p

$ gamescope -h 720 -H 1440 -F fsr -- supertuxkart

要以 1080p 内部分辨率运行游戏,但使用 NIS 以 4K 显示

$ gamescope -w 1920 -h 1080 -W 3840 -H 2160 -F nis -- supertuxkart

低分辨率游戏通常默认在全屏上使用线性过滤,有时会被拉伸。这在经典的 JRPG 中尤其明显。要获得像素化外观并保持纵横比

$ gamescope -F nearest -S fit -- tecnoballz

可以在游戏运行时更改过滤器

  • Super+n 切换最近邻过滤。
  • Super+u 切换 FSR 放大。
  • Super+y 切换 NIS 放大。
  • Super+o 将 FSR 锐度增加 1。
  • Super+i 将 FSR 锐度降低 1。

HDR 支持

Gamescope 是玩游戏时支持 HDR10 的必要条件,要使用此功能,你必须使用 --hdr-enabled 标志启动 Gamescope 会话。

注意: Linux 上的 HDR 支持仍处于起步阶段,并且存在许多注意事项。有关详细信息,请参阅 HDR 监视器支持

Wayland 支持

Gamescope 默认不支持 Wayland 客户端。要启用对 Wayland 客户端的支持,请将 --expose-wayland 标志添加到 Gamescope 的参数中。

SDR 色域宽度

SteamOS 3.5.5 以来,Valve 更改了 Steam Deck LCD 的默认颜色渲染。这种效果是通过 Gamescope 更改 SDR 内容的色域“宽度”来实现的,这可能会导致更温暖、更鲜艳的色彩外观,具体取决于调整。

在 Steam 游戏的启动选项中,只需添加 --sdr-gamut-wideness,后跟一个介于 0-1 之间的值

gamescope --sdr-gamut-wideness 1 -- %command%

Mangoapp

传统的 MangoHud 不支持与 gamescope 一起使用。相反,应使用 gamescope 参数 --mangoapp。这允许 MangoHud 在 gamescope 之上而不是在底层应用程序之上运行。某些 MangoHud 配置,例如显示 FSR 或 HDR 状态,需要将 mangoapp 与 gamescope 一起使用才能工作。

可变刷新率

如果你的显示器支持可变刷新率,请通过传递 --adaptive-sync 标志来启用它。

故障排除

光标行为异常

如果光标未被应用程序捕获,例如限制了你的相机移动或未在菜单外正确消失,请使用 --force-grab-cursor 选项。一些 proton/wine 游戏需要此解决方法。

切换到全屏导致低性能

这是使用 Gamescope 全屏热键 Meta+f 时的已知错误,如果你遇到此问题,可以通过在启动游戏时使用全屏标志 -f 来解决。

设置 Gamescope 的优先级

导致低性能和/或卡顿的另一个已知原因是 Gamescope 的优先级设置不正确。如果 Gamescope 运行时你在终端中看到如下错误,则可以判断是这种情况

No CAP_SYS_NICE, falling back to regular-priority compute and threads.
Performance will be affected.

以下命令将修复此问题

# setcap 'CAP_SYS_NICE=eip' $(which gamescope)
警告: 使用此命令将导致某些 vulkan 环境变量被忽略:例如,如果你通过设置 MESA_VK_DEVICE_SELECT 来指定 Gamescope 要使用的 GPU。请参阅 此处。你可以使用 ananicy-gitAUR 或类似工具来绕过此限制。


在 NVIDIA 上 Flatpak 中窗口不出现

这是因为 Flatpak Gamescope 无法访问 NVIDIA DRM 的 GBM 后端。只需使用以下命令设置环境变量即可解决此问题

$ flatpak override --env=GBM_BACKENDS_PATH=/usr/lib/x86_64-linux-gnu/GL/nvidia-XXX-YY-ZZ/extra/gbm packageid

其中 packageid 是 Gamescope 你想要与 Gamescope 一起使用的应用程序(例如 Bottles)的 Flatpak 软件包标识符。将 nvidia-XXX-YY-ZZ 替换为当前安装的 NVIDIA 驱动程序版本;在 Flatpak 内部,可以使用以下命令查询

$ flatpak run --command=ls packageid /usr/lib/x86_64-linux-gnu/GL

其中 packageid 是任何 Flatpak 软件包标识符;请注意,该目录仅存在于 Flatpak 内部。

注意

此条目或章节需要扩充。

原因: 此步骤可能可以通过 pacman 钩子 自动化。(在 Talk:Gamescope 中讨论)

必须在每次驱动程序更新时重新运行并相应修改该命令。

Intel 显卡上的图像损坏

如果 gamescope 在 Intel 显卡上输出损坏的图像颜色,禁用无损颜色压缩可以作为一种解决方法,但会增加内存带宽利用率。[1] 要禁用它,请传递 INTEL_DEBUG=noccs 环境变量

启用 HDR 时 VRR 卡顿

如果 VRR 和 HDR 可以独立工作,但当它们都启用时帧率不稳定,那么你可能遇到了 HDR 合成时间过长的问题。请参阅 https://github.com/ValveSoftware/gamescope/issues/1006。这仅适用于在嵌入式模式下使用 Gamescope,而不适用于在现有 wayland 或 X 会话中使用 gamescope。

当使用 AMD 显卡时,可以通过使用实验性 AMD 色彩管理来修复此问题,该管理使用硬件平面来合成最终图像。这需要以下两种设置之一

Steam Deck 内核

启用实验性 AMD 色彩管理的 Linux 内核

Linux 6.8 或更新版本,使用 KCFLAGS 编译,包括 -DAMD_PRIVATE_COLOR,例如 linux-amd-colorAUR

高轮询率鼠标导致卡顿

在游戏窗口中移动高轮询率鼠标(观察到 4000Hz)可能会导致卡顿或暂时冻结 [2]。将轮询率设置为较低的值,如 1000Hz,应该可以解决此问题。

在 Wayland 下较旧的 AMD GPU 上崩溃

Gamescope 3.14.3 引入了 Wayland 后端,以提高在 Wayland 会话下的性能。但是,它目前在较旧的 AMD GPU 上不起作用。跟踪上游的 issue #1218

Gamescope 启动时崩溃,并显示类似如下内容

gamescope: types/wlr_linux_dmabuf_v1.c:526: feedback_compile: Assertion `table_len > 0' failed.

你可以通过强制使用经典 SDL2 后端来解决此问题,通过 --backend 选项

$ gamescope --backend sdl -- game


交换链错误

交换链错误的常见原因是错误地尝试使用 mangohud 而不是 mangoapp。请参阅上面的 #用法 的 Mangoapp 章节。

从 Steam 启动 gamescope,约 24 分钟后卡顿

如果在从 Steam 启动 gamescope 后,你遇到大约 24 分钟后开始出现严重卡顿的情况,那么你可以通过启用 steam 覆盖 -e 选项或通过使用不同的值覆盖环境变量 LD_PRELOAD 来解决此问题。例如

$ LD_PRELOAD="" gamescope -- %command%

请参阅 issue #163

参见