Gamescope
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%
gamescope -W 1920 -H 1080 -r 60 -- %command%
从 Wine 启动
要通过 Wine 使用 Gamescope 运行程序,只需附加 wine,后跟可执行文件。
$ gamescope -W 1920 -H 1080 -r 60 -- wine supertuxkart
几乎所有流行的 Wine 管理器,如 Lutris、Bottles 和 PlayOnLinux 都支持 Gamescope。使用它们非常简单,只需安装所需的 Gamescope 软件包并选中使用 Gamescope(或类似)选项。
从 Flatpak 启动
你也可以像从软件包安装一样,从 Wine 管理器和 Steam 的 Flatpak 版本中使用 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 会话。
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)
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 内部。
必须在每次驱动程序更新时重新运行并相应修改该命令。
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 或 gamescope-gitAUR
启用实验性 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。