[pulseaudio-discuss] How to redirect pulse audio through ssh?

Quinn Plattel qiet72 at gmail.com
Sat May 21 09:47:02 PDT 2011


Hi,

I did a "LANG=C pulseaudio --system --high-priority -vvvv
>/root/pulseverbose.log 2>&1" on the client to write a detailed log file.
Here is the results when the remote client tries to connect:
-----------------------------------------------------------------
I: client.c: Created 9 "Native client (TCP/IP client from 127.0.0.1:50604)"
I: protocol-native.c: Client authenticated anonymously.
E: client-ext.c: client-ext.c: Can't obtain command line
D: client-ext.c: new/modified client (idx=9) (Native client (TCP/IP client
from 127.0.0.1:50604)|<noid>|0|0|<noexe>|<noarg>|<noargs>)
D: protocol-native.c: Protocol version: remote 16, local 16
D: protocol-native.c: SHM possible: no
D: protocol-native.c: Negotiated SHM: no
E: protocol-native.c: protocol error, kicking client
I: client.c: Freed 9 "Native client (TCP/IP client from 127.0.0.1:50604)"
D: client-ext.c: client removed (idx=9)
-----------------------------------------------------------------

Still have not got further to solving the "protocol error" problem.  Maybe
something to do with SHM?

br,
Quinn

On Sat, May 21, 2011 at 5:14 PM, Quinn Plattel <qiet72 at gmail.com> wrote:

