Scheduled Maintenance: We are aware of an issue with Google, AOL, and Yahoo services as email providers which are blocking new registrations. We are trying to fix the issue and we have several internal and external support tickets in process to resolve the issue. Please see: viewtopic.php?t=158230

 

 

 

SSH - Forwarding X11 and sound

Linux Kernel, Network, and Services configuration.
Post Reply
Message
Author
bedtime
Posts: 146
Joined: 2012-12-16 19:34
Has thanked: 1 time
Been thanked: 6 times

SSH - Forwarding X11 and sound

#1 Post by bedtime »

I have successfully forwarded X11 from my Fedora 29 server to my Debian 9 client. So that's all good.

My issue is getting SSH to forward sound. I've already posted on the Fedora forum, and it seems that forum is not getting much activity as of late... I'll just jump right in with configs and such:

Fedora Server:

IP: 192.168.0.155

/etc/ssh/sshd_config:

Code: Select all

Port 22
Protocol 2

PermitRootLogin no
PubkeyAuthenticaion yes
PasswordAuthentication no
UsePam yes

AllowAgentForwarding yes
AllowTcpForwarding yes
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalHost no

Debian Client:

IP: 192.168.0.103

/etc/ssh/ssh_config:

Code: Select all

Host *
ForwardAgent yes
ForwardX11 yes
ForwardX11Trusted yes
PubkeyAuthentication yes
Port 22
Protocol 2
.xinitrc:

Code: Select all

#!/bin/sh

# Start SSH in Awesome window manager (hosted by server)
ssh -R 24713:192.168.0.155:4713 -o "PreferredAuthentications=publickey" -4 -Y user@192.168.0.155 awesome
One issue is that I've yet to find out the client's and server's pulseaudio port. The numbers above are only copied, as the writers said the default port is often 4713. Net searches say that the command 'pax11publish' will reveal it, but I get no response from it, though it seems be executed without error.

paprefs is installed. All appropriate settings are turned on. I installed pavucontrol to turn on volume. systemd status for sshd.service shows no errors.

This server/client stuff is new to me, so please be gentle. I'm just looking for any ideas. Been at this for days.
Last edited by bedtime on 2019-02-05 17:03, edited 2 times in total.

Ynot
Posts: 16
Joined: 2019-01-11 18:39

Re: SSH - Forwarding X11 and sound

#2 Post by Ynot »


bedtime
Posts: 146
Joined: 2012-12-16 19:34
Has thanked: 1 time
Been thanked: 6 times

Re: SSH - Forwarding X11 and sound

#3 Post by bedtime »

I've got it to work now, but it's extremely finicky. If I open a sound app in the server, the app can be easily heard in the client with no intervention. If try to SSH into an app (lets say firefox) in an openbox session on the client side, it will appear on the servers screen if it is logged into X. If it is not logged in, it will appear on the client's screen, but getting sound to work will be extremely finicky and involve opening/closing pulseaudio numerous times as well as adjust paprefs (PulseAudio Preferences). That said, the sound is great, and when it works, it's solid, but I want it to connect properly and survive a reboot.

Here is what I have for configs:

Server:

/etc/pulse/daemon.conf

Code: Select all

# This file is part of PulseAudio.
#
# PulseAudio is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# PulseAudio is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.

## Configuration file for the PulseAudio daemon. See pulse-daemon.conf(5) for
## more information. Default values are commented out.  Use either ; or # for
## commenting.

daemonize = yes
fail = no
allow-module-loading = yes
; allow-exit = yes
; use-pid-file = yes
; system-instance = no
; local-server-type = user
; enable-shm = yes
; enable-memfd = yes
; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB
; lock-memory = no
; cpu-limit = no

; high-priority = yes
; nice-level = -11

; realtime-scheduling = yes
; realtime-priority = 5

; exit-idle-time = 20
; scache-idle-time = 20

; dl-search-path = (depends on architecture)

; load-default-script-file = yes
; default-script-file = /etc/pulse/default.pa

; log-target = auto
; log-level = notice
; log-meta = no
; log-time = no
; log-backtrace = 0

