xrdp是rdp(Remote Desktop Protocol)协议的开源版本。ubuntu开启xrdp服务后,可在win10使用远程桌面登录。好处有:
- 可把ubuntu的声音重定向到win10宿主机播放,解决hyper-v无法播放声音的问题。
- 可以调整ubuntu分辨率,实现全屏操作。
- 可以通过远程桌面的设置,将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的权限