mgetty で FAX を受信しようと思ったんですが、なかなか面倒くさくて。。。
その顛末をまとめてみます。結構はまったんで、参考になると思います。
使用した FreeBSD は 4.2-R です(2001/10/26現在の情報です)。
mgetty とは getty の代わりをする物なのですが、getty が着信後に作業を行うのと
違って、着信からその後の処理まで受け持ちます。
つまり、かかってきた電話が「データ通信」なのか「FAX通信」なのかを判断して適
宜作業を変えてくれます。だから、ATS0=0を実行しておかないと駄目です。(これは mgetty がやってくれます)
ただ、普通の電話とFAX通信を振り分けるなんて事は出来ない(かかってきてからし
か通信内容が分からないから当然ですね)ので、その電話(番号)はパソコンからの
着信&Fax着信専用の回線ということになります。この辺はお間違えのないように。
今回はサーバが NOTE なので、PCMCIA の Fax/Data MODEM を使いたかったのですが、
私の持っている REX-R256 という RATOC のやつで出来ませんでした。
理由は
faxhost# grep '^#' policy.h #ident "@(#)policy.h 3.5 96/03/19 Copyright (c) Gert Doering" #define MGETTY_CONFIG "mgetty.config" #define SENDFAX_CONFIG "sendfax.config" #define LOGIN_CFG_FILE "login.config" #define DEFAULT_LOGIN_PROGRAM "/usr/bin/login" #define CALLBACK_CONFIG "callback.config" #define GETTYDEFS "/etc/gettydefs" #define GETTYDEFS_DEFAULT_TAG "n" #define DEVICE_OWNER "uucp" #define DEVICE_GROUP "modem" #define FILE_MODE 0660 #define CONSOLE "/dev/console" #define LOG_PATH "/var/log/log_mg.%s" #define LOG_LEVEL L_MESG #define ADMIN "root" #define SYSLOG_FC LOG_AUTH #define LOGIN_PROMPT "@ login: " #define MAX_LOGIN_TIME 240 #define NOLOGIN_FILE "/etc/nologin.%s" #define MGETTY_PID_FILE "/etc/mg-pid.%s" #if defined (SVR4) || defined(sunos4) # define LOCK_PATH "/var/spool/locks" # define LOCK "/var/spool/locks/LCK..%s" #else # ifdef sgi # define LOCK "/usr/spool/locks/LCK..%s" # endif # ifdef _AIX # define LOCK "/etc/locks/LCK..%s" # endif # ifdef NeXT # define LOCK "/usr/spool/uucp/LCK/LCK..%s" # endif #endif #ifndef LOCK #define LOCK "/var/spool/lock/LCK..%s" #endif #define LOCKS_BINARY 0 #define DEFAULT_PORTSPEED 19200 #define MODEM_INIT_STRING "ATS0=0Q0&D3&C1" #define MODEM_CMD_SUFFIX "\r" #define MODEM_CHECK_TIME 3600 #define DEFAULT_MODEMTYPE "auto" #define DO_CHAT_SEND_DELAY 50 #define FAX_COMMAND_DELAY 50 #define FAX_IN_OWNER "uucp" #define FAX_FILE_MODE 0660 #define DATA_FLOW FLOW_HARD #define FAXREC_FLOW FLOW_HARD | FLOW_SOFT #define FAXSEND_FLOW FLOW_HARD | FLOW_SOFT #define FAX_RECV_SWITCHBD 19200 #define FAX_LOG "/var/log/sendfax.log" #define FAX_STATION_ID "0794 12 3456" #define FAX_SEND_BAUD 38400 #define FAX_DIAL_PREFIX "ATD" #define FAX_SEND_MAX_TRIES 3 #define FAX_MODEM_TTYS "cuaa3" #ifdef SVR4 # define MAILER "/usr/bin/mailx -s 'Incoming facsimile message'" #else # ifdef _AIX # define MAILER "/usr/sbin/sendmail" # define NEED_MAIL_HEADERS # endif # ifdef M_UNIX /* SCO */ # define MAILER "/usr/lib/mail/execmail" # define NEED_MAIL_HEADERS # endif #endif #ifndef MAILER # define MAILER "/usr/sbin/sendmail" # define NEED_MAIL_HEADERS #endif #define MAIL_TO "faxadmin" #define FAX_NOTIFY_PROGRAM "/usr/local/lib/mgetty+sendfax/new_fax" #define MINFREESPACE 1024 |
CC=gcc CFLAGS=-O2 -Wall -pipe LDFLAGS=-lutil INSTALL=install -c -o root -g wheel # NeXT/BSD prefix=/usr/local spool=/var/spool SBINDIR=$(prefix)/sbin BINDIR=$(prefix)/bin LIBDIR=$(prefix)/lib/mgetty+sendfax CONFDIR=$(prefix)/etc/mgetty+sendfax FAX_SPOOL=$(spool)/fax FAX_SPOOL_IN=$(FAX_SPOOL)/incoming FAX_SPOOL_OUT=$(FAX_SPOOL)/outgoing |
cuaa0 "/usr/local/sbin/mgetty -x 9 -n 1" vt100 on secure |
kill -HUP 1 |
#!/bin/sh shift 3 for i in $@ do cat $i | /usr/local/bin/g32pbm | /usr/local/bin/pnmtops -noturn |\ /usr/local/bin/gs -q -sPAPERSIZE=a4 -dNOPAUSE -sDEVICE=lips3\ -sOutputFile=- - quit.ps | lpr -P lp rm $i done exit 0 |
/* build command line * note: stdout / stderr redirected to console, we don't * want the program talking to the modem */ sprintf( line, "%s %d '%s' %d %s >%s 2>&1 </dev/null", FAX_NOTIFY_PROGRAM, fax_hangup_code, fax_remote_id, pagenum, fax_file_names, CONSOLE); |
/* build command line * note: stdout / stderr redirected to console, we don't * want the program talking to the modem */ sprintf( line, "%s %d '%s' %d %d %s >%s 2>&1 </dev/null", FAX_NOTIFY_PROGRAM, fax_hangup_code, fax_remote_id, fax_par_d.vr, pagenum, fax_file_names, CONSOLE); |
#!/bin/sh shift 2 mode=$1 shift 2 for i in $@ do if [ $mode -eq 0 ]; then cat $i | /usr/local/bin/g32pbm -s > /tmp/fax$$.lips3 else cat $i | /usr/local/bin/g32pbm > /tmp/fax$$.lips3 fi cat /tmp/fax$$.lips3 | /usr/local/bin/pnmtops -noturn |\ /usr/local/bin/gs -q -sPAPERSIZE=a4 -dNOPAUSE -sDEVICE=lips3\ -sOutputFile=- - quit.ps | lpr -P lp rm $i /tmp/fax$$.lips3 done exit 0 |
lp|local line printer:\ :sh:sf:\ :lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs:\ :mx#0: |