Linux xrdp远程桌面连接声音重定向

科技动态 2018-06-20

远程管理linux主机通常不需要远程桌面连接,对linux熟悉的人可能只用ssh远程登陆就够了。但是有些人想要像管理windows主机一样使用windows设备管理linux主机,那么xrdp这款软件就是一个很好的选择。xrdp可以让你用windows上的远程桌面连接(rdp)登陆linux系统,以图形界面远程操作linux主机。安装xrdp很简单,各大发行版的软件源都有,以Ubuntu为例,终端输入:

sudo apt install xrdp

这样xrdp就安装好了(如果没有桌面环境需要先安装桌面环境),然后输入:

/etc/init.d/xrdp restart

启动xrdp,这样就可以在windows上远程连接了。

在ubuntu的终端输入

ifconfig

获得linux主机IP;

在windows上开始菜单搜索“远程桌面连接”,如图:

RDClient

点击进入,在计算机一栏填入要连接的linux主机IP地址:端口,例如:127.0.0.1:3389。如下图:

输入IP地址

3389是默认端口可以不写,只写主机IP。然后点击连接,出现如下图后输入用户名和密码后即可登陆。

登陆Linux主机

其它平台(Android、ios、mac、linux)的RDP客户端使用方法大同小异就不多说了。

登陆之后尝试一下各种操作,似乎和本地登陆是一样的,好像没什么问题,但是如果没问题我为什么写这篇文章呢?尝试播放音乐和网页视频就会发现没有声音。打开远程桌面连——显示选项——本地资源——设置,如图所示:

本地资源

在此计算机上播放

选择在此计算机上播放,点击确定。重新连接就会发现还是没有声音。

大家都知道rdp是支持传输声音的,那么xrdp支持传输声音吗?我们在安装xrdp时会发现有一个推荐安装的软件包“xrdp-pulseaudio-installer”,关于这个软件包我并没有找到出处,但是看到”audio“这个单词大家肯定会觉得和声音有关系,所以果断安装:

sudo apt install xrdp-pulseaudio-installer

安装之后似乎没有任何效果,重启xrdp服务没用,重启主机没用,删除会话也没用,是不是安装这个软件包没用呢?肯定是有用的,只是没有找到使用的方法。我们用find命令查找名字中带有xrdp所有文件和文件夹,发现/etc/xrdp/这个目录,在这个目录中有一个叫pulse的文件夹,pulse是linux系统的声音服务之一,这说明xrdp是支持声音传输的。在这个目录里有一个文件“default.pa”,我们打开看一下:

vim /etc/xrdp/pulse/default.pa

会看到如下内容:

default.pa

说明xrdp在连接时会检测“/var/lib/xrdp-pulseaudio-installer/”这个目录,如果有module-xrdp-sink.so和module-xrdp-source.so两个文件就加载这两个文件,没有就加载默认的module-native-protocol-unix模块,但是“cd”进入“/var/lib/xrdp-pulseaudio-installer/”目录发现并没有这两个文件。学过c、c++或java肯定知道以“.so”为后缀的文件都是编译完成的平台相关的二进制文件,所以我们需要编译出这两个文件,而不是从别人的电脑上复制过来。那么去哪里找源代码呢?我在github上xrdp项目文档中找到了相关内容,大家可以看看这篇文章:“ How to set up audio redirection · neutrinolabs/xrdp Wiki · GitHub ”,原文说的很详细,不想看英文可以看本文文末所附的中文翻译。安装xrdp时默认不会安装pulse扩展模块,编译这两个文件需要下载xrdp和pulseaudio的源代码。xrdp中的pulse模块编译依赖pulseaudio的源代码,不同的系统环境使用的pulseaudio版本是不同的,所以xrdp源代码包里不包含pulseaudio的源代码,需要同时使用xrdp和pulseaudo的源代码来编译两个module-*.so文件。但是文章在最后安装时并没有提到xrdp-pulseaudio-installer这个软件包,可能官方文档还没更新?编译完成后我并没有按照文章最后说的方法去安装,而是直接将编译得到的两个“.so”文件复制到了“/var/lib/xrdp-pulseaudio-installer/”目录下(Ubuntu):

cd ~/xrdp/sesman/chansrv/pulse

sudo cp module-xrdp-sink.so /var/lib/xrdp-pulseaudio-installer/

sudo cp module-xrdp-source.so /var/lib/xrdp-pulseaudio-installer/

然后重启主机和xrdp服务,试试远程连接(只要是RDP客户端都可以)看看有没有声音效果。其他发行版如果有xrdp-pulseaudio-installer这个软件包应该也可以使用这种方法。

本文介绍的方法只在Ubuntu18.04(mate)虚拟机中测试通过,并没有在其他发行版和WSL(Windows Subsystem for Linux)中测试,希望测试过的朋友能告诉我其他发行版和WSL是否能正常使用。本人水平有限,如有错误请一定在评论指出,我会尽快改正,如果有疑问也请评论,我会尽快回复。最后附上 How-to-set-up-audio-redirection的中文翻译。

