Linux efax 命令详解

简介: efax 是一个用于发送和接收传真的软件,它通过传真调制解调器处理传真文档,支持将文本、图像等转换为传真格式进行传输。

命令概述

efax 是一个轻量级的传真软件,允许在 Linux 系统上通过传真调制解调器发送和接收传真。它支持多种文件格式,并可以将接收到的传真保存为图像文件。

主要功能
  • 发送和接收传真
  • 支持文本和图像文件
  • 自动应答传真
  • 传真队列管理
支持格式
  • 文本文件 (.txt)
  • PostScript 文件 (.ps)
  • TIFF 图像文件 (.tif, .tiff)
  • PDF 文件 (通过转换)

安装 efax

Debian/Ubuntu 系统安装

# 安装 efax 软件包
sudo apt install efax

# 安装传真查看工具
sudo apt install fax2ps fax2tiff

# 安装图像处理工具
sudo apt install imagemagick ghostscript

RHEL/CentOS/Fedora 系统安装

# CentOS/RHEL 7/8
sudo yum install efax

# Fedora
sudo dnf install efax

# 安装转换工具
sudo yum install ghostscript ImageMagick

从源码编译安装

# 下载源码
wget http://www.cce.com/efax/download/efax-0.9a-001114.tar.gz
tar -xzf efax-0.9a-001114.tar.gz
cd efax-0.9a

# 编译安装
make
sudo make install

# 安装手册页
sudo cp efax.1 /usr/share/man/man1/

语法格式

# 发送传真
efax [选项] 文件

# 接收传真
efax -d 设备 [选项]

# 查看传真
fax2ps [选项] 传真文件
fax2tiff [选项] 传真文件

常用选项

选项 说明
-d 设备 指定调制解调器设备文件
-t 号码 发送传真到指定电话号码
-v 等级 设置详细级别(0-9)
-a 启用自动应答
-b 波特率 设置调制解调器波特率
-x 字符串 发送 AT 命令字符串到调制解调器
-o 选项 设置传真选项
-f 文件 读取要发送的文件
-i 文件 设置身份字符串(从文件读取)
-n 不拨号,只准备传真文件

使用示例

示例1:发送文本传真

# 发送文本文件到传真号码 555-1234
efax -d /dev/ttyS0 -t 5551234 document.txt

# 使用详细模式
efax -d /dev/ttyS0 -t 5551234 -v 5 document.txt

# 指定波特率
efax -d /dev/ttyS0 -b 19200 -t 5551234 document.txt

示例2:接收传真

# 启用自动应答模式接收传真
efax -d /dev/ttyS0 -a

# 接收传真并保存为 TIFF 文件
efax -d /dev/ttyS0 -o recv -a

# 接收传真并转换为 PostScript
efax -d /dev/ttyS0 -o recv -a | fax2ps > received.ps

示例3:传真服务器配置

# 创建一个简单的传真接收脚本
#!/bin/bash
DEVICE="/dev/ttyS0"
FAX_DIR="/var/spool/fax/incoming"
LOG_FILE="/var/log/efax.log"

# 创建接收目录
mkdir -p "$FAX_DIR"

# 启动传真接收服务
echo "$(date): Starting fax receiver" >> "$LOG_FILE"
efax -d "$DEVICE" -a -o "$FAX_DIR/fax_%Y%m%d_%H%M%S.tif" >> "$LOG_FILE" 2>&1

# 设置开机启动
# 将脚本添加到 /etc/rc.local 或创建 systemd 服务

示例4:传真格式转换

# 将接收的传真转换为多种格式
TIFF_FILE="received.tif"

# 转换为 PostScript
fax2ps "$TIFF_FILE" > output.ps

# 转换为 PDF
fax2ps "$TIFF_FILE" | ps2pdf - output.pdf

# 转换为 JPEG
convert "$TIFF_FILE" output.jpg

# 转换为 PNG
convert "$TIFF_FILE" output.png

示例5:带通知的传真发送

#!/bin/bash
# 发送传真并发送通知
PHONE="5551234"
FILE="document.txt"
DEVICE="/dev/ttyS0"

# 发送传真
if efax -d "$DEVICE" -t "$PHONE" "$FILE"; then
    echo "传真发送成功" | mail -s "传真发送成功" user@example.com
    notify-send "传真" "成功发送到 $PHONE"
else
    echo "传真发送失败" | mail -s "传真发送失败" user@example.com
    notify-send "传真" "发送到 $PHONE 失败"
fi

配置文件

/etc/efax.conf 配置文件

# efax 配置文件示例
# 调制解调器设备
DEVICE=/dev/ttyS0

# 调制解调器波特率
BAUD=19200

# 身份字符串
IDSTRING="FAX from Linux"

# 传真目录
INCOMING_DIR=/var/spool/fax/incoming
OUTGOING_DIR=/var/spool/fax/outgoing

# 日志文件
LOG_FILE=/var/log/efax.log

# 传真分辨率
RESOLUTION=fine  # 标准: normal, 精细: fine

# 传真页大小
PAGESIZE=letter  # letter, a4, legal

# 重试次数
RETRIES=3

# 重试间隔(秒)
RETRY_DELAY=60

使用配置文件

# 使用配置文件发送传真
efax -c /etc/efax.conf -t 5551234 document.txt

# 使用配置文件接收传真
efax -c /etc/efax.conf -a

传真调制解调器设置

设备文件 说明 典型设备
/dev/ttyS0 第一个串口 (COM1) 内置调制解调器
/dev/ttyS1 第二个串口 (COM2) 内置调制解调器
/dev/ttyUSB0 第一个 USB 转串口设备 USB 传真调制解调器
/dev/modem 调制解调器符号链接 通用调制解调器设备

