Bounding Unicorns

How To Make talk Work On FreeBSD and Debian (Partially)

Today I finally managed to set up an intercomputer communication system with talk. On one end was FreeBSD 9, on the other end - Debian Jessie. Traditional Unix technology, which is what talk definitely qualifies as, often has interoperability issues between different Unix implementations like GNU/Linux and BSD variants. I succeeded in connecting from Debian to FreeBSD but going the other way - from FreeBSD to Debian - appears to be more or less impossible.

DNS

Connecting from Debian to FreeBSD requires reverse name resolution (that's DNS) to be configured on your network. If you are a real admin you already have DNS set up, if not - now is a good time to learn about bind.

Connecting from FreeBSD to Debian does not require name resolution at all, if you connect to IP addresses.

talkd

The second thing you will need is talkd installed and running on both computers. Initially I thought talkd was only needed on the receiving machine, but it must be running on both.

FreeBSD includes talk and talkd in the base system. To start talkd, edit /etc/inetd.conf and uncomment the talk line. Mine looked like this:

ntalk dgram udp wait tty:tty /usr/libexec/ntalkd ntalkd

Then, add inetd_enable=yes to /etc/rc.conf if it's not already there, and finally start inetd: /etc/rc.d/inetd start.

Debian does not include talk nor talkd by default. Now is a good time to install both:

apt-get install talk talkd

On Debian Jessie talkd depends on openbsd-inetd. You will want to restart the openbsd-inetd after talkd is installed:

/etc/init.d/openbsd-inetd restart

Talk!

With talkd running on both machines, you can talk from one to the other like so:

talk me@freebsdbox

On FreeBSD side, this prints the following in the currently open terminal:

Message from Talk_Daemon@debianbox at 19:03 on 2014/01/23 ...
talk: connection requested by me@debianbox
talk: respond with:  talk me@debianbox

To accept the connection, type talk me@debianbox in the terminal. You do not have to accept the connection in the same terminal where the invitation was printed.

Accepting or refusing messages

mesg program configures whether talk messages get to you. To find out your status:

mesg

to change your status:

mesg y
mesg n

Troubleshooting

If the Debian end prints this:

[Target machine does not recognize us]

when initially trying to connect from Debian, this means you do not have reverse DNS configured on the network.

If the FreeBSD end prints this:

[Checking for invitation on caller's machine]

after you accept the invitation on FreeBSD, this means talkd is not running on the Debian box or the FreeBSD box cannot connect to it.

If the FreeBSD end prints this:

[No connection yet]
[Your party is refusing messages]

The reason might be, per these posts, that on the Debian machine you are logged in in an X session or terminal session and not in a telnet or ssh session. Apparently there is no workaround, and talkd is the one and only talkd packaged under Debian. The only way talkd responds to invitations is if you have an SSH session open to the machine which, for my use case, defeats the purpose of using talk.

Alternatively you may have disabled talking to yourself via mesg commands per above.