; resample-method = speex-float-1
; avoid-resampling = false
; enable-remixing = yes
; remixing-use-all-sink-channels = yes
; enable-lfe-remixing = no
; lfe-crossover-freq = 0

; flat-volumes = no 

; rlimit-fsize = -1
; rlimit-data = -1
; rlimit-stack = -1
; rlimit-core = -1
; rlimit-as = -1
; rlimit-rss = -1
; rlimit-nproc = -1
; rlimit-nofile = 256
; rlimit-memlock = -1
; rlimit-locks = -1
; rlimit-sigpending = -1
; rlimit-msgqueue = -1
; rlimit-nice = 31
; rlimit-rtprio = 9
; rlimit-rttime = 200000

; default-sample-format = s16le
; default-sample-rate = 44100
; alternate-sample-rate = 48000
; default-sample-channels = 2
; default-channel-map = front-left,front-right

; default-fragments = 4
; default-fragment-size-msec = 25

; enable-deferred-volume = yes
; deferred-volume-safety-margin-usec = 8000
; deferred-volume-extra-delay-usec = 0
/etc/pulse/default.pa

Code: Select all

#!/usr/bin/pulseaudio -nF
#
# This file is part of PulseAudio.
#
# PulseAudio is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# PulseAudio is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.

# This startup script is used only if PulseAudio is started per-user
# (i.e. not in system mode)

.fail


load-module module-native-protocol-tcp
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;172.16.0.0/16
load-module module-zeroconf-publish
load-module module-alsa-sink device=hw:1,0



### Automatically restore the volume of streams and devices
load-module module-device-restore
load-module module-stream-restore
load-module module-card-restore

### Automatically augment property information from .desktop files
### stored in /usr/share/application
load-module module-augment-properties

### Should be after module-*-restore but before module-*-detect
load-module module-switch-on-port-available

### Load audio drivers statically
### (it's probably better to not load these drivers manually, but instead
### use module-udev-detect -- see below -- for doing this automatically)
#load-module module-alsa-sink
#load-module module-alsa-source device=hw:1,0
#load-module module-null-sink
#load-module module-pipe-sink

### Automatically load driver modules depending on the hardware available
.ifexists module-udev-detect.so
load-module module-udev-detect
.else
### Use the static hardware detection module (for systems that lack udev support)
load-module module-detect
.endif

### Automatically connect sink and source if JACK server is present
.ifexists module-jackdbus-detect.so
.nofail
load-module module-jackdbus-detect channels=2
.fail
.endif

### Automatically load driver modules for Bluetooth hardware
.ifexists module-bluetooth-policy.so
load-module module-bluetooth-policy
.endif

.ifexists module-bluetooth-discover.so
load-module module-bluetooth-discover
.endif

### Load several protocols
.ifexists module-esound-protocol-unix.so
load-module module-esound-protocol-unix
.endif
load-module module-native-protocol-unix

### Network access (may be configured with paprefs, so leave this commented
### here if you plan to use paprefs)
#load-module module-esound-protocol-tcp
#load-module module-native-protocol-tcp
#load-module module-zeroconf-publish

### Load the RTP receiver module (also configured via paprefs, see above)
#load-module module-rtp-recv

### Load the RTP sender module (also configured via paprefs, see above)
#load-module module-null-sink sink_name=rtp format=s16be channels=2 rate=44100 sink_properties="device.description='RTP Multicast Sink'"
#load-module module-rtp-send source=rtp.monitor

### Load additional modules from GSettings. This can be configured with the paprefs tool.
### Please keep in mind that the modules configured by paprefs might conflict with manually
### loaded modules.
.ifexists module-gsettings.so
.nofail
load-module module-gsettings
.fail
.endif

### Load additional modules from GConf settings. This can be configured with the paprefs tool.
### Please keep in mind that the modules configured by paprefs might conflict with manually
### loaded modules.
.ifexists module-gconf.so
.nofail
load-module module-gconf
.fail
.endif

### Automatically restore the default sink/source when changed by the user
### during runtime
### NOTE: This should be loaded as early as possible so that subsequent modules
### that look up the default sink/source get the right value
load-module module-default-device-restore

