
Show HN: WebRTTY – Share a terminal session over WebRTC - maxmcd
https://github.com/maxmcd/webrtty
======
snissn
Could anyone share a tutorial on how to set up a basic WebRTC text and/or
voice chat from scratch? I've tried but failed to get a proof of concept
built, and personally have not found any great documentation

~~~
Uehreka
As someone who has done some work with WebRTC (attempting to build a video
conferencing app for work) it's hard to boil things down to a "Hello World"
due to the whole ICE and signalling thing. It's unfortunate, but in order to
get this client-side peer-to-peer thing working, you need to have a server in
the cloud (i.e. not behind NAT) that can pass signals between the two peers.

The tutorials other people have linked to look good, just note that unless
you're talking between 2 computers within your local network (and even then
you'll have to copy-paste their IP addresses to each other), you'll need to
either deploy a server or use a 3rd party library like PeerJS that uses one.

I hope that eventually IPv6 will obviate the need for NAT and make this whole
thing much simpler, but until then, this is what we've got.

~~~
voltagex_
I wonder if there's any plans for peer discovery, at least locally.

I guess that's where your central server comes in - even in a perfect scenario
where there's no NAT between peers.

------
h43z
Neat idea to use WebRTC. Do I understand it correctly therefore no central
server is involved?

I was once in need to stream my shell to some colleges and so I hacked
together a tiny shellscript
[http://liveshell.43z.one/](http://liveshell.43z.one/) which should work on
most Linux systems without installing any dependencies.

~~~
maxmcd
Correct, no central server. It does use google's stun server to establish the
connection, but you can swap that out with another stun server with the -s
flag (it's easy to host your own and there are many free stun servers)

The -o flag makes things easier but uses
[https://10kb.site](https://10kb.site) to do the sdp exchange

That shell script is cool

~~~
verroq
With no TURN server I cannot see it will always work.

------
th0ma5
RTTY made me think radio and not remote. Still fun!

~~~
anilakar
It would be fun to run good old 45 baud RTTY over a WebRTC audio channel.

------
lgrahl
Neat! I wrote something similar [1] more than a year ago which allows you to
create one or more remote shells but sharing can only be done via tmux
(shameless advertising).

[1]: [https://github.com/rawrtc/rawrtc-terminal-
demo](https://github.com/rawrtc/rawrtc-terminal-demo)

~~~
maxmcd
Nice, I didn't realize there was an available non-chrome WebRTC DataChannel
library at that point.

~~~
Sean-Der
There have been a few libraries popup that tie libnice + OpenSSL + libsrtp +
usrsctp together, it is nice that the stack is all there. Just have to jump
through lots of hoops :) The creation of them also seems to be accelerating! I
think the P2P excitement has helped a lot.

* [https://github.com/xhs/librtcdc](https://github.com/xhs/librtcdc) (This was the first non-chrome one afaik)

* [https://github.com/chadnickbok/librtcdcpp](https://github.com/chadnickbok/librtcdcpp)

* [https://github.com/jlaine/aiortc](https://github.com/jlaine/aiortc)

* [https://github.com/rawrtc/rawrtc](https://github.com/rawrtc/rawrtc)

* [https://github.com/pions/webrtc](https://github.com/pions/webrtc)

* [https://github.com/nodertc](https://github.com/nodertc)

* [https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gs...](https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/gst-plugins-bad-plugins-webrtcbin.html)

There are also a few that aren't public, I haven't used them directly though.
Only by talking to other devs.

------
Sean-Der
Congrats on the release maxmcd, you really built something cool quick!

The best thing about Go is those easy deploys, it would be great to drop this
on a remote server and go at it. Could be helpful for getting quick shell help
for a friend. Or maybe a way for people to avoid having jump boxes (and SSH
only available via VPN) solutions are endless :)

------
gregwebs
Some related tools:
[https://github.com/yudai/gotty#alternatives](https://github.com/yudai/gotty#alternatives)

------
kbumsik
I'm not an expert in web, but isn't WebSockets better for this purpose? What's
the advantage of using WebRTC for text-based terminal over WebSockets?

~~~
matthewmacleod
WebRTC is mostly about peer-to-peer communication (with a focus on audio and
video support alongside data), whereas WebSockets is more about client-server
communication. That is, a WebSocket connection needs to be made explicitly to
some kind of server; WebRTC handles a peer-to-peer connection setup somewhat
transparently.

WebRTC still needs to communicate between peers in order to set up that
connection. In fact, many applications using it will use a WebSocket server to
handle that initial communication – basically messages between the peers that
say "this is where I am and how you can connect". In the case of this WebTTY
project, this initial communication is encoded in the "connection data" that
needs to be shared to set up the connection, so there's no need for that
channel.

------
souterrain
I don’t like the name. RTTY[1] is a thing, and this repo is not related to
that thing.

[1]:
[https://en.m.wikipedia.org/wiki/Radioteletype](https://en.m.wikipedia.org/wiki/Radioteletype)

~~~
tyingq
Cat is already out of the bag :)

[https://savannah.nongnu.org/projects/rtty/](https://savannah.nongnu.org/projects/rtty/)

They do call out the potential confusion with radio.

