efax 是一个轻量级的传真软件,允许在 Linux 系统上通过传真调制解调器发送和接收传真。它支持多种文件格式,并可以将接收到的传真保存为图像文件。
# 安装 efax 软件包
sudo apt install efax
# 安装传真查看工具
sudo apt install fax2ps fax2tiff
# 安装图像处理工具
sudo apt install imagemagick ghostscript
# 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 |
不拨号,只准备传真文件 |
# 发送文本文件到传真号码 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
# 启用自动应答模式接收传真
efax -d /dev/ttyS0 -a
# 接收传真并保存为 TIFF 文件
efax -d /dev/ttyS0 -o recv -a
# 接收传真并转换为 PostScript
efax -d /dev/ttyS0 -o recv -a | fax2ps > received.ps
# 创建一个简单的传真接收脚本
#!/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 服务
# 将接收的传真转换为多种格式
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
#!/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
# 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+ 界面、更易操作 |
| 互联网传真服务 | 在线传真服务 | 无需硬件、通过电子邮件发送 |
# 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 集成到文档处理流程中,自动发送生成的报告或发票。
作为主要传真系统的备份方案,在主要系统故障时提供基本的传真功能。
fax2ps传真转 PS
fax2tiff传真转 TIFF
enscript文本转 PS
convert图像转换
ps2pdfPS 转 PDF
cu调制解调器连接
minicom串口通信
screen终端复用器