### Automatically move streams to the default sink if the sink they are
### connected to dies, similar for sources
load-module module-rescue-streams

### Make sure we always have a sink around, even if it is a null sink.
load-module module-always-sink

### Honour intended role device property
load-module module-intended-roles

### Automatically suspend sinks/sources that become idle for too long
load-module module-suspend-on-idle

### If autoexit on idle is enabled we want to make sure we only quit
### when no local session needs us anymore.
.ifexists module-console-kit.so
#load-module module-console-kit
.endif
.ifexists module-systemd-login.so
load-module module-systemd-login
.endif

### Enable positioned event sounds
load-module module-position-event-sounds

### Cork music/video streams when a phone stream is active
load-module module-role-cork

### Modules to allow autoloading of filters (such as echo cancellation)
### on demand. module-filter-heuristics tries to determine what filters
### make sense, and module-filter-apply does the heavy-lifting of
### loading modules and rerouting streams.
load-module module-filter-heuristics
load-module module-filter-apply

### Make some devices default
#set-default-sink output
#set-default-source input
/etc/pulse/system.pa

Code: Select all

#!/usr/bin/pulseaudio -nF
#
# This file is part of PulseAudio.
#
# PulseAudio is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# PulseAudio is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.

# This startup script is used only if PulseAudio is started in system
# mode.

### Automatically restore the volume of streams and devices
load-module module-device-restore
load-module module-stream-restore
load-module module-card-restore


load-module module-native-protocol-tcp
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;172.16.0.0/16
load-module module-zeroconf-publish
load-module module-alsa-sink device=hw:1,0

### Automatically load driver modules depending on the hardware available
.ifexists module-udev-detect.so
load-module module-udev-detect
.else
### Use the static hardware detection module (for systems that lack udev/hal support)
load-module module-detect
.endif

### Load several protocols
.ifexists module-esound-protocol-unix.so
load-module module-esound-protocol-unix
.endif
load-module module-native-protocol-unix

### Automatically restore the default sink/source when changed by the user
### during runtime
### NOTE: This should be loaded as early as possible so that subsequent modules
### that look up the default sink/source get the right value
load-module module-default-device-restore

### Automatically move streams to the default sink if the sink they are
### connected to dies, similar for sources
load-module module-rescue-streams

### Make sure we always have a sink around, even if it is a null sink.
load-module module-always-sink

### Automatically suspend sinks/sources that become idle for too long
load-module module-suspend-on-idle

### Enable positioned event sounds
load-module module-position-event-sounds
paprefs (PulseAudio Preferences):

Network Access -> [x] Make discoverable PulseAudio network sound devices available locally.
Multicast/RTP -> [x] Enable Multicast/RTP sender (create separate audio device for Multicast/RTP)

Client:

/etc/pulse/client.conf

Code: Select all

# This file is part of PulseAudio.
#
# PulseAudio is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# PulseAudio is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.

## Configuration file for PulseAudio clients. See pulse-client.conf(5) for
## more information. Default values are commented out.  Use either ; or # for
## commenting.

; default-sink =
; default-source =
; default-server =
; default-dbus-server =

autospawn = yes
; daemon-binary = /usr/bin/pulseaudio
; extra-arguments = --log-target=syslog

cookie-file = /home/user/.config/pulse/cookie

; enable-shm = yes
; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB

; auto-connect-localhost = no
; auto-connect-display = no
/etc/pulse/default.pa

Code: Select all

#!/usr/bin/pulseaudio -nF
#
# This file is part of PulseAudio.
#
# PulseAudio is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# PulseAudio is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.

# This startup script is used only if PulseAudio is started per-user
# (i.e. not in system mode)

.fail

### Automatically restore the volume of streams and devices
load-module module-device-restore
load-module module-stream-restore
load-module module-card-restore

load-module module-zeroconf-discover

### Automatically augment property information from .desktop files
### stored in /usr/share/application
load-module module-augment-properties

### Should be after module-*-restore but before module-*-detect
load-module module-switch-on-port-available

