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.