调制解调器初始化字符串

# 测试调制解调器连接
echo "AT" > /dev/ttyS0
cat < /dev/ttyS0

# 设置传真调制解调器
AT+FMFR?    # 查询制造商
AT+FCLASS=? # 查询支持的传真类别
AT+FCLASS=1 # 设置为 Class 1 传真模式

# 常用 AT 命令
ATZ         # 重置调制解调器
ATE0        # 关闭回显
ATQ0        # 返回结果码
ATV1        # 详细结果码
ATX4        # 扩展结果码

传真服务器架构

发送队列
#!/bin/bash
# 发送队列管理脚本
QUEUE_DIR="/var/spool/fax/outgoing"
LOG_FILE="/var/log/faxqueue.log"

# 处理队列中的传真
for fax_file in "$QUEUE_DIR"/*.fax; do
    if [ -f "$fax_file" ]; then
        phone_number=$(basename "$fax_file" .fax)
        echo "$(date): 发送传真到 $phone_number" >> "$LOG_FILE"
        efax -d /dev/ttyS0 -t "$phone_number" "$fax_file" && rm "$fax_file"
    fi
done
接收处理
#!/bin/bash
# 接收传真处理脚本
INCOMING_DIR="/var/spool/fax/incoming"
PROCESSED_DIR="/var/spool/fax/processed"

# 处理接收到的传真
for fax_file in "$INCOMING_DIR"/*.tif; do
    if [ -f "$fax_file" ]; then
        # 转换为 PDF
        filename=$(basename "$fax_file" .tif)
        fax2ps "$fax_file" | ps2pdf - "$PROCESSED_DIR/$filename.pdf"

        # 发送通知
        echo "收到新传真: $filename" | mail -s "新传真" user@example.com

        # 移动已处理文件
        mv "$fax_file" "$PROCESSED_DIR/"
    fi
done

常见问题与故障排除

可能原因: 设备文件不存在或权限问题

排查步骤:

# 1. 检查调制解调器设备文件
ls -l /dev/ttyS*
ls -l /dev/ttyUSB*

# 2. 检查用户权限
groups
# 确保用户在 dialout 组中

# 3. 添加用户到 dialout 组
sudo usermod -a -G dialout $USER

# 4. 设置正确的权限
sudo chmod 666 /dev/ttyS0
# 或创建 udev 规则

# 5. 测试调制解调器连接
echo "AT" > /dev/ttyS0
cat < /dev/ttyS0

可能原因: 电话号码格式或调制解调器配置错误

排查步骤:

# 1. 检查电话号码格式
# 正确的格式:1234567890 或 1-234-567-890
# 可能需要添加拨号前缀(如 9 转外线)

# 2. 使用详细模式调试
efax -d /dev/ttyS0 -t 5551234 -v 9 document.txt

# 3. 测试调制解调器拨号
echo "ATDT5551234" > /dev/ttyS0

# 4. 检查调制解调器初始化字符串
# 在配置文件中添加适当的 AT 命令

# 5. 检查线路连接
# 确保电话线正确连接到调制解调器

可能原因: 分辨率设置或文件格式问题

排查步骤:

# 1. 设置更高分辨率
efax -d /dev/ttyS0 -t 5551234 -o fine document.txt

# 2. 将文本转换为 PostScript 再发送
enscript -p output.ps document.txt
efax -d /dev/ttyS0 -t 5551234 output.ps

# 3. 使用图形文件时转换为合适的格式
convert image.jpg image.tiff
efax -d /dev/ttyS0 -t 5551234 image.tiff

# 4. 调整页面大小
# 确保传真页面大小与文档匹配

# 5. 检查接收方的传真机设置
# 某些传真机可能需要特定的设置

现代替代方案

软件 描述 特点
HylaFAX 企业级传真服务器 支持多调制解调器、客户端/服务器架构
AvantFAX 基于 Web 的传真管理 Web 界面、用户管理、电子邮件集成
FAX for CUPS CUPS 打印系统传真支持 集成到打印系统、易于使用
efax-gtk efax 的图形界面 GTK+ 界面、更易操作
互联网传真服务 在线传真服务 无需硬件、通过电子邮件发送

HylaFAX 安装示例

# Debian/Ubuntu
sudo apt install hylafax-server hylafax-client

# RHEL/CentOS
sudo yum install hylafax

# 配置 HylaFAX
sudo faxsetup
sudo faxaddmodem

# 启动服务
sudo systemctl start hylafax
sudo systemctl enable hylafax

实际应用场景

小型办公室

设置简单的传真接收服务器,自动将接收的传真转换为 PDF 并发送到电子邮件。

文档自动化

将 efax 集成到文档处理流程中,自动发送生成的报告或发票。

备份传真系统

作为主要传真系统的备份方案,在主要系统故障时提供基本的传真功能。

注意事项

  1. 硬件要求: 需要支持传真的调制解调器(不是所有调制解调器都支持传真)
  2. 电话线: 需要连接到电话线路(模拟线路)
  3. 权限: 用户需要访问串口设备的权限(通常在 dialout 组)
  4. 兼容性: 某些现代调制解调器可能不支持 Class 1 传真协议
  5. 文件格式: 直接支持的文件格式有限,复杂文档需要预先转换
  6. 配置复杂度: 传真调制解调器的配置可能比较复杂,需要正确的 AT 命令
  7. 可靠性: 通过模拟电话线传输可能受线路质量影响
  8. 安全考虑: 传真内容不加密,敏感信息可能需要其他传输方式

相关命令

fax2ps

传真转 PS

fax2tiff

传真转 TIFF

enscript

文本转 PS

convert

图像转换

ps2pdf

PS 转 PDF

cu

调制解调器连接

minicom

串口通信

screen

终端复用器