### Load audio drivers statically
### (it's probably better to not load these drivers manually, but instead
### use module-udev-detect -- see below -- for doing this automatically)
#load-module module-alsa-sink
#load-module module-alsa-source device=hw:1,0
#load-module module-oss device="/dev/dsp" sink_name=output source_name=input
#load-module module-oss-mmap device="/dev/dsp" sink_name=output source_name=input
#load-module module-null-sink
#load-module module-pipe-sink

### Automatically load driver modules depending on the hardware available
.ifexists module-udev-detect.so
load-module module-udev-detect
.else
### Use the static hardware detection module (for systems that lack udev support)
load-module module-detect
.endif

### Automatically connect sink and source if JACK server is present
.ifexists module-jackdbus-detect.so
.nofail
load-module module-jackdbus-detect channels=2
.fail
.endif

### Automatically load driver modules for Bluetooth hardware
.ifexists module-bluetooth-policy.so
load-module module-bluetooth-policy
.endif

.ifexists module-bluetooth-discover.so
load-module module-bluetooth-discover
.endif

### Load several protocols
.ifexists module-esound-protocol-unix.so
load-module module-esound-protocol-unix
.endif
load-module module-native-protocol-unix

### Network access (may be configured with paprefs, so leave this commented
### here if you plan to use paprefs)
#load-module module-esound-protocol-tcp
#load-module module-native-protocol-tcp
#load-module module-zeroconf-publish

### Load the RTP receiver module (also configured via paprefs, see above)
#load-module module-rtp-recv

### Load the RTP sender module (also configured via paprefs, see above)
#load-module module-null-sink sink_name=rtp format=s16be channels=2 rate=44100 sink_properties="device.description='RTP Multicast Sink'"
#load-module module-rtp-send source=rtp.monitor

### Load additional modules from GSettings. This can be configured with the paprefs tool.
### Please keep in mind that the modules configured by paprefs might conflict with manually
### loaded modules.
.ifexists module-gsettings.so
.nofail
load-module module-gsettings
.fail
.endif


### Automatically restore the default sink/source when changed by the user
### during runtime
### NOTE: This should be loaded as early as possible so that subsequent modules
### that look up the default sink/source get the right value
load-module module-default-device-restore

### Automatically move streams to the default sink if the sink they are
### connected to dies, similar for sources
load-module module-rescue-streams

### Make sure we always have a sink around, even if it is a null sink.
load-module module-always-sink

### Honour intended role device property
load-module module-intended-roles

### Automatically suspend sinks/sources that become idle for too long
load-module module-suspend-on-idle

### If autoexit on idle is enabled we want to make sure we only quit
### when no local session needs us anymore.
.ifexists module-console-kit.so
load-module module-console-kit
.endif
.ifexists module-systemd-login.so
load-module module-systemd-login
.endif

### Enable positioned event sounds
load-module module-position-event-sounds

### Cork music/video streams when a phone stream is active
load-module module-role-cork

### Modules to allow autoloading of filters (such as echo cancellation)
### on demand. module-filter-heuristics tries to determine what filters
### make sense, and module-filter-apply does the heavy-lifting of
### loading modules and rerouting streams.
load-module module-filter-heuristics
load-module module-filter-apply

### Make some devices default
#set-default-sink output
#set-default-source input
/etc/pulse/system.pa

Code: Select all

#!/usr/bin/pulseaudio -nF
#
# This file is part of PulseAudio.
#
# PulseAudio is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# PulseAudio is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.

# This startup script is used only if PulseAudio is started in system
# mode.

### Automatically restore the volume of streams and devices
load-module module-device-restore
load-module module-stream-restore
load-module module-card-restore
load-module module-zeroconf-discover

### Automatically load driver modules depending on the hardware available
.ifexists module-udev-detect.so
load-module module-udev-detect
.else
### Use the static hardware detection module (for systems that lack udev/hal support)
load-module module-detect
.endif

### Load several protocols
.ifexists module-esound-protocol-unix.so
load-module module-esound-protocol-unix
.endif
load-module module-native-protocol-unix

### Automatically restore the default sink/source when changed by the user
### during runtime
### NOTE: This should be loaded as early as possible so that subsequent modules
### that look up the default sink/source get the right value
load-module module-default-device-restore