> Hi,
>
> Some more attempts.  I have now tried this:
> client (session 1): stop pulseaudio
> client (session 1): pulseaudio --system --high-priority -C
>
> client (session 2): ssh -R 4000:localhost:4000 user at server
> client (session 3): socat TCP-LISTEN:4000,fork
> UNIX-CONNECT:/var/run/pulse/native
>
> server: export PULSE_SERVER=localhost:4000
> server: pactl stat
>
> client (session 1) response (pulseaudio): E: protocol-native.c: protocol
> error, kicking client
>
> "protocol error" - how can we go deeper to debug the problem?
>
> Pulseaudio version information:
> server: 0.9.22~0.9.21+stable-queue-32-g8478-0ubuntu14
> client: 0.9.15-1maemo43+0m5
>
> client pulseaudio modules loaded (pactl list|grep "Name: module")
> -----------------------------------------------
>     Name: module-native-protocol-unix
>     Name: module-simple-protocol-unix
>     Name: module-stream-restore
>     Name: module-rescue-streams
>     Name: module-suspend-on-idle
>     Name: module-augment-properties
>     Name: module-null-sink
>     Name: module-alsa-sink-old
>     Name: module-alsa-sink-volume
>     Name: module-alsa-source-old
>     Name: module-nokia-voice
>     Name: module-nokia-music
>     Name: module-nokia-record
>     Name: module-alsa-sink-old
>     Name: module-alsa-source-old
>     Name: module-bluetooth-discover
>     Name: module-combine
>     Name: module-esound-protocol-unix
>     Name: module-native-protocol-tcp
>     Name: module-policy-enforcement
>     Name: module-match
>     Name: module-cli
> -----------------------------------------------
>
> br,
> Quinn
>
>
> On Sat, May 21, 2011 at 11:29 AM, Quinn Plattel <qiet72 at gmail.com> wrote:
>
>> Hi,
>>
>> I finally got some more details from pulseaudio.  I did this on the
>> client:
>> ----------------------------------
>> # stop pulseaudio
>> # pulseaudio --system --high-priority -C
>> ----------------------------------
>>
>> Now, when I run "pactl stat" on the server, pulseaudio on the client
>> reports:
>> --------------------------------------
>> E: client-ext.c: client-ext.c: Can't obtain command line
>> E: protocol-native.c: protocol error, kicking client
>> ---------------------------------------
>>
>> This is strange because pactl on the server side reports that the protocol
>> version is the same on both the remote and the local side:
>>
>> ------------------------------------------
>> Using shared memory pool with 1024 slots of size 64.0 KiB each, total size
>> is 64.0 MiB, maximum usable slot size is 65472
>> Trying to connect to localhost:4713...
>> SHM possible: yes
>> Protocol version: remote 16, local 16
>> Negotiated SHM: no
>> Connection failure: Connection terminated
>> ------------------------------------------
>>
>> Any ideas?
>>
>> br,
>> Quinn
>>
>>
>>
>> On Sat, May 21, 2011 at 10:53 AM, Quinn Plattel <qiet72 at gmail.com> wrote:
>>
>>> Hi,
>>>
>>> I found this message when I am trying to tunnel 4713 via ssh "ssh -L
>>> 4713:localhost:4713 user at server":
>>> ------------------------------------------------------------
>>> bind: Address already in use
>>> channel_setup_fwd_listener: cannot listen to port: 4713
>>> Could not request local forwarding.
>>> ------------------------------------------------------------
>>>
>>> BUT, this seems to work "ssh -R 4713:localhost:4713 user at server" (notice
>>> the "-R" parameter)
>>>
>>> So, it seems the forwarding direction has some say in this.  Forwarding
>>> from local to remote is not the right way, but forwarding from remote to
>>> local is the correct way.
>>>
>>> "pactl stat" also seems to get a bit futher this time with the correct
>>> tunnelling direction:
>>> -------------------------------------------------------------------------
>>>
>>> Using shared memory pool with 1024 slots of size 64.0 KiB each, total
>>> size is 64.0 MiB, maximum usable slot size is 65472
>>> Trying to connect to localhost:4713...
>>>  SHM possible: yes
>>> Protocol version: remote 16, local 16
>>> Negotiated SHM: no
>>> Connection failure: Connection terminated
>>> -------------------------------------------------------------------------
>>>
>>> So now we are down from "connection refused" to "connection failure:
>>> connection terminated".
>>>
>>> If I attach an strace to the pulseaudio process then this happens when
>>> "pactl stat" tries to connect to it remotely:
>>>
>>> ---------------------------------------------------------------------------
>>> Process 1075 attached - interrupt to quit
>>> restart_syscall(<... resuming interrupted call ...>) = 1
>>> accept(57, 0, NULL)                     = 66
>>> fcntl64(66, F_GETFD)                    = 0
>>> fcntl64(66, F_SETFD, FD_CLOEXEC)        = 0
>>> setsockopt(57, SOL_SOCKET, SO_PRIORITY, [6], 4) = 0
>>> setsockopt(57, SOL_TCP, TCP_NODELAY, [1], 4) = 0
>>> setsockopt(57, SOL_IP, IP_TOS, [16], 4) = 0
>>> fcntl64(66, F_GETFL)                    = 0x2 (flags O_RDWR)
>>> fcntl64(66, F_SETFL, O_RDWR|O_NONBLOCK) = 0
>>> fstat64(66, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0
>>> getpeername(66, {sa_family=AF_INET, sin_port=htons(54205),
>>> sin_addr=inet_addr("127.0.0.1")}, [16]) = 0
>>> getpeername(66, {sa_family=AF_INET, sin_port=htons(54205),
>>> sin_addr=inet_addr("127.0.0.1")}, [16]) = 0
>>> setsockopt(66, SOL_SOCKET, SO_RCVBUF, [16344], 4) = 0
>>> setsockopt(66, SOL_SOCKET, SO_SNDBUF, [16344], 4) = 0
>>> getsockname(66, {sa_family=AF_INET, sin_port=htons(4713),
>>> sin_addr=inet_addr("127.0.0.1")}, [16]) = 0
>>> open("/proc/0/cmdline", O_RDONLY)       = -1 ENOENT (No such file or
>>> directory)
>>> ioctl(2, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbed12ef4) = -1 ENOTTY
>>> (Inappropriate ioctl for device)
>>> write(2, "E: client-ext.c: client-ext.c: Ca"..., 57) = 57
>>>
>>> ---------------------------------------------------------------------------
>>>
>>> I am assuming the problem lies on the client side and not on the server
>>> side.  Any more ideas?  How can I see what is going on with the pulseaudio
>>> daemon when a remote client is trying to connect?
>>>
>>> br,
>>> Quinn
>>>
>>>
>>> On Sat, May 21, 2011 at 10:31 AM, Quinn Plattel <qiet72 at gmail.com>wrote:
>>>
>>>> Hi,
>>>>
>>>> From what Colin says, the standard port is 4713 for pulseaudio.  As I
>>>> said before all network ports are blocked except port 22 which is only for
>>>> ssh connections.
>>>> I should be able to tunnel port 4713 through ssh by doing this: "ssh -L
>>>> 4713:localhost:4713 user at server".  Then I can tell pulseaudio to use
>>>> the servers local port 4713 which is automatically forwarded to the client's
>>>> local port 4713.  But from what "pactl stat" command is telling me, then
>>>> port 4713 on the client side seems to be blocked as it is giving a
>>>> "connection refused".  I know the tunnelling works with ssh because I use
>>>> vnc connections through ssh by "ssh -L 5901:localhost:5901 user at server"
>>>> and that works perfectly with my vnc client and server solution.
>>>>
>>>> I am not sure if I can use "pactl load-module
>>>> module-protocol-native-tcp" together with tunnelled tcp connections.  I need
>>>> more details on how to that.
>>>>
>>>> btw, I can see there is something listening on port 4713 on the client
>>>> when I use the "netstat -an|grep 4713" command:
>>>> ---------------------------------------------------------
>>>> tcp        0      0 0.0.0.0:4713            0.0.0.0:*
>>>> LISTEN
>>>> ---------------------------------------------------------
>>>> So now the question is why does the listener process on the client not
>>>> accept pulseaudio data via the ssh tunnel?
>>>>
>>>> br,
>>>> Quinn
>>>>
>>>>
>>>>
>>>>
>>>> On Fri, May 20, 2011 at 7:15 PM, Fred Frigerio <ffrigerio at frigerio.us>wrote:
>>>>
>>>>> Have you tried  redirecting the port in SSH? Then you get the native PA
>>>>> with SSH. I am not sure if there is some standard port.
>>>>>
>>>>> Fred Frigerio
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Fri, May 20, 2011 at 1:01 PM, Quinn Plattel <qiet72 at gmail.com>wrote:
>>>>>
>>>>>> Here is pactl stat on the client side:
>>>>>>
>>>>>>
>>>>>> PULSE_LOG=99 pactl stat
>>>>>> -------------------------------------------------
>>>>>> Using private memory pool with 1024 slots of size 16,0 KiB each, total
>>>>>> size is 16,0 MiB, maximum usable slot size is 16344
>>>>>> Trying to connect to
>>>>>> /home/user/.pulse/fbd5d27658d3fcf30cb25bf800531799:runtime/native...
>>>>>> connect(): No such file or directory (2)
>>>>>> Trying to connect to /var/run/pulse/native...
>>>>>> SHM possible: no
>>>>>>
>>>>>> Protocol version: remote 16, local 16
>>>>>> Negotiated SHM: no
>>>>>> Currently in use: 1 blocks containing 16,0 KiB bytes total.
>>>>>> Allocated during whole lifetime: 263989 blocks containing 231,3 MiB
>>>>>> bytes total.
>>>>>>
>>>>>> Sample cache size: 0 B
>>>>>> User name: pulse
>>>>>> Host Name: Nokia-N900
>>>>>> Server Name: pulseaudio
>>>>>> Server Version: 0.9.15
>>>>>> Default Sample Specification: s16le 2ch 48000Hz
>>>>>>
>>>>>> Default Channel Map: front-left,front-right
>>>>>> Default Sink: sink.music
>>>>>> Default Source: source.record
>>>>>> Cookie: 26e54bb2
>>>>>> -------------------------------------------------
>>>>>>
>>>>>> br,
>>>>>> Quinn
>>>>>>
>>>>>>
>>>>>> On Fri, May 20, 2011 at 6:58 PM, Quinn Plattel <qiet72 at gmail.com>wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> This is interesting:
>>>>>>>
>>>>>>> client: ssh -XL 4713:localhost:4713 user at server
>>>>>>> server: PULSE_LOG=99 pactl stat
>>>>>>> ----------------------------------------
>>>>>>> Using shared memory pool with 1024 slots of size 64.0 KiB each, total
>>>>>>> size is 64.0 MiB, maximum usable slot size is 65472
>>>>>>> Trying to connect to
>>>>>>> /home/quinn/.pulse/1ffe0fd6b5c9262aaa374e734c2cc8d0-runtime/native...
>>>>>>> SHM possible: yes
>>>>>>> Protocol version: remote 16, local 16
>>>>>>> Negotiated SHM: yes
>>>>>>> Currently in use: 1 blocks containing 63.9 KiB bytes total.
>>>>>>> Allocated during whole lifetime: 15741 blocks containing 81.5 MiB
>>>>>>> bytes total.
>>>>>>> Sample cache size: 0 B
>>>>>>> User name: quinn
>>>>>>> Host Name: server
>>>>>>> Server Name: pulseaudio
>>>>>>> Server Version: 0.9.21-63-gd3efa-dirty
>>>>>>> Default Sample Specification: s16le 2ch 44100Hz
>>>>>>> Default Channel Map: front-left,front-right
>>>>>>> Default Sink: auto_null
>>>>>>> Default Source: auto_null.monitor
>>>>>>> Cookie: 6ccbf517
>>>>>>> ----------------------------------------
>>>>>>> server: export PULSE_SERVER=localhost:4713
>>>>>>> server: PULSE_LOG=99 pactl stat
>>>>>>> ---------------------------------------
>>>>>>> Using shared memory pool with 1024 slots of size 64.0 KiB each, total
>>>>>>> size is 64.0 MiB, maximum usable slot size is 65472
>>>>>>> Trying to connect to localhost:4713...
>>>>>>> connect(): Connection refused
>>>>>>> Connection failure: Connection refused
>>>>>>> ---------------------------------------
>>>>>>>
>>>>>>> Ideas?
>>>>>>>
>>>>>>> Quinn
>>>>>>>
>>>>>>> On Fri, May 20, 2011 at 5:48 PM, Colin Guthrie <gmane at colin.guthr.ie
>>>>>>> > wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> 'Twas brillig, and Quinn Plattel at 20/05/11 15:52 did gyre and
>>>>>>>> gimble:
>>>>>>>> > I am currently trying to attempt to redirect pulse audio sound
>>>>>>>> from a
>>>>>>>> > server to a client through ssh.  I am bit unclear on what the
>>>>>>>> correct
>>>>>>>> > way is of doing it.
>>>>>>>>
>>>>>>>> Firstly, I wrote up how our X11 piggy backing stuff work here:
>>>>>>>>
>>>>>>>>
>>>>>>>> http://colin.guthr.ie/2009/08/sound-on-linux-is-confusing-defuzzing-part-2-pulseaudio/
>>>>>>>>
>>>>>>>>
>>>>>>>> Technically we do not tunnel over SSH directly (this can of course
>>>>>>>> be
>>>>>>>> done, but not automatically as SSH does not know about PA in the
>>>>>>>> same
>>>>>>>> way it knows about X11). We can however piggy back on the X11
>>>>>>>> forwarding
>>>>>>>> built into SSH for our authentication (cookie) and server connection
>>>>>>>> strings.
>>>>>>>>
>>>>>>>> If this is on a private network (direct routing) then the built in
>>>>>>>> way
>>>>>>>> is the best, but it doesn't go over SSH. You just need to ensure the
>>>>>>>> machine you're sshing from has the netwrok protocol module loaded
>>>>>>>> into
>>>>>>>> PA (pactl load-module module-protocol-native-tcp, or put it in your
>>>>>>>> default.pa) and make sure port 4713/tcp is open for external
>>>>>>>> connections.
>>>>>>>>
>>>>>>>> Also ensure that module-x11-publish is loaded on the client side and
>>>>>>>> you
>>>>>>>> should get some interesting results from "xprop -root | grep PULSE".
>>>>>>>>
>>>>>>>> Then when you ssh with x11 forwarding running the xprop command on
>>>>>>>> the
>>>>>>>> remote machine should show you the same results.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> If you cannot use the direct connection, just setup TCP tunnels in
>>>>>>>> your
>>>>>>>> SSH config and then hack the PULSE_SERVER property or env var on the
>>>>>>>> remote machine to point to e.g. localhost:4713 which will actually
>>>>>>>> be a
>>>>>>>> tunnel back to localhost:4713 on the remote machine. The
>>>>>>>> PULSE_COOKIE
>>>>>>>> stuff already forwarded should be enough for auth.
>>>>>>>>
>>>>>>>> For debugging connections:
>>>>>>>>
>>>>>>>> PULSE_LOG=99 pactl stat
>>>>>>>>
>>>>>>>> This shows you e.g. the server name it's trying to connect to etc.
>>>>>>>>
>>>>>>>>
>>>>>>>> Hope that helps (although I wrote it really quick so apologies if it
>>>>>>>> doesn't! I'll clarify later if needs be :D)
>>>>>>>>
>>>>>>>> Col
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>>
>>>>>>>> Colin Guthrie
>>>>>>>> gmane(at)colin.guthr.ie
>>>>>>>> http://colin.guthr.ie/
>>>>>>>>
>>>>>>>> Day Job:
>>>>>>>>  Tribalogic Limited [http://www.tribalogic.net/]
>>>>>>>> Open Source:
>>>>>>>>  Mageia Contributor [http://www.mageia.org/]
>>>>>>>>  PulseAudio Hacker [http://www.pulseaudio.org/]
>>>>>>>>  Trac Hacker [http://trac.edgewall.org/]
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> pulseaudio-discuss mailing list
>>>>>>>> pulseaudio-discuss at mail.0pointer.de
>>>>>>>> https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Best regards/Med venlig hilsen,
>>>>>> Quinn Plattel
>>>>>>
>>>>>> _______________________________________________
>>>>>> pulseaudio-discuss mailing list
>>>>>> pulseaudio-discuss at mail.0pointer.de
>>>>>> https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> pulseaudio-discuss mailing list
>>>>> pulseaudio-discuss at mail.0pointer.de
>>>>> https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Best regards/Med venlig hilsen,
>>>> Quinn Plattel
>>>>
>>>
>>>
>>>
>>> --
>>> Best regards/Med venlig hilsen,
>>> Quinn Plattel
>>>
>>
>>
>>
>> --
>> Best regards/Med venlig hilsen,
>> Quinn Plattel
>>
>
>
>
> --
> Best regards/Med venlig hilsen,
> Quinn Plattel
>



-- 
Best regards/Med venlig hilsen,
Quinn Plattel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/pulseaudio-discuss/attachments/20110521/bb9bef15/attachment.htm>


More information about the pulseaudio-discuss mailing list