MultiFax
传真仍然是世界上重要的商业活动之一。这项无处不在的技术改变了世界,在世界各地的办公室和许多家庭中都可以找到它。即使我们没有专用的传真机,我们也会使用基于 PC 或网络的传真。在您组织的每台 PC 上都安装一个传真调制解调器听起来很荒谬——而且确实如此。那么,我是否可以谦卑地推荐一个出色的免费传真解决方案,并结合 Linux 的可靠性?太棒了!
在决定如何呈现这篇文章时,我思考了 Linux 上所有可用的出色免费软件。您的 Linux 发行版 CD 包含数千个此类程序。问题是并非所有程序都很漂亮——功能非常强大,但不漂亮。Windows 用户仍然会对可怕的命令行感到不寒而栗。那么,我们这些 Linux 大师该如何保护他们,并用 Linux 服务器的强大功能给他们留下深刻印象呢?我好像听到有人说“我们不这样做!”,但说真的,Windows 仍然在那里,并且还会存在一段时间。让 Windows 世界的用户相信,隐藏在命令行界面背后的是一款能够满足他们需求的产品,有时是困难的,即使它是像办公室免费网络传真这样简单而有用的东西。
作为未来必将成为下一个伟大操作系统的服务器和桌面开发商和支持者,我们可以通过将我们提供的解决方案包装在友好、易于使用的界面中,来缓解可怕的命令行带来的困惑。我的解决方案通常涉及将命令行的魔力隐藏在友好的 Web 风格界面之后。毕竟,每个人都喜欢他们的浏览器——http://www.allplaynowork.com/,有人吗?
我将向您展示如何为您的 Windows 9x 用户创建一个集成的传真解决方案,使传真像打印一样简单。使用基于 Web 的管理工具,您可以将观看所有这些传真发送过程的部分责任分担给您的用户。
在文章末尾有一个 URL 链接,您可以从中下载 MultiFax 的完整发行版。找一把舒适的椅子坐下,我们开始吧。
幸运的是,不需要太多。不过您应该花点时间考虑一下这个问题。您是将传真调制解调器用作永久传真解决方案,还是将传真调制解调器与按需拨号 PPP 连接共享?答案将决定您是否可以使用当前的传真调制解调器,或者是否应该考虑为您的系统添加另一个。就我而言,我将相同的连接用于 Internet 访问和传真。当我需要接收传真(或发送传真)时,我只需关闭我的 Internet 连接(通过终止我的 diald 进程),然后启动一个用于传真的进程。在繁忙的办公室中,这可能不是一个好主意。
Gert Doering 的 mgetty+sendfax 是一个相对易于使用的办公室传真解决方案,也就是说,如果您是一位精通命令行的 Linux 用户。最棒的是它随您的 Linux 发行版一起提供。Red Hat 的软件包将其作为安装期间的默认选择之一。我还检查了我的 SuSE 发行版以及 Caldera CD,它们都有它,因此找到它应该不是问题。最新版本的 mgetty+sendfax 始终可以在 metalab.unc.edu(以前是 sunsite.unc.edu)的 pub/Linux/system/serial/getty 目录下找到。
与 Horst F. 的 Windows respond 实用程序结合使用,它从 Windows 桌面提供了坚固且易于使用的传真机制。Horst 的实用程序作为任务栏上的托盘图标存在,每当用户向队列提交传真时,它都会显示为一个填写表格。您输入目的地名称和电话号码,单击“确定”,传真就会发送出去。您可以在 www.boerde.de/~horstfhttp://www.boerde.de/~horstf 获取 respond 程序。在那里时,请务必获取随附的 printfax.pl Perl 脚本和推荐的 Samba smb.conf 条目。
在您的 Windows PC 上(或在网络上的共享驱动器中)创建一个目录,并将 RESPOND.EXE 复制到那里。在我的办公室 PC 上,我将所有与通信相关的内容都放在一个名为 C:\COMM 的目录中。然后我有我的应用程序的子目录。RESPOND.EXE 位于 C:\COMM\FAX 中。它位于哪里并不重要,只要您知道您把它放在哪里即可。
在您的 Linux 系统上安装 mgetty+sendfax 软件包(无论是使用 RPM 安装还是从源代码编译)后,您需要设置一些基本配置才能继续。在我的 Red Hat 5.2 系统上,其中大多数位于 /etc/mgetty+sendfax 目录中。您的发行版或安装可能会将它们放在不同的位置。
您可以从 mgetty+sendfax FAQ 中获得有关设置的许多详细信息,但如果您急于让传真开始工作,以下是一些基本知识。我花时间设置的配置文件名为 sendfax.config、mgetty.config、faxrunq.config 和 faxheader。
在 sendfax.config 文件中,我设置了以下参数
fax-devices ttyS1 fax-id 955-555-5555 ignore-carrier y
还有其他设置,但我也很着急。由于我们只有一个传真调制解调器,我将 ttyS1 设置为我的 fax-devices 条目。fax-id 是您的传真调制解调器向另一台传真机宣布的电话号码。第三行是为了纠正我遇到的 US Robotics 传真问题——它告诉传真程序不要在我的传真传输的页面之间挂断电话。
在 faxrunq.config 文件中,基本上,我只在这里设置一个参数。那是
success-send-mail Y
由于我们在办公室中设置了电子邮件,因此当传真成功发送出去时,我的 Linux 系统会向我们发送邮件。您可能希望也可能不希望设置此项。如果您要设置大型广播传真列表,您可能不希望收到一百条或更多条消息来确认每份传真都已成功发送,或者您可能希望如此。无论您做出什么决定,在设置系统之前都要仔细考虑这一点。不过,请不要害怕——如果您发现自己做出了错误的决定(在您阅读了 300 封确认电子邮件之后),您可以随时返回并更改它。
在我的 mgetty.config 文件中,我也只做了一个更改
fax-mode 0666
稍后在讨论安全性时会详细介绍该更改。
最后,我们有 faxheader 文件。我的文件看起来像这样
FAX FROM: **Marcel & Sally** 955-555-5555 TO: @T@ PAGE: @P@ OF @M@
好吧,所以我的号码不是 955-555-5555——您抓到我了。这定义了出现在我们发送的每份传真顶部的识别信息。页面已编号,以便在不小心掉落在地板上时易于重新组装。
您还应该确保目录中有一个 fax.allow 和一个 fax.deny 文件。fax.allow 是一个文本文件,其中包含允许传真访问的用户 ID 的简单列表。fax.deny 文件是不允许传真访问的人员列表。或者,如果您只是想让每个人都能够传真,只需省略 fax.allow 文件并创建一个空的 fax.deny 文件。如果这两个文件都不存在,则只有 root 可以传真。对于网络传真解决方案,这不是一个好主意。
我们 mgetty 配置中的最后一件事,我们将继续介绍 Windows 方面的内容。/usr/bin/faxspool 的默认 umask 为 022。由于 faxspool 只是一个文本文件,因此很容易修改网络掩码,以便网络用户可以删除作业。在脚本中,我们注释掉 umask 022 默认值并添加行 umask 000
# Change umask to 000 so that any user can delete # an old fax # umask 022 umask 000
早些时候,我提到了有关假脱机作业的安全性。某些用户会担心安全性问题,但在大多数办公室中,传真机是一种相当公开的工具。我们以非常相似的方式看待网络传真队列。任何人都可以检查传真、清理他们发送的作业或打印出接收到的作业。同事出于恶意删除您的作业的可能性通常非常小,至少在我们的办公室是这样——我不能保证您办公室的文明行为。至于外部用户,我假设您的防火墙已经照顾到他们了。
说到外部用户:您想接收传真吗?这很简单。可以将 mgetty 进程添加到您的 inittab 中,以侦听您的传真调制解调器上的传入呼叫。编辑您的 /etc/inittab 并添加此行
fax1:2345:respawn:/sbin/mgetty /dev/ttyS0
在上面的条目中,fax1 是我选择的任意名称。在您的情况下,您可以选择不同的名称,就像您可能需要指定与我的 ttyS0 不同的设备一样。最后,使用以下命令告诉系统重新读取 inittab
init q
mgetty 已准备好接收传入传真,并将每次挂断后重新启动侦听器进程。在我的办公室中,我们将传真与我们的 Internet 连接共享,因此我只需使用以下命令启动 mgetty 的单个实例
/sbin/mgetty /dev/ttyS0 &
现在我们希望让我们的 Windows 用户访问网络传真。关于设置 Samba 服务的详细描述本身就是一篇文章,因此我不会在此处介绍(请参阅“资源”)。以下来自我自己的 smb.conf 文件的代码片段可以直接附加到您的 smb.conf 文件中以创建网络传真条目。
[netfax] comment = Network Fax path = /home/samba/faxdir read only = No guest ok = Yes print ok = Yes postscript = Yes printing = aix print command = (/usr/bin/printfax.pl %I %s\ %U %m; rm %s) &
您现在可以在每台 Windows 95/98 工作站上设置网络打印机。对于打印机类型,我使用 HP Laserjet 4 PostScript 打印机并将其称为网络传真。我或多或少随意选择了 HP Laserjet 4,但任何 PostScript 定义都应该有效。
接下来,向 PC 的启动文件夹添加一个快捷方式,该快捷方式指向您的 RESPOND.EXE 程序。还记得您把它放在哪里了吗?当它运行时,RESPOND.EXE 将在您的 Windows 95 任务栏中显示为一个小的矩形托盘图标。
当用户希望从 Windows 程序发送传真时,他们只需从列表中选择“网络传真”打印机即可。当他们单击“确定”时,respond 将弹出一个对话框,类似于图 1 中的对话框。填写空白并单击“确定”以发送传真。
现在,由于 MultiFax 的一部分涉及广播传真列表的设置和维护,如果您要发送到此类列表,则需要以不同的方式进行操作。当提示输入“传真号码”时,您必须输入 @,后跟广播传真组名称。例如,如果组名称为 Toronto,则用户将输入 @Toronto。
如果您希望您的用户立即获得他们的传真作业已假脱机的确认(您可能确实希望如此),请将 WINPOPUP.EXE 也添加到他们的启动文件夹中。Winpopup 是 Windows 95 发行版的标准配置,位于 C:\WINDOWS 目录中。然后,在“Winpopup 快捷方式”属性选项卡(通过右键单击访问)上,我将“运行:”选项设置为“最小化”。Winpopup 在 Win95 任务栏中以不显眼的方式启动,并且仅在收到消息时才弹出。还有一件事。单击任务栏上的“Winpopup”以最大化它。现在单击“消息”,然后单击“选项”。单击“收到消息时弹出对话框”的复选框,以便 Winpopup 在每次收到消息时弹出。
Winpopup 也是我们互相发送小 秘密 便条的好方法,当您应该工作时,但我 从没 这么说过。
现在我们已经准备好 mgetty+sendfax,并且我们的 Windows PC 都已设置为传真。我们现在想要的是通过 Web 浏览器界面报告所有这些活动的方式。这就是 MultiFax 软件发挥作用的地方。
MultiFax 管理工具由少量 Perl 脚本、网页和支持程序组成,它们与 mgetty+sendfax 相关联。要安装 MultiFax,请按照以下步骤操作。
使用 tar 命令将捆绑包解压缩到临时目录中。
以 root 用户身份,通过键入 ./install 运行安装脚本。安装脚本将完成其余工作。
管理队列、监控传出和传入传真的状态,然后在之后进行清理有点困难。您可以让您的系统在处理完所有内容后立即删除所有内容,但我的经验是人们想要更多反馈。这给我们留下了一项清理工作。
要访问 Web 工具,请将您的浏览器指向 http://your_serbserver_address/multifax/。您现在应该看到 MultiFax 菜单(参见图 2),其中包含以下四个项目
检查传出传真队列状态
检查传入传真队列(或打印)
更新广播传真组
文档
传出界面以三种不同的方式查看队列:当前传出队列、任何挂起的作业和成功发送的旧作业。所有三个视图都提供了从队列中删除作业的机会。挂起视图具有重新发送选项(当您确信您的电话号码正确无误时)。有关示例屏幕,请参见图 3。
Perl 脚本 showfaxq.pl 通过查询 faxq 获取当前、挂起或旧(成功发送)作业来构建 HTML 页面。您可以在每个级别选择删除排队的作业。奇怪的是,mgetty 附带的 faxrm 版本不允许您删除已发送的传真,只能删除仍在等待发送的传真。MultiFax 安装将安装 faxrm 的修改版本,以解决这种奇怪的行为。
发送排队的传真是 faxrunq 的工作,它也是 mgetty+sendfax 的一部分。以这种方式处理队列可能不是我们想要做的。实际上,有几种方法可以自动化此过程。第一种是创建一个 cron 条目,定期检查队列并处理它。root 的 crontab 的一个好条目看起来像这样
0,15,30,45 7-19 * * * /usr/bin/faxrunq -s\ 1>/dev/null 2>/dev/null
另一种选择是运行 faxrunqd,它作为守护程序运行并定期检查是否有传真等待发送。这是迄今为止最简单的方法。cron 方法允许您设置自己的时间表来处理队列。
屏幕的下一部分显示挂起的作业。除了删除选项外,还可以将这些挂起的作业重新提交到当前作业队列。
最后,我们有旧作业列表。那里的唯一选择是当您确信作业已完成并且传真已发送时删除某些内容。
当传真到达时,您可以选择使用 new_fax 脚本立即打印它们,或者只是将它们堆积在队列中并手动打印它们。为了让您的传真立即发送到打印机,mgetty+sendfax 包含一些脚本,具体取决于您的打印输出的最终目的地。在我的系统(Red Hat 6.0)上,示例脚本位于 /etc/mgetty+sendfax 目录中。在我的本地服务器上,我们使用 new_fax.lj 脚本,该脚本为 Laserjet 打印机格式化输出。要使用该脚本,只需将 new_fax.whatever 复制(或重命名)到 new_fax。
基于 Web 的菜单列出了传入队列中的传真,并允许打印或重新打印任何给定页面。每个条目都通过日期和时间、发送者和页码来标识。打印页面只需单击右侧的红色按钮即可。
现在到了有趣的部分,也是简单的传出传真 Web 界面变得如此重要的真正原因。我们收到了许多关于以合理价格(或免费)提供广播传真软件包的请求。在检查新闻组并发现这些解决方案并不容易获得后,很明显我们需要创建一个。
事实证明,mgetty+sendfax 软件包确实允许广播传真。如上所述,您可以通过发送到 @listname 而不是仅发送到用户名来指定列表名称。这将要求用户在 Linux 服务器上维护一个文本列表。不算太难,但是那些宁愿不看到 shell 提示符或处理 vi 的 Windows 用户呢?毕竟,我们是为了这些用户才这样做。
单击 MultiFax 菜单中的“更新广播传真组”链接。您将看到当前传真组的列表。有关示例,请参见图 4。您可以 添加 新组,修改 现有组,或从列表中 删除 组。基本安装尚无组,因此您将只有一个选择——添加组。
让我们从添加一个名为“Customers”的组开始。从列表中选择“添加新传真组”,或只需单击同名的单选按钮。然后单击“提交请求”,您将看到组更新屏幕。如果您选择现有组并想要修改它,您将看到相同的屏幕。唯一的区别是此时您的组名称为空白。输入 Customers 并跳到下一个字段。
最初,表单有十行用于姓名和电话号码。当您填写完所有十行后,您可以通过单击标记为“修改现有组”的按钮来继续添加更多姓名。如果您需要超过十个,只需返回广播传真菜单,选择您的组(Customers),单击“修改”,您将获得另外十个姓名字段以供添加。事实上,您将始终有十个空闲字段。
最后,您可以选择删除已过时或不再适用的组。从列表中删除组从相同的菜单开始。当您单击“提交请求”时,系统将提示您确认请求“您确定要执行此操作吗?”,之后该组将被永久删除。
MultiFax 具有第四个菜单选项,其中包含简单的、仅供参考的文档。MultiFax 发行版附带了一些 README 和文档,应该可以解答可能出现的任何其他问题。使用那里的内容,您可以根据自己的目的自定义解决方案。
无论您准备为商业传真解决方案花费多少,都不存在“插入它,您的整个网络将在三十秒后启动并发送传真”这样的事情。您,这位受困的系统管理员,将必须施展一些魔法才能使其发生。使用这些说明,您可以创建一个可靠、廉价且相当简单的 Linux/Windows 网络传真解决方案。将基于 Web 的传真管理软件添加到该软件包中,您可以将管理网络传真的一些责任卸载给您的用户。
此外,作为系统管理员,您还有更重要的事情要担心——比如打印机,但我们不会去那里。
