Bhyve serial terminal server

Paul Vixie paul at
Wed Jul 3 22:40:06 UTC 2019

On Wednesday, 3 July 2019 19:45:45 UTC Eric van Gyzen wrote:
> I would like to expose bhyve serial consoles over TCP sockets, like many
> terminal servers do for hardware serial ports.  Is there any open-source
> software to do this?

as i said, "pkg install rtty" was created for this purpose and it's what i 
use. but then, i wrote it, in 1991 or so, while employed at d|i|g|i|t|a|l who 
gave me a room full of vaxes but no way to keep track of them all. a demo:

> [mm1.redbarn:amd64] console
> family          guests          pbx             sleipnir        util
> [mm1.redbarn:amd64] console pbx
> connected
> (use (CR)~? for minimal help; also (CR)~q? and (CR)~s?)
> [authorized]
> [vixie@/dev/pts/0 connected]
> FreeBSD/amd64 ( (ttyu0)
> login: ~.
> [rtty exiting]
> [mm1.redbarn:amd64] ls -l /usr/local/rtty/dev
> total 3
> lrwxr-xr-x  1 root  wheel  11 May 18  2014 family@ -> /dev/nmdm2A
> lrwxr-xr-x  1 root  wheel  11 May 17  2014 guests@ -> /dev/nmdm0A
> lrwxr-xr-x  1 root  wheel  11 Nov 16  2014 pbx@ -> /dev/nmdm5A
> lrwxr-xr-x  1 root  wheel  11 Jun  1  2014 sleipnir@ -> /dev/nmdm3A
> lrwxr-xr-x  1 root  wheel  11 May 18  2014 util@ -> /dev/nmdm1A
> [mm1.redbarn:amd64] ps auxwww|grep ttysrv|head -1
> root    1578    0.0  0.0    6440    2088  -  I    17Jan19       0:00.03
> /usr/local/rtty/bin/ttysrv -b 9600 -w 8 -p none -t
> /usr/local/rtty/dev/family -s /usr/local/rtty/sock/family -l
> /usr/local/rtty/log/family -i /usr/local/rtty/pid/family root    1617   


> [mm1.redbarn:amd64] tail /usr/local/rtty/log/pbx
> Jul  3 22:04:01 pbx syslogd: last message repeated 1 times
> FreeBSD/amd64 ( (ttyu0)
> login: ~.
> [mm1.redbarn:amd64]

however, i'd like to add additional detail, below:

> I found ports/comms/conserver-com, which is /almost/ what I want.  I
> want the client to simply connect to a TCP port and get direct,
> immediate access to the guest console associated with that port.  Can
> conserver do this?  We have lots of infrastructure and tooling built
> around this model, and I'd rather avoid modifying it to support the
> conserver model.

as hinted by the name, rtty has a tcp listener/connection model in addition to 
the more common unix domain socket connection model i normally use:

> [mm1.redbarn:amd64] ls -l /usr/local/rtty/sock
> total 3
> srw-rw----  1 root  wheel     0 Jan 17 15:06 family=
> srw-rw----  1 root  wheel     0 Jan 17 15:06 guests=
> srw-rw----  1 root  wheel     0 Jan 17 15:06 pbx=
> srw-rw----  1 root  sleipnir  0 Jan 17 15:06 sleipnir=
> srw-rw----  1 root  wheel     0 Jan 17 15:06 util=

however, the protocol is not "direct" or "immediate", and indeed cannot be so, 
because i have to be able to encode things like BREAK and seeing or changing 
the baud rate and word size and so on. i should have used telnet encoding, but 
that didn't have a location broker and i didn't want to have to assign or 
memorize port numbers, and the only authentication telnet had when i began 
this work was in-band or kerberos, neither of which fit my needs.

my tcp listener and unix domain listener speak the same (stream) protocol.

see for details.

you could pretty easily use the supplied "rtty" client program for management, 
but, there is no authentication or encryption. when i want to give someone 
remote access to a guest VM, i do it with ssh, and i use rtty as their login 
shell. that's when unix domain sockets and their file modes and group and user 
ownership become important.


More information about the freebsd-virtualization mailing list