我正在为 Linux 开发一个远程桌面/流媒体程序。当用户登录时,他们指定要启动的程序,远程服务器会将该程序作为新进程启动。服务器进程充当 Wayland 合成器,因此子进程在屏幕外运行(从服务器上任何其他用户的角度来看),并从合成器获取输入。
这对于简单的应用程序来说效果很好,但是许多桌面应用程序,如 Steam(对于这个用例来说是一个重要的应用程序)使用(我认为)dbus 来检查是否有现有的 steam 实例正在运行,如果有,它们就会切换到它。因此,如果已经打开了一个窗口,那么简单地分叉/执行该进程是行不通的。
我尝试unshare(2)
为每个孩子创建一个安装命名空间,然后安装一些东西来/run
隐藏 dbus。我在这种方法上还没有成功。
容器化是这里明显的通用方法,既可以用于隔离,也可以提供一些小的安全优势。但是,我希望服务器进程是独立的,而不是要求 Docker 或 lxd 等与其一起运行。
我不太关心安全性 - 或者更确切地说,这个问题的解决方案不一定要防止容器逃逸或类似的攻击。
哪些 Linux 友好的技术或内核功能可以很好地解决这个问题并且在 C/Rust 程序中相当容易实现?