如何启动音频重定向

# 概述

Xrdp 支持使用PulseAudio进行音频重定向,PulseAudio是可运行于符合POSIX标准的操作系统上的一个声音系统。服务端到客户端的重定向符合Remote Desktop Procol 标准,[[MS-RDPEA]]( https://msdn.microsoft.com/en-us/library/cc240933.aspx )

但是客户端到服务端的重定向的实现技术是本软件专有的。显而易见,服务端到客户端的重定向可以从很多RDP客户端·中获取,包括Microsoft客户端,但是客户端到服务端的重定向需要NeutrinoRDP客户端,其它客户端是做不到的。

本文讲述如何在你所使用的发行版上构建pulseaudio模块的方法,以便于通过xrdp获得音频传输支持。

# 先决条件

准备xrdp源代码并放在你的家目录下。当然你可以放在别的目录(译者:最好不要放在别的目录)。

cd ~

git clone https://github.com/neutrinolabs/xrdp.git

本文中, pulseaudio版本是**10.0**。如果你的系统环境使用的是不同的版本,请替换版本号。你可以执行以下命令来查询的的pulseaudio版本:

pulseaudio --version

# 如何构建

## Debian 9 / Ubuntu

这则说明也应该同样适用于Ubuntu衍生版。

### 先决条件

需要一些构建工具和包开发工具,请确保你安装了这些工具。

apt install build-essential dpkg-dev

### 准备& 构建

安装pulseaudio(声音系统)和依赖包来构建pulseaudio(模块)

apt install pulseaudio

apt build-dep pulseaudio

获取pulseaudio的源代码。你会在当前目录看到“pulseaudio-10.0”这个文件夹。

apt source pulseaudio

进入这个目录并构建pulseaudio 包。

cd pulseaudio-10.0

./configure

最后让我们来make。你将会得到两个“.so“文件,文件名分别为”module-xrdp-sink.so”和”module-xrdp-source.so”。

cd ~/xrdp/sesman/chansrv/pulse

make PULSE_DIR=”~/pulseaudio-10.0”

## 其他发行版

首先,用“pulseaudio --version”命令查询你的pulseaudio版本。下载你对应版本的pulseaudio tar包。

https://freedesktop.org/software/pulseaudio/releases/

下载完tar包后解压tar包并“cd“进入源代码目录,然后执行”./configure”。

wget https://freedesktop.org/software/pulseaudio/releases/pulseaudio-10.0.tar.xz

tar xf pulseaudio-10.0.tar.gz

cd pulseaudio-10.0

./configure

如果运行“./configure”后发现需要安装额外的软件包请安装需要的软件包。

最后让我们来make。你将会得到两个“.so“文件,文件名分别为”module-xrdp-sink.so”和”module-xrdp-source.so”。

cd ~/xrdp/sesman/chansrv/pulse

make PULSE_DIR=”~/pulseaudio-10.0”

# 安装

安装方法除了安装位置可能不同外是不区分发行版的。安装两个构建好的“.so“文件到pulseaudio模块目录。作为特色的是,Debian系统pulseaudio模块目录为”/usr/lib/pulse-10.0/modules”,CentOS 7系统pulseaudio目录为“/usr/lib64/pulse-10.0/modules”。其他发行版可能在不同的路径。在你使用的发行版上找到正确的路径。

用ls看看你找到的路径,你将看到很多module-*.so文件,就是这个地方!

cd ~/xrdp/sesman/chansrv/pulse

for f in *.so; do install -s -m 644 $f/usr/lib/pulse-10.0/modules; done

这条命令等价于以下命令:

install -s -m 644 module-xrdp-sink.so/usr/lib/pulse-10.0/modules

install -s -m 644 module-xrdp-source.so/usr/lib/pulse-10.0/modules

做的好!Pulseaudio模块应该已经正确的构建并安装了。

# 确认是否生效

在xrdp会话中执行 “pavumeter“来确认是否生效。在Firefox中重放任意的视频。你将会看到”Showing signal levels

of xrdp sink”和音量计在动。

简书

责编内容by:简书 (源链)。感谢您的支持!

您可能感兴趣的

Crisis at Void Linux as Lead Developer Goes Missin... It was recently announced that the lead developer of Void Linux had gone sile...
SylixOS 的system使用 1. 适用范围 SylixOS 是一款为大型嵌入式系统设计的硬实时系统,支持使用 system 调用执行命令。 SylixOS 为了保证实时...
Linux路径名和文件名最大长度限制 UNIX标准对路径名和文件名最大长度限制做出了说明,但其上限值在实际应用长过小,Linux在具体实现时提升了该上限,该限制在Linux的 /usr/includ...
20 Linux Command Tips and Tricks That Will Save Yo... Brief: Here are some tiny but useful Linux commands, terminal tricks and shortc...
Timing issues when using BPF with virtual CPUs Introduction After implementing the collecting of TCP connections using eBPF ...