跳转至

用 XRDP + X11 转发实现带音频的图形界面转发

背景

最近遇到一个需求,在机器 A 上跑一个图形界面程序,但因为是远程访问,所以传统的办法就是开个 X11 Forwarding,或者跑个 VNC/RDP Server。但我有音频转发的需求,本地是 macOS,又不好在机器 A 上装 XRDP+桌面环境,于是在机器 B 上跑 XRDP Server,在机器 A 上通过 X11 Forwarding + Unix Socket Forwarding 实现图形界面和音频在机器 B 上的播放,再通过 RDP 客户端在 macOS 上实现带音频的图形界面浏览。

具体实现方法

具体实现方法不难,主要是在机器 B 上做一些配置:

  1. 安装 XRDP,配置桌面环境,我用的是 Xfce4
  2. 安装 pipewire-module-xrdp,关闭 pulseaudio 服务,改为 pipewire + pipewire-pulse + wireplumber
  3. 带 X11 Forwarding 连接到机器 A,同时通过 Unix Socket 转发 pulseaudio 的 Unix Socket:DISPLAY=XRDP_DESKTOP_HERE ssh -X -Y -R /run/user/UID_A_HERE/pulse/native:/run/user/UID_B_HERE/pulse/native host_a

然后在 SSH Session 里跑带图形界面的程序即可,它就会通过 ssh 转发的 X11 在 XRDP 的 DISPLAY 上显示,再通过 pulse/native 的 Unix Socket 播放音频。

最后,通过 RDP Client(Windows App)连接到机器 B,就可以在看到图形界面的同时,也有正确的音频了。

评论 / Comments