PAGESEND(8)
π 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:0x4fwould set theSessionTracingconfiguration parameter to0x4f, 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 insidepagesend. by defaultpagesendassumes 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. normallypagesendwill 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 jobsend_failed(1) β job finished without successsend_done(2) β job completed successfullysend_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 thatpagesendexpects 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
- debian bookworm: hylafax-server 3:6.0.7-5
- debian trixie: hylafax-server 3:6.0.7-11.1
- ubuntu noble: hylafax-server 3:6.0.7-7
- ubuntu questing: hylafax-server 3:6.0.7-13
- ubuntu resolute: hylafax-server 3:6.0.7-13build1
- ubuntu stonking: hylafax-server 3:6.0.7-13build1
- Copyright (c) 1994-1996 Sam Leffler
- Copyright (c) 1994-1996 Silicon Graphics, Inc
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms