neutrinolabs / pulseaudio-module-xrdp

xrdp sink / source pulseaudio modules
GNU Lesser General Public License v2.1
214 stars 42 forks source link

There is no "xrdp sink" device for session #19

Closed oukooveu closed 6 years ago

oukooveu commented 6 years ago

OS: CentOS 7.5.1804 xrdp: xrdp-0.9.7.gita9e2dcc+master-1.el7.x86_64 pulseaudio: 10.0 pulseaudio xrdp modules have been built from b88ff0134889577b0359509d7760ab024a8dc40f by instruction from here.

pulseaudio doesn't start when Xrdp session is started, if it started manually required modules are loaded:

pulseaudio -v
...
I: [pulseaudio] source.c: Created source 1 "xrdp-sink.monitor" with sample spec s16le 2ch 44100Hz and channel map front-left,front-right
I: [pulseaudio] source.c:     device.description = "Monitor of xrdp sink"
I: [pulseaudio] source.c:     device.class = "monitor"
I: [pulseaudio] source.c:     device.icon_name = "audio-input-microphone"
E: sink_process_msg: not running
E: close_send:
I: [pulseaudio] module-always-sink.c: A new sink has been discovered. Unloading null-sink.
I: [pulseaudio] module.c: Loaded "module-xrdp-sink" (index: #3; argument: "").
I: [pulseaudio] source.c: Created source 2 "xrdp-source" with sample spec s16le 2ch 44100Hz and channel map front-left,front-right
I: [pulseaudio] source.c:     device.description = "xrdp source"
I: [pulseaudio] source.c:     device.class = "abstract"
I: [pulseaudio] source.c:     device.icon_name = "audio-input-microphone"
I: [pulseaudio] core.c: default_source: auto_null.monitor -> xrdp-source
I: [pulseaudio] module.c: Loaded "module-xrdp-source" (index: #4; argument: "").
I: [pulseaudio] module.c: Loaded "module-native-protocol-unix" (index: #5; argument: "").
I: [pulseaudio] main.c: Daemon startup complete.
I: [pulseaudio] module.c: Unloading "module-null-sink" (index: #2).

But 'xrdp sink' device doesn't appear in pavucontrol and pulseadio crashes when pavucontrol tying to communicate with it:

I: [pulseaudio] client.c: Created 0 "Native client (UNIX socket client)"
I: [pulseaudio] protocol-native.c: Got credentials: uid=1000 gid=1000 success=1
I: [pulseaudio] source-output.c: Trying to change sample rate
I: [pulseaudio] remap.c: Using stereo to mono remapping
I: [pulseaudio] source-output.c: Created output 0 "Peak detect" on xrdp-sink.monitor with sample spec float32le 1ch 25Hz and channel map mono
I: [pulseaudio] source-output.c:     media.name = "Peak detect"
I: [pulseaudio] source-output.c:     application.name = "PulseAudio Volume Control"
I: [pulseaudio] source-output.c:     native-protocol.peer = "UNIX socket client"
I: [pulseaudio] source-output.c:     native-protocol.version = "32"
I: [pulseaudio] source-output.c:     application.id = "org.PulseAudio.pavucontrol"
I: [pulseaudio] source-output.c:     application.icon_name = "audio-card"
I: [pulseaudio] source-output.c:     application.version = "3.0"
I: [pulseaudio] source-output.c:     application.process.id = "10335"
I: [pulseaudio] source-output.c:     application.process.user = "centos"
I: [pulseaudio] source-output.c:     application.process.host = "host"
I: [pulseaudio] source-output.c:     application.process.binary = "pavucontrol"
I: [pulseaudio] source-output.c:     application.language = "en_US.UTF-8"
I: [pulseaudio] source-output.c:     window.x11.display = ":10.0"
I: [pulseaudio] source-output.c:     application.process.machine_id = "609bbd29e32a4898e604f49bff82a88c"
I: [pulseaudio] source-output.c:     application.process.session_id = "c2"
I: [pulseaudio] protocol-native.c: Final latency 80,00 ms = 40,00 ms + 40,00 ms
E: 1 block_usec 30000
E: 1 block_usec 30000
I: [pulseaudio] source-output.c: Trying to change sample rate
I: [pulseaudio] remap.c: Using stereo to mono remapping
I: [pulseaudio] source-output.c: Created output 1 "Peak detect" on xrdp-source with sample spec float32le 1ch 25Hz and channel map mono
I: [pulseaudio] source-output.c:     media.name = "Peak detect"
I: [pulseaudio] source-output.c:     application.name = "PulseAudio Volume Control"
I: [pulseaudio] source-output.c:     native-protocol.peer = "UNIX socket client"
I: [pulseaudio] source-output.c:     native-protocol.version = "32"
I: [pulseaudio] source-output.c:     application.id = "org.PulseAudio.pavucontrol"
I: [pulseaudio] source-output.c:     application.icon_name = "audio-card"
I: [pulseaudio] source-output.c:     application.version = "3.0"
I: [pulseaudio] source-output.c:     application.process.id = "10335"
I: [pulseaudio] source-output.c:     application.process.user = "centos"
I: [pulseaudio] source-output.c:     application.process.host = "host"
I: [pulseaudio] source-output.c:     application.process.binary = "pavucontrol"
I: [pulseaudio] source-output.c:     application.language = "en_US.UTF-8"
I: [pulseaudio] source-output.c:     window.x11.display = ":10.0"
I: [pulseaudio] source-output.c:     application.process.machine_id = "609bbd29e32a4898e604f49bff82a88c"
I: [pulseaudio] source-output.c:     application.process.session_id = "c2"
I: [pulseaudio] protocol-native.c: Final latency 41,00 ms = 40,00 ms + 1,00 ms
E: Could not obtain source_socket from environment.

In the trace:

write(2, "I: [pulseaudio] protocol-native."..., 79I: [pulseaudio] protocol-native.c: Final latency 41,00 ms = 40,00 ms + 1,00 ms
) = 79
write(18, "\1\0\0\0\0\0\0\0", 8)        = 8
write(18, "\1\0\0\0\0\0\0\0", 8)        = 8
write(12, "\1\0\0\0\0\0\0\0", 8)        = 8
write(12, "\1\0\0\0\0\0\0\0", 8)        = 8
write(12, "\1\0\0\0\0\0\0\0", 8)        = 8
read(3, "WW", 10)                       = 2
write(12, "\1\0\0\0\0\0\0\0", 8)        = 8
write(14, "\1\0\0\0\0\0\0\0", 8)        = 8
write(4, "W", 1)                        = 1
write(12, "\1\0\0\0\0\0\0\0", 8)        = 8
write(12, "\1\0\0\0\0\0\0\0", 8)        = 8
write(12, "\1\0\0\0\0\0\0\0", 8)        = 8
write(12, "\1\0\0\0\0\0\0\0", 8)        = 8
write(12, "\1\0\0\0\0\0\0\0", 8)        = 8
read(3, "W", 10)                        = 1
write(14, "\1\0\0\0\0\0\0\0", 8)        = 8
write(14, "\1\0\0\0\0\0\0\0", 8)        = 8
write(4, "W", 1)                        = 1
write(18, "\1\0\0\0\0\0\0\0", 8)        = 8
futex(0x55d1bab5f1c0, FUTEX_WAIT_PRIVATE, 0, NULLE: Could not obtain source_socket from environment.
 <unfinished ...>
+++ killed by SIGSEGV +++
Segmentation fault
metalefty commented 6 years ago

Can you try 7bf2c4192533443cd830102978070c81465a183c? It might be a bug that caused by my recent commit. Sorry for the inconvenience.

metalefty commented 6 years ago

@oukooveu Try this #20.

oukooveu commented 6 years ago

It works. Thanks a lot for quick response.

oukooveu commented 6 years ago

Just for history how to setup xrdp/xfce4 with sound support for CentOS 7.5.1804:

sudo yum install -y tigervnc-server xfce4-panel xfce4-session xfce4-settings xfconf xfdesktop xfwm4 Thunar xfce4-terminal
sudo yum install -y epel-release xrdp
echo 'PREFERRED=/usr/bin/startxfce4' | sudo tee /etc/sysconfig/desktop

Build/deploy pulseaudo modules according to this instruction.

Setup additional tools for testing:

sudo yum install -y alsa-utils pulseaudio-utils pavucontrol alsa-plugins-pulseaudio

And "redirect" ALSA to pulseaudio:

cat << EOF | sudo tee -a /etc/asound.conf
pcm.pulse {
    type pulse
}

ctl.pulse {
    type pulse
}

pcm.!default {
    type pulse
}
ctl.!default {
    type pulse
}
EOF

How to check:

  1. Login to host with xfreerdp or windows client (remmina doesn't work at the moment):
    xfreerdp /u:<user> /p:<password> /sound /v:<host> /w:1400 /h:900
  2. Run speaker-test and sound should come.