我如何以编程方式以同一座位上的另一个用户身份开始新的会话

我如何以编程方式以同一座位上的另一个用户身份开始新的会话

在锁定的正在运行的会话(KDE6、wayland)中,我想从守护进程(KDE Con​​nect)以另一个用户身份启动会话(Gamescope/Steam)并运行流媒体软件(阳光),它需要具有 GPU 访问权限/租约/某些东西,并且能够捕获(KMS?)屏幕。我不想在同一个桌面会话中以另一个用户身份运行 Steam。

KDE 连接用户已通过 SDDM 正常启动。只有一个席位。新登录的用户将接管该席位。目标是实现某种隔离,因为 Sunshine 本质上是一个远程命令工具,所以我不想暴露我的普通用户。容器化等很棘手,因为这与游戏和共享一堆东西有关,只要我能锁定普通用户,这种级别的隔离对我来说就足够了。GPU 驱动程序是amdgpu。目标用户是普通用户,有一个 shell(目前),并且已经通过 SSDM/KDE 成功登录一次。

我知道我可以su/sudo并运行一些命令来启动plasma会话。我相信setsid会以某种方式考虑到这一点,尽管我确实在某处读到过 Wayland 会话不一定关心这一点。

我真的不知道如何sddm以及哪个 Wayland WM 进行通信以获得 GPU 访问权限或其他东西,以及如何复制它。

我很困惑它是否seatd会发挥作用以及它实际上做什么(手册很短)。

我收集了可能需要dbus-run-session用作命令包装器的内容。我不知道是否XDG_*需要设置内容,是使用新值还是从正在运行的会话中继承。

参加完该会话后,我知道我可以loginctl切换到该会话。

我觉得我最接近的

su -l <user> -c sh -c 'XDG_SESSION_TYPE=wayland setsid gamescope -W... -H... --steam -- dbus-run-session steam steam://open/bigpicture' 

但是,似乎这个会话最终会进行屏幕外渲染或类似操作,并且没有通常的资源。另外,我认为我没有设法以编程方式切换到此会话,并且据我所知,屏幕输出对于捕获很重要。大多数时候,我的屏幕卡住了,没有输出。它曾经工作过一次,但似乎是软件渲染或有其他问题,我从单独的tty手动开始。

奖励:我很感激任何指向文章的指针,这些文章提供了图形堆栈如何工作的概述(而不是对某一事物的详细介绍),以便 WM 或游戏或某些东西可以使用 GPU。

相关内容