fax4CUPS

Gert Cuykens gert.cuykens at gmail.com
Tue Apr 12 17:14:15 PDT 2005


On 4/10/05, John Conover <conover at rahul.net> wrote:
> Gert Cuykens writes:
> > On Apr 10, 2005 9:58 PM, Chris <racerx at makeworld.com> wrote:
> > > Gert Cuykens wrote:
> > > > Can we have this in ports ?
> > > >
> > > > http://vigna.dsi.unimi.it/fax4CUPS/
> > >
> > > Are you volunteering?
> > >
> > > Anything is possible, but nothing is easy.
> > >
> >
> > How do you mean ?
> >
> > I did not install it yet but it sounds useful if cups could handle a
> > serial fax like a printer :)
> >
> > Aldo i think the script can only send faxes and not handle incoming
> > faxes like printing them or sending them to a mailbox directory. But i
> > am sure you can add some magic faxing features to it :)
> >
> > 10$ its going to be a popular port and for people like you not that
> > hart to add some fax incomming features :) With a little bit of luck
> > you don't have to compile anything :)
> 
> It does work well, (as per the sparse docs in the tar file.) You can
> use efax for incoming faxes, (or better, hylafax, if you can talk
> root at heaven.org into coming down and configuring it for you,) and the
> fax4CUPS does appear as a printer according to lpstat -a, and does
> send faxes, (saved as a postscript file out of openoffice.org, etc.)
> You will have to use cup's lpr -j option to tell it the "fax printer"
> what number to send the fax to, (so you will probably have to
> configure a printer in everyone's openoffice.org, etc.)
> 
> The lpadmin command to install the cups/efax printer is:
> 
>    lpadmin -p efax -L machine -D fax -E -v efax:/dev/ttyXX -m efax.ppd
> 
> Where efax.ppd is installed in probably /usr/share/cups/model/, and
> the efax script, (with the first 8 lines modified for your
> configuration,) installed in probably /usr/lib/cups/backend/.
> 
> Note: if "efax answer" is running on /dev/ttyXX from /etc/inittab, it
> may be necessary to disable "efax answer" for the lpadmin command, but
> only to install the "fax printer," (apparently, lpadmin doesn't like
> other things listening on its serial printer ports when it installs
> the printer.)
> 
> If you use efax or hylafax for incoming, enable MIME e-mailing of the
> fax to a faxmaster, who distributes the file to the appropriate
> machine-its default for hylafax. For efax, configure /etc/efax.rc and
> /usr/bin/fax, (these are some script changes,) to send the fax
> attachment as a postscript file so they can be read with
> gv/ghostscript, (which probably came with your cups installation.) The
> efax/tiff file formats come out half size if a low resolution fax is
> received, which is corrected if postscript is used.
> 
> Recommendation: YMMV, but hylafax is a bit difficult to configure, but
> is very robust once running; efax is probably preferable for
> non-industrial strength applications.
> 

 mgetty-fax:/dev/cuaa0 doesnt work :( I read the install and the
manual. I can select the mgetty-fax ppd but i can not select the
mgetty-fax backend... This is the backend file.

#!/bin/bash

PAGE=a4
FAXPRG=/usr/bin/faxspool
LOGDIR=/var/log/mgetty

#
# This is fax4CUPS 1.24, a fax back-end for CUPS
#
# Copyright (C) 2001-2003 Sebastiano Vigna <vigna at acm.org>
#
#   This program is free software; you can redistribute it and/or modify it
#   under the terms of the GNU General Public License as published by the Free
#   Software Foundation; either version 2 of the License, or (at your option)
#   any later version.
#
#   This program is distributed in the hope that it will be useful, but
#   WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
#   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
#   for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program; if not, write to the Free Software
#   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# Modified by Michael Goffioul <goffioul at imec.be>
#
#   - phone number as option instead of job name: "-o phone=<number>"
#
# Additional fixes by Kevin Ivory <Ivory at SerNet.de>
#
# Additional mgetty-fax support by Daniel Glanzmann <dg at ezcom.de>
#
# Modified by Daniel Glanzmann <dg at ezcom.de>
#
#   - take care of mgetty-fax return values
#   - small cleanup
#
# Additional capisuite support by Daniel Glanzmann <dg at ezcom.de>
#

# Called with no arguments, we list the serial devices as possible fax devices.
# If /dev/modem has been set up, we list it too.

if [ $# -eq 0 ]; then
        if [ ! -x "$FAXPRG" ]; then exit 0; fi
        if [ -e /dev/modem ]; then echo "serial mgetty-fax:/dev/modem
\"Unknown\" \"Faxmodem (mgetty-fax on /dev/modem)\""; fi
        if [ -e /dev/tty.modem ]; then echo "serial
mgetty-fax:/dev/tty.modem \"Unknown\" \"Faxmodem (mgetty-fax on
/tty.modem)\""; fi
        if [ -e /dev/cu.modem ]; then echo "serial
mgetty-fax:/dev/cu.modem \"Unknown\" \"Faxmodem (mgetty-fax on
/cu.modem)\""; fi
        for ser in $(\ls -1 /dev/ttyS[0-9]* | sort -g +0.9 | head -32); do
                echo "serial mgetty-fax:$ser \"Unknown\" \"Faxmodem on
Serial Port #$((${ser#/dev/ttyS}+1)) (mgetty-fax)\""
        done
        exit 0
fi

# Get the user that owns the job
USER=$2
FROM=$USER

DEV=${DEVICE_URI#mgetty-fax:/dev/}
RES=""          # Default resolution is high; set this to -l for low resolution
NUMBER=""       # Use option "phone" as number by default


# If we find six arguments, the last one is the fax name; otherwise,
# we have to create a temporary file.

if [ $# -eq 6 ]; then
        FAXNAME=$6
else
        FAXNAME=$(mktemp </dev/null /tmp/fax.XXXXXX) || (echo "Failed
to create temporary file" >>$LOGDIR/$DEV; exit 1)
        cat >$FAXNAME
fi

# Parse user-specified options from the PostScript file and set -l/-m
function getSelectedOption() {
        for i in $@; do
                case $i in
                        \**) SELOPT=${i#[*]}; return ;;
                esac
        done
}

function parseOptions() {

        while read LINE; do
                MAIN=${LINE%%:*}
                OPTIONS=${LINE##*:}
                getSelectedOption $OPTIONS

                case $MAIN in
                        PageSize/*) echo "PAGE=$( echo -n "$SELOPT" |
tr '[:upper:]' '[:lower:]' )" ;;
                        Resolution/*) if [ "$SELOPT" == "204x98dpi" ];
then echo "RES=-l"; fi ;;
                        Dial/*) if [ "$SELOPT" == "Manually" ]; then
echo "NUMBER=-m"; elif [ $SELOPT == "JobName" ]; then echo
"NUMBER=-j"; fi ;;
                esac
        done
}

eval $(lpoptions -p $PRINTER -l | parseOptions)
if [ "$NUMBER" == "-j" ]; then
         NUMBER="$3";
fi

# Scan user options and set -l/-m (override previous choices if necessary)

for opt in $5; do
        case "$opt" in
                lowres*) RES="-n" ;;
                hires*) RES="" ;;
                manual*) NUMBER="-m" ;;
                jobname*) NUMBER="$3" ;;
                phone=*) NUMBER="${opt#phone=}" ;;
                media=*) PAGE=$( echo ${opt#media=} | tr '[:upper:]'
'[:lower:]' ) ;;
        esac
done

echo 1>&2 # Apparently the first character emitted is somehow "eaten"
by the reader

# do some cheking before continuing
if [ -z "$NUMBER" ]; then
        echo "ERROR: Empty phone number" 1>&2
        exit 1
elif [ ! -x "$FAXPRG" ]; then
        echo "ERROR: $FAXPRG: executable not found" 1>&2
        exit 1
fi

pushd $LOGDIR # If there are problem, mgetty-fax will generate a log
file in the current directory

# Remove possible whitespace in number: replace by period
NUMBER=${NUMBER// /.}

sudo -u $USER $FAXPRG $RES $NUMBER $FAXNAME 2>>$LOGDIR/$DEV.log

RC=$?

case $RC in
        0) echo "INFO: Fax sent" 1>&2 ;;
        1) echo "ERROR: Cannot determine user id or unknown option" 1>&2 ;;
        2) echo "ERROR: Invalid parameters" 1>&2 ;;
        3) echo "ERROR: Phone number missing or not authorized to use
-u" 1>&2 ;;
        4) echo "ERROR: Non-numeric characters in phone number" 1>&2 ;;
        5) echo "ERROR: Cannot open File" 1>&2 ;;
        6) echo "ERROR: Cannot create new job/work directory" 1>&2 ;;
        7) echo "ERROR: Cannot determine file format" 1>&2 ;;
        8) echo "ERROR: No internal filter for format" 1>&2 ;;
        52) echo "ERROR: Nothing to do" 1>&2 ;;
esac

popd

rm -f $FAXNAME.[0-9][0-9][0-9]
if [ $# -lt 6 ]; then rm -f $FAXNAME; fi

exit $RC


More information about the freebsd-questions mailing list