Ubuntu xrdp 开启声音转发
Ubuntu xrdp 开启声音转发

Ubuntu xrdp 开启声音转发

xrdp是rdp(Remote Desktop Protocol)协议的开源版本。ubuntu开启xrdp服务后,可在win10使用远程桌面登录。好处有:

  1. 可把ubuntu的声音重定向到win10宿主机播放,解决hyper-v无法播放声音的问题。
  2. 可以调整ubuntu分辨率,实现全屏操作。
  3. 可以通过远程桌面的设置,将win10的本地资源(例如打印机、剪贴板、磁盘分区、u盘)共享到ubuntu,从而在ubuntu和win10之间进行拷贝粘贴,在ubuntu中直接操作win10系统的文件。

Hyper-V针对ubuntu系统的增强会话模式就是基于xrdp实现的,相比增强会话模式,直接启用ubuntu的xrdp服务会更简单直接,兼容性也更好。从ubuntu20.04开始,Hyper-V自己也放弃了对ubuntu的增强会话模式的支持。

apt-get update

sudo apt install -y xrdp
service xrdp status
sudo service xrdp start
sudo service xrdp stop

xrdp -v

/etc/xrdp/是配置目录,/etc/xrdp/xrdp.ini等是配置文件。注意/etc/xrdp/pulse/default.pa是音频的配置文件。

系统可以是Ubuntu或者Debian,ARM、X86均可

Ubuntu20.04 -> pulseaudio 13.99 ✓

Debian11 -> pulseaudio 14.2 ✓

Ubuntu22.04 -> pulseaudio 15.99 ✗

Ubuntu不能高于20.04,低版本理论可行

更新! Pulseaudio官方给了一键脚本,在Ubuntu23上试验成功,应该是没有版本限制了

脚本在此 -> Build on Debian or Ubuntu · neutrinolabs/pulseaudio-module-xrdp Wiki

在Ubuntu上安装ubuntu桌面

apt install ubuntu-desktop

先配置源

手动配置Pulseaudio

apt update;apt upgrade -y;
apt-get install software-properties-common -y
apt-get install git libpulse-dev autoconf m4 intltool dpkg-dev libtool libsndfile-dev libcap-dev libjson-c-dev make gcc curl wget -y
apt-get build-dep pulseaudio -y
apt source pulseaudio
权限报错,请删除“pulseaudio-13.99.1”文件夹
rm -rf pulseaudio-13.99.1
chmod 777 pulseaudio*
apt source pulseaudio
cd pulseaudio-13.99.1

./configure
cd ../
git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git
cd pulseaudio-module-xrdp
./bootstrap
./configure PULSE_DIR="/root/pulseaudio-13.99.1"
make

先执行 pulseaudio
如果提示命令不存在,参考下面的额外步骤手动安装
如果命令存在,按ctrl+c结束,回到正常步骤
额外步骤 cd ~;cd pulseaudio-13.99.1
额外步骤 make
额外步骤 make install
最后 cd ../;cd pulseaudio-module-xrdp
然后继续执行下面几步

cd src/.libs
install -t "/var/lib/xrdp-pulseaudio-installer" -D -m 644 *.so
install -t "/usr/lib/pulse-13.99.1/modules" -D -m 644 *.so
reboot

配置完成后,远程桌面这两个勾上,使用非root账户登陆服务器,可以识别到声卡<伪输出>

重启pulseaudio,声卡变成<xrdp sink>,这样就有声音了

pulseaudio -k //这里卡住按ctrl+c强行结束
killall pulseaudio //这里卡住按ctrl+c强行结束
pulseaudio &

非ubuntu系统可以安装pavucontrol音频管理器

下面是debug部分

1.执行 pulseaudio & ,声卡变成<xrdp sink>,点击测试没有声音,终端输出 [xrdp-sink] module-xrdp-sink.c: sink_process_msg: not running,这是因为模块module-xrdp-sink 没有加载
解决方法:在文件 /etc/pulse/default.pa 末尾另起一行,添加 load-module module-xrdp-sink 保存重启

2.root用户需要执行以下命令,将root添加到pulse组

gpasswd -a root pulse
gpasswd -a root pulse-access

同时去除pulseaudio对root的限制

cd /lib/systemd/user/
编辑如下三个文件
pulseaudio.service
pulseaudio.socket
pulseaudio-x11.service (如无则无)
将其中的 ConditionUser=!root 这一行注释掉,也就是行前加#

pulseaudio自启动方法 (普通用户无需执行,root用户先尝试上面两步,如不行再配置自启动)

vim /voice.sh

//在根目录新建voice.sh

#! /bin/bash
sleep 10s
su root -c "pulseaudio -k"
su root -c "pulseaudio &"

//按esc,再输入:wq回车,保存文件

执行 chmod 777 /voice.sh 赋权

重启以root身份登录就可以了,非root用户确保要有执行voice.sh的权限

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Title - Artist
0:00