### Automatically move streams to the default sink if the sink they are
### connected to dies, similar for sources
load-module module-rescue-streams

### Make sure we always have a sink around, even if it is a null sink.
load-module module-always-sink

### Automatically suspend sinks/sources that become idle for too long
load-module module-suspend-on-idle

### Enable positioned event sounds
load-module module-position-event-sounds
paprefs (PulseAudio Preferences):

Network Access -> [x] Make discoverable PulseAudio network sound devices available locally.
Multicast/RTP -> [x] Enable Multicast/RTP receiver

The server has gnome-shell installed and is generally displaying its desktop. Perhaps it's better to have it logged out?

The command used to connect to the server is:

Code: Select all

ssh -Y user@192.168.0.157 firefox
Regardless, it seems that the pulseaudio connection has nothing to do with SSH, as I can stop both server and client SSH daemons, and it still runs.

xauth, paprefs, pavucontrol, and dbus-x11 are installed on both systems.

Any ideas?

bedtime
Posts: 146
Joined: 2012-12-16 19:34
Has thanked: 1 time
Been thanked: 6 times

Re: SSH - Forwarding X11 and sound

#4 Post by bedtime »

Got it working, and now I'm going to share how I did it! :D

This will allow a client to connect to a server and pass sound through SSH. The sound will be encrypted, and so it is safe to use outside a local connection. The audio will be be in sync, as it is merely being passes along at the same time with Xorg. The overhead, as I can see from htop, is so small as to be unnoticeable; Xorg video seems to have the lion's share of CPU.

Here goes:

Make sure that you are able to forward X11 from a server to client via SSH first. I will not cover this part unless someone asks.

Server:

Install 'paprefs' and 'pavucontrol' (to adjust volume if needed). Run 'paprefs' as user and select ONLY the option:

Network Access -> [x] Make discoverable PulseAudio network sound devices available locally.

No other option should be selected. If it is, it might not work or will create a great deal of confusion for you.

Don't touch 'system.pa' or 'default.pa' in any way if it is displaying its defaults.

Copy the cookie from server to client:

Code: Select all

scp /home/USER/.config/pulse/cookie CLIENT_USER@CLIENT_IP:/home/USER/.config/pulse/
CLIENT_USER is your client's user name. ex, user
CLIENT_IP is your client's IP. ex, 192.168.0.157

Edit and add to /home/USER/.bash_profile exactly as it is (leave 'localhost' as it is):

Code: Select all

PULSE_SERVER="tcp:localhost:24713"


Client:

Install 'paprefs' and 'pavucontrol', and like in the server, do NOT check any other options aside from the following:

Network Server -> [x] Enable network access to local sound devices
[x] Allow other machines on the LAN to discover local sound devices
[x] Don't require authentication

Edit and add to /home/USER/.bashrc if your window manager does not start pulseaudio for you:

Code: Select all

pulseaudio --start
Start the SSH session with something like:

Code: Select all

ssh -R 24713:192.168.0.157:4713 user@192.168.0.157 openbox-session
192.168.0.157 is my server's IP
4713 is the server's port for pulseaudio
24713 is the port that is bound to the server's pulseaudio port (4713) and available for the client to connect to
openbox-session is merely a window manager program that I chose to run

I am still new to this, so please correct any mistakes that I might have made.

*EDIT*

Just found out that the avahi-server MUST be running for this to work!

Code: Select all

# systemctl enable avahi-server
Last edited by bedtime on 2019-02-09 15:56, edited 1 time in total.

bedtime
Posts: 146
Joined: 2012-12-16 19:34
Has thanked: 1 time
Been thanked: 6 times

Re: SSH - Forwarding X11 and sound

#5 Post by bedtime »

One more question:

How can I tell that SSH is actually forwarding the port connection for pulseaudio and that the client is actually using it?

Here is what I have for connections (note the user@server and user@client):

Code: Select all

