These days, when I need to send someone a document, I use email. Just save it as a Word. DOC from OpenOffice, attach it to an email, encrypt it if it's confidential, and fire it off into cyberspace. The person on the other end opens the document, and all's right with the world.
Of course, not everyone sends documents this way. Some people use a curious and antiquated tool known as a fax machine to perform such tasks. Sending a document via fax isn't quite the same as using email. The person sending the fax prints the documents, gets up from their desk, grabs the document from the printer, puts the document in the fax machine, enters the number, watches while the fax machine tears the document to shreds while feeding it, and eventually gets the damn thing sent.
The person on the other end then hears their fax go off, gets up from their desk, walks to the fax, sees that the incoming document isn't for them, hangs around a little more, goes to the coffee machine, starts chatting about last nights episode of Perfect Match, hears the fax again, and after some waiting gets a badly scanned document.
Many organizations still use fax machines, and they're often the kind of people you might want to communicate with. . . the government, for example. The solution is to drag faxing kicking and screaming into the new millennium, with a fax server. We might not be able to fix all the problems of faxing, but we can try.
Just the Fax Ma'am
I've recently been working with a client setting up a rather nifty Linux-based fax server called Hylafax. There's many fax serving applications for Linux, but from what I heard from colleagues who'd used the system, Hylafax was clearly the best tool for the job for a number of reasons:
- Real client/server architecture. The client part of the equation is fairly small, which means most of my administration is centralized on the server. Each user can use their own address book, and/or a shared address book using ODBC.
- A variety of specialist client software to choose from for Linux, Windows, and the Mac. It's also possible to allow staff to send and receive faxes through standard Windows file and print sharing, eliminating the need to install and maintain any fax client software on desktops at all. In this case, an intelligent print queue looks for addressing details within documents.
- A proven solution. Some of my colleagues had set up Hylafax at companies in the PR industry who would regularly fax out a few hundred press releases simultaneously. This kind of automation is one of the major areas in which server based faxing outpaces traditional faxing.
- Open Source licensing, allowing me to outfit a 30-person office with faxing capabilities at everyone's desk for zero licensing costs and around a day's labour. Licensing for equivalent proprietary solutions can cost hundreds or thousands of dollars.
Once I'd decided on Hylafax, I assembled the tools I'd need and got to work – see 'What you need'.
Checking the Modem for Compatibility
Not all modems are created equal. Different models support different fax classes – revisions of the specification that faxing devices use. Newer fax classes can do more things, but as long as your modem supports at least class 1, you'll be fine. It's important to test your modem to make sure it has faxing capabilities, and find out exactly what fax classes it supports, before you begin setting up Hylafax. I used a nifty little command-line diagnostic app called 'dip' that's usually used for diagnosing and setting up dial-up IP connections. Linux's /dev/ttyS0–ttyS3 are equivalent to COM1 through 4 under Windows. If you're not sure which corresponds to your modem, you can run your distributions Internet setup wizard to find the modem, or simply run dip on each: dip –t Excellent – as you can see from the screenshot here, our modem can support fax classes 0, 1, and 2.0. Time to set up Hylafax.
Configuring Hylafax
Hylafax is made up of a variety of modular components, each of which perform a specific task:
- faxgetty listens on the modem for incoming faxes.
- faxq queues outgoing faxes.
- hfaxd communicates with downstream clients, such as Windows Hylafax Client, Cypheus, SMBFax, and others.
The first thing we'll need to do is set up faxgetty to listen on your modem. This means popping a line into your /etc/inittab telling init (the master process) to start faxgetty on a particular serial port for all the common runlevels (2 through 5), which should look like this: S0:2345:respawn:/usr/sbin/faxgetty ttyS0
After you've done this, make this change take effect by running: init q
Hylafax is configured with a script called 'faxsetup' – a command line app that steps through the process of configuring the Hylafax server and sendfax, the simple fax client that comes with Hylafax. faxsetup might not be particularly elegant, but it's still rather easy. The first part of faxsetup will configure the fax server itself. . .leave all the options set to the defaults apart from the following:
- Country code: 61 for Australia.
- Area code: your Australian area code – 2 for Sydney, 3 for Melbourne, etc.
- Long distance dialling prefix: 0
- International dialling prefix: 0011
At the end of this process, you'll have the opportunity to review your settings and fix up any mistakes you've made. Once you say yes, faxsetup will restart the Hylafax service listening on your modem with the new configuration.
faxsetup will then ask if you'd like to run faxaddmodem, another program which, oddly enough, configures modems to work with your fax server (yes, you can use more than one). Again, leave the default there, apart from the following:
- Serial port that modem is connected to: one of ttyS0 to ttyS3.
- Country code, area code, long distance and international dialing prefixs: same as above.
- Phone number of fax modem: your phone number, eg +61.3.9555.5555.
- Local identification string: your company or personal name – eg. John Smith.
When faxsetup is complete, it will save two files: /var/spool/hylafax/etc/setup.cache contains server specific configuration parameters.
/var/spool/hylafax/etc/setup.modem contains modem specific settings.
If you wish, you can tweak these files yourself and use your Linux distribution's service config tool, or /etc/init.d/hylafax restart, to restart the Hylafax service with the new settings.
Testing Your Server
You can use the sendfax application to send a test fax via your fax server to a real fax machine (the one you're testing with, not the server) -– just print a document to a file, and then run sendfax like this: sendfax -n -d (telephone number) file.ps
Your machine should start dialling, your test fax machine should pick up, and your document should pop out on the receivers end.
Ask them to have a scribble on the fax, then send it right back to you. The modem should perk up and your received fax should appear in the Hylafax receive queue, /var/spool/hylafax/recvq, as a TIFF file. Use an application like kfax to view the received fax.
If not, watch the bottom of /var/log/messages (or wherever you're logging daemon data to) for diagnostic info that should help you sort out any problems.