PAGESEND(8)

πŸ“¦
version 6.0.7 Β· 2 versions
  • 6.0.7 Β· debian bookworm, debian trixie, ubuntu noble, ubuntu questing, ubuntu resolute, ubuntu stonking (latest)
  • 6.0.7 Β· ubuntu jammy
, in debian bookworm, debian trixie, ubuntu noble, ubuntu questing, ubuntu resolute, ubuntu stonking

πŸ’Œ PAGESEND β€” bestie edition πŸ’Œ

ok so. pagesend is the HylaFAX IXO/TAP and UCP transmit program, and it lives at PAGESEND(8) in the System Manager's Manual. yes it's a section 8 page, yes that means it's a system-manager-y thing, no that does not make it boring. come sit with me 🫢


✨ SYNOPSIS ✨

/usr/sbin/pagesend [ -l ] [ -p ] [ -c config ] -m device-ID qfile

that's the whole vibe. four flags max, one device, one file. slay.


🌸 DESCRIPTION 🌸

so pagesend is literally the program that implements the IXO/TAP and the UCP transmission protocol for the HylaFAX system. like, that's its whole job. it's the one doing the pager-transmitting.

it gets invoked by the faxq scheduler process, once for every single pager transmit attempt. so every time a pager message needs to go out, faxq is like "okay pagesend, you're up" πŸ’…

now here's the thing you have to know: pagesend assumes two things about its world, no cap β€”

  • that its current working directory is the top of the spooling hierarchy
  • that a suitable modem device has already been allocated for its use

and in normal use? it will inherit a lockfile for the modem from the faxq process. it doesn't go make its own. it's a nepo baby about the lockfile, respectfully.

the format of the job description file you pass on the command line is described in sendq(5). go read that if you need it, i'm not retyping it bestie.


so before it does literally anything else, pagesend initializes the modem, using the information in the appropriate modem configuration file, and then it attempts to transmit the pager message.

and if the modem does not respond to this initialization? it just... keeps trying. repeatedly. over and over. and that's not a bug, that's required behaviour for send-only environments, the ones where a faxgetty(8) process is not run β€” because in those setups there's nobody else around to know the modem is in a properly initialized state. so pagesend just sits there and tries again. iconic commitment honestly.

pagesend also catches SIGINT and SIGTERM and cleans up any resources it controls. and this is exactly the mechanism faxq uses to abort a job while it's in progress. so like, that's how the abort happens. that's the whole trick. πŸŽ€

many aspects of how pagesend operates are controlled through a configuration file. where does it live? in the spooler hierarchy, in the etc subdirectory, and it's named config.device-ID. consult hylafax-config(5) for the detailed tea on what goes inside configuration files.

and the protocol that must be used for a specific service provider? that's controlled from the hylafax-info(5) file. different provider, different protocol, all handled over there.


πŸ’… OPTIONS πŸ’…

  • -c config β€” treat config as a configuration parameter specification that gets interpreted after reading the per-device configuration file. for example, -c sessiontracing:0x4f would set the SessionTracing configuration parameter to 0x4f, overriding any setting in the configuration file. so it's the "actually, no, do this instead" flag.
  • -m devID β€” the device to use in processing the job. and listen, this is a device identifier, not the pathname of the tty special file. a device identifier is formed from a device filename by removing any leading /dev/ and converting any / characters to _ characters. don't @ me, that's just the rule.
  • -l β€” do the UUCP lockfile protocol inside pagesend. by default pagesend assumes it was invoked with the device already locked and that it does not need to manage the lockfile. so this flag is you saying "no actually, i'll handle the lock myself."
  • -p β€” do not change the process priority when transmitting. normally pagesend will raise its priority to reduce i/o latency. this option is useful for debugging. (read: it keeps things chill and observable instead of all turbo-charged.)

πŸ”₯ NOTES πŸ”₯

okay this part matters, so pay attention bestie. pagesend returns the new job status to faxq through the exit(2) return value of the process. and those values mean specific things:

  • send_retry (0) β€” retry job
  • send_failed (1) β€” job finished without success
  • send_done (2) β€” job completed successfully
  • send_reformat (3) β€” job should be retried after documents are reformatted

memorize these or at least bookmark them, fr fr.


πŸ¦‹ FILES πŸ¦‹

  • /var/spool/hylafax/etc/config.devID β€” device-specific configuration file

and consult hylafax-server(5) for a complete discussion of the structure and content of the spooling area. like, the whole thing. go read it.


πŸ‘‘ SEE ALSO πŸ‘‘


⚠️ gentle reminder that pagesend expects the modem to be already allocated and (unless you passed -l) already locked, and that it assumes its working directory is the top of the spooling hierarchy. don't set it up wrong and then act surprised. πŸ™ˆ

and that's the page!! this one's from the System Manager's Manual, dated October 3, 1995, and it's PAGESEND(8) all the way down. mwah, go transmit something πŸ’–βœ¨

πŸ“¦ where this page comes from