Gamescope
Gamescope 是 Valve 公司的一个微型合成器,用于Steam Deck。它的目标是提供一个为游戏量身定制的隔离合成器,并支持许多游戏特有的功能,例如:
- 伪造分辨率。
- 使用 AMD FidelityFX™ Super Resolution 或 NVIDIA Image Scaling 进行 upscaling。
- 限制帧率。
作为一个微型合成器,它被设计为在现有桌面环境之上运行一个嵌套会话,但也可以作为嵌入式合成器使用。
安装
Gamescope 可以使用 gamescope 包进行安装。此外,还有一个 gamescope-plusAUR,其中包含 mainline 构建中不存在的额外补丁。
需求
- AMD: Mesa 20.3 或更高版本
- Intel: Mesa 21.2 或更高版本
- NVIDIA: 专有驱动 515.43.04 或更高版本,以及
nvidia_drm.modeset=1内核参数
用法
Gamescope 提供了许多选项,这里无法一一详述。要获取完整列表,请在终端中使用 gamescope --help 命令。
从显示管理器启动
请参阅 Steam#从显示管理器启动大画面模式。
从桌面会话启动
以下命令将使用 Gamescope 运行 supertuxkart,并将分辨率强制设置为 1920x1080,帧率 60 FPS。
$ gamescope -W 1920 -H 1080 -r 60 -- supertuxkart
从 Steam 启动
您可以通过将以下内容添加到游戏的启动选项来从 Steam 运行游戏:
gamescope -- %command%
gamescope -W 1920 -H 1080 -r 60 -- %command%
从 Wine 启动
要通过 Wine 使用 Gamescope 运行程序,只需在命令末尾附加 wine 和可执行文件即可。
$ gamescope -W 1920 -H 1080 -r 60 -- wine supertuxkart.exe
几乎所有流行的 Wine 管理器,如 Lutris、Bottles 和 PlayOnLinux 都支持 Gamescope。使用它们很简单,只需安装所需的 Gamescope 包并勾选“使用 Gamescope”(或类似选项)即可。
从 Flatpak 启动
您也可以在 Wine 管理器和 Steam 的 Flatpak 版本中使用 Gamescope,方式与从包管理器安装时相同。但这就需要您先从 Flathub 安装 Gamescope,命令如下:
$ flatpak install gamescope
Upscaling (缩放)
-F fsr 和 -F nis 标志分别用于使用 AMD FidelityFX™ Super Resolution 1.0 (FSR) 或 NVIDIA Image Scaling v1.0.3 (NIS) 进行 upscaling。您也可以使用 -S integer 进行整数缩放,或 -S stretch 进行拉伸缩放。
使用 FSR 将 720p 游戏 upscaling 到 1440p
$ gamescope -h 720 -H 1440 -F fsr -- supertuxkart
以 1080p 内部分辨率运行游戏,但以 4K 显示,使用 NIS
$ gamescope -w 1920 -h 1080 -W 3840 -H 2160 -F nis -- supertuxkart
低分辨率的游戏在全屏模式下通常默认使用线性过滤,有时会被拉伸。这在经典 JRPG 中尤其明显。要获得像素化的外观并保持宽高比:
$ gamescope -F nearest -S fit -- tecnoballz
可以在游戏运行时更改滤镜
Super+n切换最近邻过滤。Super+u切换 FSR upscaling。Super+y切换 NIS upscaling。Super+o增加 FSR 锐度 1。Super+i减少 FSR 锐度 1。
HDR 支持
Gamescope 是播放 HDR10 游戏所需的,要使用此功能,您必须使用 --hdr-enabled 标志启动您的 Gamescope 会话。
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 标志来启用可变刷新率。
技巧与提示
录制 gamescope 输出
Gamescope 在 PipeWire 中暴露了一个视频节点用于录制。您可以使用 GStreamer 进行录制。
$ gst-launch-1.0 --eos-on-shutdown pipewiresrc do-timestamp=true target-object=gamescope ! vaapih264enc ! h264parse ! mux. pulsesrc do-timestamp=true device="Recording_$(pactl get-default-sink).monitor" ! opusenc ! mux. matroskamux name=mux ! filesink location=recording.mkv
故障排除
光标行为不正常
如果光标未被应用程序捕获,例如限制了您的摄像机移动或在菜单中未正确消失,请使用 --force-grab-cursor 选项。某些 proton/wine 游戏需要此变通方法。
切换到全屏导致性能低下
这是使用 Gamescope 全屏快捷键 Meta+f 时的一个已知 bug。如果您遇到此问题,可以通过在启动游戏时使用全屏标志 -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)
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 内部存在。
每次驱动程序更新时**都必须**重新运行并相应地修改该命令。
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 内核
- Steam Deck Linux 内核 linux-neptune-65AUR 或使用 Steam Deck 颜色管理补丁 构建的内核。
- gamescope
启用了实验性 AMD 颜色管理的 Linux 内核
Linux 6.8 或更新版本,使用包含 -DAMD_PRIVATE_COLOR 的 KCFLAGS 编译,例如 linux-amd-colorAUR
高轮询率鼠标导致卡顿
在游戏窗口中移动高轮询率鼠标(观察到 4000Hz)可能导致卡顿或暂时冻结 [2]。将轮询率设置为 1000Hz 应该可以解决此问题。
Swapchain 错误
Swapchain 错误的一个常见原因是错误地尝试使用 mangohud 而不是 mangoapp。请参阅 #Usage 中的 Mangoapp 部分。
从 Steam 启动 gamescope,大约 24 分钟后出现卡顿(Gamescope Lag Bomb)
如果在从 Steam 启动 gamescope 后,大约 24 分钟开始出现严重卡顿,您可以通过在 Steam 客户端上启用 Steam Overlay -e 选项,或将环境变量 LD_PRELOAD 覆盖为空值来修复。例如:
$ LD_PRELOAD="" gamescope -- %command%
但是,这会禁用 Steam Overlay 和任何额外的 Steam 功能;游戏录制是其中之一。根据游戏的不同,您可能可以通过绕过运行在 gamescope 上的 LD_PRELOAD,将其作为环境变量直接传递给所需的命令来恢复 Steam 功能。例如:
$ gamescope -- env LD_PRELOAD="$LD_PRELOAD" %command%
上述方法对于不包含二次启动器(Rockstar、EA 等)的游戏似乎效果很好。
请参阅 ValveSoftware/gamescope#163。
如果 Gamescope 以非全屏模式启动,游戏会在启动时崩溃。
多个报告表明,在某些系统上,如果 Gamescope 未以全屏模式启动,一些游戏会崩溃,目前的变通方法是在启动选项中添加 --fullscreen。然而,这会导致由于鼠标光标未能正确捕获而出现的相机在游戏中无限旋转平移的问题(参见 4.1)。因此,建议与此修复程序结合使用 --force-grab-cursor。
NVIDIA 上 OpenGL/32 位游戏的帧缓冲快速循环。
有关详细信息,请参阅 ValveSoftware/gamescope#495 的报告。原因尚未确认,也未列出任何修复方法。