hylafax配置手记.docx
《hylafax配置手记.docx》由会员分享,可在线阅读,更多相关《hylafax配置手记.docx(13页珍藏版)》请在冰豆网上搜索。
hylafax配置手记
安装HylaFAX传真服务器
2008-12-1008:
05:
09| 分类:
软件开发与维护|字号 订阅
HylaFAX是一个开放源码的传真服务器,它可为企业提供一个强大而可靠的传真服务。
HylaFAX基于C/S架构,在局域网内只要有一台连接FAXModem的HylaFAX传真服务器,就可为局域网内所有的用户提供传真功能。
作为企业应用,高负载能力是必须具备的,HylaFAX可连接多台Modem,为企业提高优异的传真性能。
10.11.1.安装
在Debian系统中提供一个HylaFAX-server软件包,用以安装HylaFAX服务器。
在安装该软件包前,请用上文介绍的工具和方法确定Modem在你的Debian系统中能正常工作。
下面是具体的安装步骤:
∙安装服务器软件包和一些工具软件:
debian:
~#apt-getinstallhylafax-serverhylafax-client
∙安装完软件包后,hylafax还不能运行,还要运行faxsetup命令配置你的传真服务器。
该配置过程会检测Modem的传真功能并要求输入传真机的一些参数,如国家码、地区码和本机号码等。
最后faxsetup还会生成一个faxmaster的用户,该用户负责管理传真服务器。
配置完成后,HylaFAX服务应该已启动了,以后每次重启动服务器都会自动运行。
HylaFAX的启动脚本名叫hylafax,位于/etc/init.d/目录下。
在该目录下运行./hylafaxstart命令可以手动启动HylaFAX传真服务器。
HylaFAX正常启动后会产生三个进程,用ps命令可以查看:
uucp51390.00.469761392?
Ss16:
530:
00/usr/sbin/faxq
uucp51410.00.343721116?
Ss16:
530:
00/usr/sbin/hfaxd-i4559
uucp51490.00.670882004pts/2S16:
530:
00/usr/sbin/faxgettyttyS0
∙现在,我们可用faxstat命令来查询服务器状态。
debian:
~#faxstat
Password:
HylaFAXschedulerondebian:
Running
ModemttyS0(85789877):
Runningandidle
∙出现以上信息说明服务器已正常运行,我们可用sendfax命令来测试一下发送传真。
debian:
~#sendfax-n-d88886666test.ps
test.txt文档就通过我们的HylaFAX传真服务器发送到88886666传真机上了。
我们可到/var/spool/hylafax/log查看发送的日志。
∙接收的传真会自动保存在/var/spool/hylafax/recvq目录下,文件格式是tif的。
tif是一种图形文档格式,我们可以用支持tif文档格式的看图软件直接打开,有些看图软件打开tif会变形,而Windows自带的图片查看器可以完美支持tif文档。
我们也可以用fax2ps程序把tif格式文档转换到ps格式文档,再用ghostview浏览。
传真服务器已安装完成,但要在企业中投入正常使用,还需进一步的配置。
10.11.2.配置
hylafax的配置文档位于/etc/hylafax目录下,而实际的工作目录是/var/spool/hylafax,接收到的传真和一些日志信息都保存在该目录。
该目录下还有一个etc目录,内容与/etc/hylafax的一样,但我们不要手动修改这个目录中的配置文件,而是要修改/etc/hylafax目录下的,否则启动服务器会出错。
每当我们修改了/etc/hylafax目录的配置文件后,重启hylafax都会自动把/etc/hylafax中修改过的文件拷贝到/var/spool/hylafax/etc/目录,完成同步。
/etc/hylafax目录下几个重要的配置文件说明:
∙hfaxd.conf,HylaFAXClient-ServerProtocolConfiguration。
∙hyla.conf,System-wideclientconfigurationfile
∙config.ttyS0,FAX端口的配置文件。
faxaddmodem,用于添加或修改Modem配置
用infohylafax-config命令可以查看config.ttyS0的配置参数说明。
下面是我的config.ttyS0配置文件的内容。
我的Modem是一个外置的Modem,接到COM1上。
CountryCode:
86#国际区号
AreaCode:
020#国内区号
FAXNumber:
85528685#传真号码
LongDistancePrefix:
1
InternationalPrefix:
011
DialStringRules:
/etc/hylafax/dialrules
ServerTracing:
1
SessionTracing:
11
RecvFileMode:
0600#接收到的传真文档的访问权限
LogFileMode:
0600#日志文档的访问权限
DeviceMode:
0600#设备的访问权限
RingsBeforeAnswer:
4#响4声后才开始传真
SpeakerVolume:
off
GettyArgs:
"-h%ldx_%s"
LocalIdentifier:
"NothingSetup"
TagLineFont:
etc/lutRS18.pcf
TagLineFormat:
"From%%l|%c|Page%%Pof%%T"
MaxRecvPages:
25
#
#
#Modem-relatedstuff:
shouldreflectmodemcommandinterface
#andhardwareconnection/cabling(e.g.flowcontrol).
#
ModemType:
Class1#usethistosupplyahint
ModemRate:
19200#rateforDCE-DTEcommunication
ModemFlowControl:
rtscts#default
#
ModemNoFlowCmd:
AT&K0#setupnoflowcontrol
ModemHardFlowCmd:
AT&K3#setuphardwareflowcontrol
ModemSoftFlowCmd:
AT&K4#setupsoftwareflowcontrol
ModemSetupDTRCmd:
AT&D2#setupsoDTRdropresetsmodem
ModemSetupDCDCmd:
AT&C1#setupsoDCDreflectscarrier(ornot)
#
ModemMfrQueryCmd:
!
Rockwell
ModemModelQueryCmd:
!
RC288DPi
ModemRevQueryCmd:
ATI3#productinformation
#
ModemDialCmd:
ATDT%s#Tfortonedialing
如果使用分机,在发送传真前要先拔一个号码。
以拔号码9为例,则应该这样设置:
1、不检测拔号音,2、设置:
ModemDialCmd:
ATDT9W%s。
faxadduser,添加用户,这里指的用户是指访问HylaFAX传真服务的用户,和系统用户是不同的。
probemodem,用于检测Modem信息。
xferfaxstats可显示发送传真的统计信息。
recvstats可显示接收传真的统计信息。
手动模拟收到传真后的自动处理过程,通过这种模拟我们可以测试faxrcvd脚本。
debian:
#~cd/var/spool/hylafax
debian:
#~./bin/faxrcvdrecvq/fax000000011.tifttyS0"000000032"""
000000032是接收ID号,log目录下的日志文件名就是由字母"c"+接收ID号组成的。
http:
//www.hylafax.org/howto/faxrcvd/中有几个转换pdf格式文档和发送邮件的faxrcvd脚本可供参考。
自己折腾的结合KDE的实验性质传真服务系统
由于近期正巧有条件,奴家在机器上建立了一个利用Modem运作的的传真发送/自动接收环境来玩,底层传真服务辅助了若干KDE工具来实现完整的需要,当然由于用户友好程度的限制它不可能直接提供给企业里最终用户对象,适合于实验室那样自行把玩或对UnixLike系统较熟悉的个人家用场合。
首选奴家要说的是,您要这么做首先必须有一个能驱动且传真功用正常的Modem,一般常见的“内猫”都是所谓的Winmodem,它们又称“软猫”,在工作时的运算相当依赖于对CPU的操作,如果厂商不提供驱动或不开放技术规范,第三方是很难制作出好用的驱动程序的。
另一方面,由于Modem产品已经淡出了市场,加上我国的国情因素,在国内市场,包括二手市场上想购到价廉的且支持Linux的内猫是比较困难的,而那些对Linux有较好支持的Modem产品大多只在海外销售而且没有大陆代理。
外置的“硬猫”在这方面的情况好很多,因为它们承担了大部分在“软猫”里由CPU承担的运算,对驱动依赖程度较低,不过价格相对较贵。
下文以假设您已经能够正常驱动Modem为前提。
我们首选需要建立一个基层的传真收发环境,考虑到和KDE的结合,有三套软件是较可行的选择:
eFAX:
配置最简单,但只有发送功能。
Mgetty-sendfax:
支持传真收发,以C/S架构工作,但似乎只支持符合Class2.0标准的Modem。
由于奴家没能得到这种设备,只备有支持Class1.0的Modem,故排除。
HylaFAX:
和上者同样是C/S架构的传真服务,兼容性足够广泛,奴家就选它了。
在涉入GUI上层建筑前,您需要先用faxaddmodem命令添加一个Modem配置,下面列出部分条项与注解:
Serialportthatmodemisconnectedto[ttyS0]?
──填入对应Modem设备的设备文件名,建议不要用指向真正设备的软链接文件名。
Countrycode[1]?
──在中国,请填086。
Areacode[415]?
──奴家在苏州,填0512,请按地置宜。
Phonenumberoffaxmodem[+1.999.555.1212]?
──填写与Modem的Line端口相连的电话号码,如果有拨号前缀也请加上。
Localidentificationstring(forTSI/CIG)["NothingSetup"]?
──这条标识文字会成为您发送的传真页面里的页眉,请按喜好填写。
Protectionmodeforreceivedfacsimile[0600]?
──收取到的传真的权限,在发行版中HylaFAX收到的传真文件的属主和属组会是一伪用户,在奴家这里是uucp,由于这个权限的设定会影响后面某个脚本的工作,请特别注意,奴家以为0440是个折衷的选择。
以下还有很多设定,其中会牵涉到不少通讯术语,奴家未能对每个条目达成确切理解,不过一个经验是:
看不懂的留为默认值就好--。
设定到一半程度会对您的Modem设备进行速率检测,如果设备工作正常且之前的设备文件名指定正确应能顺利通过。
当一个传真Modem设定完成后,您可以启动HylaFAX服务,完整的HylaFAX传真服务包括三个守护进程:
传真队列管理程序faxq、C/S服务进程hfaxd(默认会占用tcp4559端口)、串口通讯监听进程faxgetty,您应该确保它们都能正常启动。
提醒:
不是每个发行版提供的HylaFAX二进制包里的启动脚本都默认启动所有这三个服务。
理论上这时您已经可以开始利用HylaFAX发送传真了,一个标准的操作命令是:
sendfax-n-h[Modem设备名@]传真服务主机[:
端口]-f[邮件地址]-d[目标电话号码]要发送的文件
其中在单机单Modem的情况下,-h选项及其参数可以省略。
HylaFAX配置文件的可定义内容极多,您如果要了解它大量的进阶用法可以查阅它的man手册。
在现在的情况下虽然您应该可以正常发送传真了,但没有对源文件进行预处理,如果它是一个文本,里面的非ASCII字符将无法被转换成正确的点阵图像,在传真机上打印出来后会变成乱码。
因此您要么提供一个图像文件,要么提供一个PostScript文件,奴家推荐后者。
提醒:
在继续下面的步骤前,您的GhostScript软件需要能正常工作。
现在我们可以把视线转到GUI上层建筑了,奴家可以首先借助KDE打印子系统(KDEPrint)和HylaFAX结合起来形成一串方便而弹性的传真发送流程。
您应该知道在绝大部分的KDE程度里都可以调用kprinter程序开启打印控制前端,您无需设定一个真正的打印机,在默认的伪打印条目里,有一项便是“打印到传真”,如图:
screen.width*0.7){this.resized=true;this.width=screen.width*0.7;this.alt='Clickheretoopennewwindow\nCTRL+Mousewheeltozoomin/out';}"onmouseover="if(this.widththis.resized){returntrue;}else{window.open('onmousewheel="returnimgzoom(this);"border="0"<
这一步骤背后实际的行为,按照奴家的理解是KDE打印子系统调用GhostScript将原始的打印任务转换过滤成一个PostScript格式文件,并将其交由专门的传真发送前端kdeprintfax程序处理。
kdeprintfax的使用方法很容易理解,奴家不会打算告诉您接下来该怎么做,您只需注意其设置项中的这个地方就可以了。
screen.width*0.7){this.resized=true;this.width=screen.width*0.7;this.alt='Clickheretoopennewwindow\nCTRL+Mousewheeltozoomin/out';}"onmouseover="if(this.widththis.resized){returntrue;}else{window.open('onmousewheel="returnimgzoom(this);"border="0"<
如果您愿意,可以设定HylaFAX配置中的hosts.hfaxd文件,这是HylaFAX服务器的访问控制列表,您可以给其它用户、其它主机开放连接权限,这样别人也可以通过HylaFAX客户端连接到统一的传真服务器上发送传真。
上文提及到的sendfax程序,就是一个HylaFAX的客户端工具,严格来说HylaFAX的服务器包和客户端程序是可以拆分的,很多发行版(尤其是Debian系的)会这么做。
HylaFAX的服务器必须运行在UnixLike系统上,没有Win32版本,但客户端在UnixLike系统和Win32系统上都有相应工具可用。
另外,您需要知道可找到的Win32版HylaFAX客户端几乎全部都不是免费软件,而UnixLike系统上一个sendfax客户端程序可以通用,同时其它运行了KDE的UnixLike桌面都可以使用kdeprintfax工具作为客户端完成和在服务器本机上相同的传真工作。
提醒:
faxadduser这个工具可以帮助您设置hosts.hfaxd访问控制列表。
虽然我们可以很轻易地使用kdeprintfax将传真提交到发送队列,但这一过程中如果出错,错误信息是否能反馈是不一定的,因为kdeprintfax只会在诸如客户端程序找不到、传真服务器未开启、连接被拒绝等情况下,即sendfax命令返回值不为0时才给出错误报告。
如果队列提交正常,但发送前由HylaFAX实施的预处理出错则无法被用户经由前端知晓,因为kdeprintfax并未提供faxq队列管理机制,出现这种错误常常是由拨号忙音、GhostScript出错、线路故障等理由引发的。
为了保证对传真队列实施有效的管理,此时我们还是要回到终端,使用faxstat、faxrm程序管理队列。
提醒:
忙音这样的临时性错误一般并不需人工干涉,HylaFAX可以在一定的间隔后重新拨接。
如果您对传真发送这一节已经没有疑问了,奴家应该可以继续谈及传真的接收问题。
您应该知道,不是每一种Modem(或驱动)都支持传真的自动接收,但很显然用户没有预知传真何时会到来的能力,也不会乐于每次发现状况时手动开启传真接受步骤。
好在HylaFAX服务在理想情况下会以软件方式提供传真的自动接收功能,收到的传真默认会被自动放置在/var/spool/hylafax/recvq目录下,那么现在我们仍然缺少的是接到传真自动获取提醒的手段。
一个传统的Unix系统管理员风格的做法是用Cron结合脚本检查传真接收目录,并在有新传真时给某一个用户发送系统邮件通知。
但由于Cron的先天限制,它无法在X环境下和X客户端程序进行交互,因此奴家选择了另一个程序KAlarm来达到需要。
奴家所能实现的设想有以下几条:
1、定期对传真接收目录进行新文件检查(奴家设1分钟),将新传真另存到个人主目录里的适当位置。
2、一个和X有交互的通知方式,奴家在这里采用了kdialog。
不过从理论上,奴家猜想借助KNotify子系统作为DCOP客户来以标准的系统通知模式给予提醒是更好的且在理论上可行的办法,但这里并没有做到。
3、对已获取的传真能够进行基本但有效的预览和自动归类(第一是按新传真和旧传真,第二是按来源电话号码)
4、试行一种对Win32主机也有效的通知方式,奴家想到的是利用WinXP的信使服务,如果此服务在Win32主机上开启,且未被防火墙屏蔽接收,那么可以用smbclint程序提供信使通知。
当然这不是很通用的做法。
--
5、将主目录下已经归类过的传真目录共享到网络,需要保留原来的归类关系,出于通用考虑,奴家尝试了Samba。
这里有一份奴家为KAlarm写的要定时运行的BashShell脚本可供参看,它可以完成上述的1~4项要求。
CODE:
[Copytoclipboard]
#!
/bin/bash
#用途:
传真通知脚本
#作者:
Lie_Ex
#通用的全局变量
MSG_STDTITLE="传真通知"
MSG_OOPSTITLE="唉呀..."
MSG_NEWCOME="您有新的传真,请查收"
MSG_IGFAX="传真未查收..."
FAXRECVDIR="/var/spool/hylafax/recvq" ##HylaFAX传真存放池
PIDFILE="/home/`id-un`/.checkfax/PID" ##PID锁文件
OLDDATA="/home/`id-un`/.checkfax/olddata" ##历史记录
NEWDATA="/home/`id-un`/.checkfax/newdata" ##新到记录
INDIR="/home/`id-un`/.checkfax/incoming" ##新传真存放处
FAXBOX="/home/`id-un`/FAX" ##旧传真存放处
#正常退出处理
normalend(){
rm-f$PIDFILE
exit0
}
#数据源采集
readyfordata(){
>$NEWDATA
ls$FAXRECVDIR|sed'$d'>$1
}
#归类传真
assortfax(){
ls$FAXBOX/*.tif&>/dev/null
if[$?
-ne0];then
return0
fi
forfin`ls$FAXBOX/*.tif`
do
FAXSRC=`faxinfo$f|sed-n2p|awk'{print$NF}'`
FAXDEST="${FAXBOX}/${FAXSRC}"
if[!
-d$FAXDEST];then
mkdir-p$FAXDEST
fi
mv$f$FAXDEST
done
}
#运行的初始化,如果脚本已经在运行,安静退出。
if[!
-e$PIDFILE];then
echo$$>$PIDFILE
else
exit0
fi
#创建必要工作目录,INDIR为新到传真暂存处,FAXBOX为历史传真预备归档处。
if[!
-d$INDIR];then
mkdir-p$INDIR
fi
if[!
-d$FAXBOX];then
mkdir-p$FAXBOX
fi
#初始化传真历史记录。
if[!
-e$OLDDATA];then
readyfordata$OLDDATA
fi
###############