megrxu

远程畅玩

Sep 17, 2021  「DevOps」  

上一篇「远程运行的 X Server」的尝试失败后,很长一段时间以来再也没有想过类似的问题了。不过,「远程畅玩」这个想法仍然太过诱人,思来想去,总觉得从理论上这应当是可行的。

在上一篇中,最终止步于 Steam Link 所发出的报错信息,显示无法连接到某一个 IP 的端口。 后来,我又去尝试了本地网络下的 Steam Link 的使用办法,发现本身的连接也没想象中那么傻瓜。只有通过一次随机认证码的交互认证之后,才短时间内允许用户发起直接的连接。而直接连接后,远程的声音和控制都可以传输过来,体验是和远程桌面没有什么区别的。在网络比较 laggy 的时候,右下角有 Steam Link 的一些提示,说明现在的网络状况不是很好。

那么,下一步就是要尝试,先让 Steam Link 能够连接到远程主机,而不要去管怎么运行游戏。

进行一次交互认证

首先,需要进行一次交互认证。指定 DISPLAY=:0,并在远程主机运行 Steam。这样,理论上虚拟显示器就存在着一个 Steam。为了能够在虚拟显示器上交互,我们可以使用 x11vnc。在远程主机上再运行 x11vnc -display :0,可以临时启用一个 VNC Server。此时,登陆远程主机上的 Steam,并在本地启动 Steam Link,启动认证流程,就可以和远程主机完成认证,并开始连接。

运行 GUI 程序

然后,运行想要运行的程序,再关闭 Steam Link,关闭 VNC 连接,关闭 VNV Server。现在的状态应当是虚拟显示器上正跑着你想要的程序,而 Steam Link 也可以一键连接到远程主机。

于是,重新打开 Steam Link,就可以看到正在运行的程序了,而这个程序完全是由远程主机上的 GPU 进行渲染的。同时,得益于 Steam Link 原本用来串流游戏,因此控制和声音都默认被配置好并正常工作了。

缺点和不足

  • 目前操作还是太过于不适,需要手动进行很多调整。
  • LXC 容器中的 GUI 程序,现在还跑在裸的 X Server 上,还没有 DM (Display Manager) 。
  • 网络环境相当复杂导致的网络延迟,还不太能接受。

不过至少这个可行性是有的。如果将来能有单一网络环境的 GPU 服务器,就可以更好地体验远程畅玩了。

Screenshot

可以看到使用 3090 渲染
可以看到使用 3090 渲染
一点雪景
一点雪景
Craft.Moe 服务器
Craft.Moe 服务器