Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.allthingslinux.org/llms.txt

Use this file to discover all available pages before exploring further.

efingerd serves finger queries at finger username@atl.sh on port 79. It’s socket-activated via systemd — no daemon runs until a connection arrives.

How it works

finger client → systemd socket (:79) → efingerd
               → runs /etc/efingerd/luser script
               → reads ~/.plan and ~/.project
When a finger request arrives, systemd accepts the connection and spawns efingerd. efingerd runs one of its handler scripts depending on the query type:
ScriptTriggered byPurpose
luserfinger username@atl.shLook up a specific user
listfinger @atl.shList logged-in users
nouserfinger nonexistent@atl.shHandle unknown users
logAll queriesLogging
The luser script reads ~/.plan and ~/.project to build the response. If the user has a ~/.efingerd executable script, it runs that instead.

User files

FilePurpose
~/.planFree-form text — what you’re working on, thinking about
~/.projectOne-line project description
~/.efingerdOptional custom script for full control over output
Both .plan and .project are created from /etc/skel/ when the account is provisioned. Edit them with any text editor:
nano ~/.plan

Custom finger script

For full control, create an executable ~/.efingerd:
#!/bin/bash
echo "Login: $1"
echo "Last seen: $(last -1 $1 | head -1 | awk '{print $4, $5, $6, $7}')"
echo ""
cat ~/.plan
Make it executable: chmod +x ~/.efingerd When present, efingerd runs this script instead of its default luser handler. $1 is the queried username, $2 is the requesting host.

Ansible configuration

FilePurpose
roles/services/tasks/finger.ymlInstall efingerd + finger client, set script permissions, deploy systemd units
roles/services/templates/finger.socket.j2Systemd socket unit (port 79)
roles/services/templates/finger@.service.j2Systemd service template unit
The finger client package is also installed — it’s needed by efingerd’s luser script to resolve user information. All scripts in /etc/efingerd/ are set to mode 0755 to ensure they’re executable.

Troubleshooting

finger returns nothing or “no such user”
  • Verify the user exists: getent passwd username
  • Check ~/.plan exists and is readable: ls -la ~/.plan
  • Test locally: finger username@localhost
finger returns garbled output
  • Emoji or non-ASCII in .plan can cause issues with some clients
  • The smoke test uses grep -c instead of direct output to avoid UTF-8 surrogate errors
Socket not listening
  • Check: systemctl status finger.socket
  • Restart: sudo systemctl restart finger.socket
  • Verify port: ss -tlnp | grep :79