This page was written on July 20, 2008. The actual system tested is an eeepc; those run a hacked version of Xandros, which in turn is a derivative of Debian.
This information (mostly) resides in /usr/share/doc/bluetooth/README.Debian.gz too (see the section for PIN codes), but as there seems to be a lot of outdated information on the net, I decided to add to the confusion by writing this page. README.Debian.gz states that this is not supported, but I find this by far the easiest way to get pairing to work.
At least for me, hcid seems to want to use a passkey agent even if /etc/bluetooth/hcid.conf has "security auto" and a passkey stanza. A message of hcid, "call_passkey_agent(): no agent registered" is a symptom of this problem, and is logged with facility daemon, errorlevel debug, which usually ends in /var/log/daemon.log but on Xandros in /var/log/daemon/daemon.debug.
One way to fix this is to compile the passkey agent, but you can also just supply the PIN in /var/lib/bluetooth/<local device id>/pincodes. Insert a line with the remote device id (you can obtain this by hcitool scan), a space, and the PIN code, for instance like this (as root):
$ echo "<remote device id> <PIN>" > /var/lib/bluetooth/<local device id>/pincodes
If you don't know the local device id, just do a ls -l /var/lib/bluetooth. Usually there is only one subdirectory there.