VR/zh: Difference between revisions

Ardenet (talk | contribs)
Created page with "[https://gitlab.com/znixian/OpenOVR OpenComposite] 是一个兼容层,用于在 Monado 等 OpenXR 运行时上运行 OpenVR 应用程序。它与 DXVK 或 vkd3d 等工具类似,但用于将 OpenVR 调用转换为 OpenXR。"
Ardenet (talk | contribs)
Tags: Mobile edit Mobile web edit
 
(12 intermediate revisions by 2 users not shown)
Line 55: Line 55:


有关可用环境变量和调整的更多信息,请参阅 [https://lvra.gitlab.io/docs/fossvr/monado/ Linux VR Adventures wiki] 和 [https://monado.freedesktop.org/getting-started.html#environment-variables Monado 文档关于环境变量的部分]
有关可用环境变量和调整的更多信息,请参阅 [https://lvra.gitlab.io/docs/fossvr/monado/ Linux VR Adventures wiki] 和 [https://monado.freedesktop.org/getting-started.html#environment-variables Monado 文档关于环境变量的部分]


== OpenComposite ==
== OpenComposite ==
Line 158: Line 157:
在初始设置时,SteamVR 会请求提升权限,以便为其某个二进制文件设置文件能力(file capability)。这是使异步再投影技术正常工作所必需的。客户端需要拥有 <code>CAP_SYS_NICE</code> 授权来获取高优先级环境,这是异步再投影技术的必要条件。
在初始设置时,SteamVR 会请求提升权限,以便为其某个二进制文件设置文件能力(file capability)。这是使异步再投影技术正常工作所必需的。客户端需要拥有 <code>CAP_SYS_NICE</code> 授权来获取高优先级环境,这是异步再投影技术的必要条件。


{{Note|Steam 在基于 bubblewrap 的 FHS 环境中运行。此环境在用户命名空间中运行 Steam,这阻止它使用任何能力(capabilities)或为二进制文件 setuid。这意味着除非修补内核以完全消除这些限制,否则异步再投影技术无法在 NixOS 上使用。请参阅此 [https://github.com/NixOS/nixpkgs/issues/217119 Nixpkgs 问题]}}
{{Note|Steam 在基于 bubblewrap 的 FHS 环境中运行。此环境在用户命名空间中运行 Steam,这阻止它使用任何能力(capabilities)或为二进制文件 setuid。这意味着除非修补内核以完全消除这些限制或修改用于运行 Steam 的 bubblewrap 二进制文件以消除这些功能保护,否则异步再投影技术无法在 NixOS 上使用。这两种解决方法都有各自的安全隐患。请参阅此 [https://github.com/NixOS/nixpkgs/issues/217119 Nixpkgs 问题]}}


<span id="Patching_AMDGPU_to_allow_high_priority_queues"></span>
<span id="Patching_AMDGPU_to_allow_high_priority_queues"></span>
Line 185: Line 184:


也可以只修补 amdgpu 并将其构建为树外模块(out-of-tree module),如 [[Special:MyLanguage/Linux_kernel#Patching_a_single_In-tree_kernel_module|Pacthing a single In-tree Kernel Module]] 中所述
也可以只修补 amdgpu 并将其构建为树外模块(out-of-tree module),如 [[Special:MyLanguage/Linux_kernel#Patching_a_single_In-tree_kernel_module|Pacthing a single In-tree Kernel Module]] 中所述
<span id="Patching_bubblewrap_to_allow_capabilities"></span>
=== 修补 bubblewrap 以允许启用能力(capabilities) ===
通过修改用于运行 Steam 的 bubblewrap 二进制文件,您可以允许该 FHS 环境中的进程获取能力。这样就无需直接修补内核了。
{{Warning|这绕过了 bubblewrap 中预设的安全机制,并允许所有其他由 steam 启动或通过 steam-run 运行的软件也获得这些能力。}}
{{file|/etc/nixos/configuration.nix|nix|3=programs.steam = let
  patchedBwrap = pkgs.bubblewrap.overrideAttrs (o: {
    patches = (o.patches or []) ++ [
      ./bwrap.patch
    ];
  });
in {
  enable = true;
  package = pkgs.steam.override {
    buildFHSEnv = (args: ((pkgs.buildFHSEnv.override {
      bubblewrap = patchedBwrap;
    }) (args // {
      extraBwrapArgs = (args.extraBwrapArgs or []) ++ [ "--cap-add ALL" ];
    })));
  };
};
}}
{{file|/etc/nixos/bwrap.patch|diff|3=diff --git a/bubblewrap.c b/bubblewrap.c
index 8322ea0..4e20262 100644
--- a/bubblewrap.c
+++ b/bubblewrap.c
@@ -868,13 +868,6 @@ acquire_privs (void)
      /* Keep only the required capabilities for setup */
      set_required_caps ();
    }
-  else if (real_uid != 0 && has_caps ())
-    {
-      /* We have some capabilities in the non-setuid case, which should not happen.
-        Probably caused by the binary being setcap instead of setuid which we
-        don't support anymore */
-      die ("Unexpected capabilities but not setuid, old file caps config?");
-    }
  else if (real_uid == 0)
    {
      /* If our uid is 0, default to inheriting all caps; the caller
}}
作为额外的更改,您可能还需要用指向修改后的 bwrap 二进制文件的符号链接替换 ​​Steam 自己的 bwrap 二进制文件,该链接位于 <code>~/.local/share/Steam/ubuntu12_32/steam-runtime/usr/libexec/steam-runtime-tools-0/srt-bwrap</code>。
当 steam-runtime 更新时,Steam 会定期用自己的二进制文件替换此修改,因此您可能需要在功能异常时,重新应用此修改。


== wlx-overlay-s ==
== wlx-overlay-s ==
Line 193: Line 240:
==== SteamVR 自动启动 ====
==== SteamVR 自动启动 ====


在 SteamVR(或任何 OpenVR 合成器)中启动 wlx-overlay-s 时,它会注册一个自动启动清单。目前,此清单将引用 wlx-overlay-s 的 Nix 存储路径,该路径可能会在重建 NixOS/Nix 配置文件后被垃圾回收。一种解决方法是定期运行以下命令来更新清单的存储路径:{{Commands|
在 SteamVR(或任何 OpenVR 合成器)中启动 wlx-overlay-s 时,它会注册一个自动启动清单。目前,此清单将引用 wlx-overlay-s 的 Nix 存储路径,该路径可能会在重建 NixOS/Nix 配置文件后被垃圾回收。一种解决方法是定期运行以下命令来更新清单的存储路径:
 
{{Commands|
# 运行 wlx-overlay-s 并替换任何正在运行的实例
# 运行 wlx-overlay-s 并替换任何正在运行的实例
$ wlx-overlay-s --replace}}
$ wlx-overlay-s --replace}}
Line 201: Line 250:


* [https://lvra.gitlab.io Linux VR Adventures Wiki]
* [https://lvra.gitlab.io Linux VR Adventures Wiki]
[[Category:Video/zh|分类:视频]]
[[Category:Video/zh|分类:视频]]
[[Category:Hardware/zh|分类:硬件]]
[[Category:Hardware/zh|分类:硬件]]
[[Category:Desktop/zh|分类:桌面]]
[[Category:Desktop/zh|分类:桌面]]
[[Category:Gaming/zh|分类:游戏]]
[[Category:Gaming/zh|分类:游戏]]