[user@server ~]$ lsof -i tcp -n
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
pulseaudi  960 user   49u  IPv6  24331      0t0  TCP [2001:1970:4f9c:3600:b127:33a8:33f5:ea4a]:60470->[2001:1970:4f9c:3600:6e88:14ff:fe42:d1f4]:pulseaudio (ESTABLISHED)
pulseaudi  960 user   50u  IPv4  24332      0t0  TCP 192.168.0.155:59558->192.168.0.210:pulseaudio (ESTABLISHED)
pulseaudi  960 user   67u  IPv6  27095      0t0  TCP [2001:1970:4f9c:3600:b127:33a8:33f5:ea4a]:60474->[2001:1970:4f9c:3600:6e88:14ff:fe42:d1f4]:pulseaudio (ESTABLISHED)
pulseaudi  960 user   68u  IPv4  27096      0t0  TCP 192.168.0.155:59562->192.168.0.210:pulseaudio (ESTABLISHED)
Xvnc      1149 user    6u  IPv4  24247      0t0  TCP *:5905 (LISTEN)
Xvnc      1149 user    7u  IPv6  24248      0t0  TCP *:5905 (LISTEN)
Xvnc      1149 user   11u  IPv4  27086      0t0  TCP 192.168.0.155:5905->192.168.0.210:54234 (ESTABLISHED)
firefox   2751 user  132u  IPv4  37443      0t0  TCP 192.168.0.155:60452->52.24.112.149:https (ESTABLISHED)
firefox   2751 user  166u  IPv4  43310      0t0  TCP 192.168.0.155:60390->107.20.240.232:https (ESTABLISHED)
firefox   2751 user  170u  IPv4  43315      0t0  TCP 192.168.0.155:33320->184.72.104.138:https (ESTABLISHED)
firefox   2751 user  195u  IPv4  42436      0t0  TCP 192.168.0.155:51916->50.16.241.130:https (ESTABLISHED)
firefox   2751 user  256u  IPv4  55710      0t0  TCP 192.168.0.155:54484->23.21.193.169:https (ESTABLISHED)
firefox   2751 user  281u

[user@server ~]$ echo $PULSE_SERVER
tcp:localhost:24713

Code: Select all

user@client:~$ lsof -i tcp -n
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ssh       697 user    3u  IPv4  19611      0t0  TCP 192.168.0.210:53826->192.168.0.155:ssh (ESTABLISHED)
pulseaudi 717 user    4u  IPv6  19666      0t0  TCP [2001:1970:4f9c:3600:6e88:14ff:fe42:d1f4]:4713->[2001:1970:4f9c:3600:b127:33a8:33f5:ea4a]:60470 (ESTABLISHED)
pulseaudi 717 user    9u  IPv4  19667      0t0  TCP 192.168.0.210:4713->192.168.0.155:59558 (ESTABLISHED)
pulseaudi 717 user   31u  IPv6  17279      0t0  TCP *:4713 (LISTEN)
pulseaudi 717 user   32u  IPv4  17280      0t0  TCP *:4713 (LISTEN)
pulseaudi 717 user   42u  IPv6  19668      0t0  TCP [2001:1970:4f9c:3600:6e88:14ff:fe42:d1f4]:4713->[2001:1970:4f9c:3600:b127:33a8:33f5:ea4a]:60474 (ESTABLISHED)
pulseaudi 717 user   43u  IPv4  19669      0t0  TCP 192.168.0.210:4713->192.168.0.155:59562 (ESTABLISHED)
ssh       731 user    3u  IPv4  17293      0t0  TCP 192.168.0.210:53834->192.168.0.155:ssh (ESTABLISHED)
vncviewer 743 user    4u  IPv4  18005      0t0  TCP 192.168.0.210:54234->192.168.0.155:5905 (ESTABLISHED)
1970:4f9c:3600:b127:33a8:33f5:ea4a]:50042->[2607:f8b0:4020:806::200a]:https (ESTABLISHED)
I can hear sound okay, but that doesn't mean that it's coming from the SSH port. I use this command to connect:

Code: Select all

user@client:~$ ssh -f -N user@192.168.0.155 -R 24713:localhost:3000

[user@server ~]$ PULSE_SERVER="tcp: localhost:24713"

Post Reply