piFAX và mail server

Thêm một fax modem cho RPi là chúng ta có một máy fax hoàn chỉnh:

  • Fax đi từ các ứng dụng quen thuộc bằng cách in ra máy in Hylafax
  • Fax từ mọi máy trong mạng bằng user/pass của mình
  • Fax từ một email gởi tới RPi Fax server
  • Nhận fax đến và chuyển thành mail gởi về địa chỉ qui định
  • Nhận fax đến và tự in ra giấy
  • Quản lý máy fax từ xa

Một loại fax modem đơn giản dạng USB:

Tuy hình thức tương tự nhau, nhưng có hai loại khác biệt:

  • Software Modems hay softmodems: hoạt động nhờ vào phần mềm và tài nguyên máy tính mà nó gắn vào, có phần cứng tối thiểu nên rẻ. Loại này còn gọi là Winmodems vì khởi thủy được làm ra cho Windows. Loại này khó có thể hoạt động với Linux.
  • Hardware modems, tự nó có controllers onboard và không phụ thuộc vào phần cứng máy tính. Nó có giá cao hơn và sử dụng được trên Linux.

Các hảng sản xuất không nói rõ modem của họ loại nào, người mua cần phải tra tài liệu từ internet nếu biết tên chip hay nhản hiệu modem. Tuy nhiên các modem rẻ tiền không thể là hardware modems. Ngoài ra các nhản hiệu rẻ tiền còn có vấn đề về driver tương thích với hệ điều hành.

Chuẩn bị

  • RPi v3
  • USB fax modem (hardware modem)
  • Đường dây điện thoại (analog)

Tìm cổng serial của Fax modem

Gắn fax modem vào RPi. Đa phần là RPi sẽ tự cài driver.

Gõ lệnh sau để xem RPi cấp cổng serial nào cho modem

dmesg | grep tty

Tìm đến thiết bị USB và ghi lại tên cổng serial, ở đây là ttyACM0

Cách khác

Cài đặt phần mềm

Giả sử ta đã có mail server trên RPi Postfix+Dovecode+Rainloop (cách cài đặt không cần mail server đề cập trong bài khác)

Cài đặt thêm HylaFAX

sudo apt-get install hylafax-server

Sau khi cài đặt xong, ứng dụng tự gọi faxaddmodem để cài đặt modem cho Hylafax và faxsetup. Có mấy tham số cần lưu ý là:

  1. Mã quốc gia: 84 (Việt Nam)
  2. Mã vùng: 28 (TpHCM)
  3. Số điện thoại của modem
  4. Đầu số gọi liên tỉnh: 0
  5. Đầu số gọi ngoài nước: 00

Các tham số khác chấp nhận mặc định

Nếu nhập sai cũng không sao, vào /etc/hylafax/config.ttyACM0 để sửa lại.

Tiếp theo, mở trang /etc/hylafax/hosts.hfaxd để sửa lớp mạng của RPi theo thực tế, thí dụ

192\.168\.0\.:::

Kiểm tra file /etc/default/hylafax, bảo đảm không có dấu # trước dòng

RUN_HYLAFAX=1

Cuối cùng khởi động lại RPi

Kiểm tra xem Hylafax có hoạt động không qua dòng lệnh

faxstat

ta sẽ nhận được tương tự như

HylaFAX scheduler on my_domain: Running
Modem ttyACM0 (số_điện_thoại): Running and idle

Gởi fax bằng dòng lệnh

sendfax -n -d số_fax_người_nhận tài_liệu_cần_fax

Tạo user cho dịch vụ fax

Chỉ những user linux được faxadduser mới có quyền gởi fax.

Tạo user linux

adduser user_name

Tìm UID của user mới tạo trong bảng /etc/group

cat /etc/group

Tìm dòng tương tự như

user_name:x:1001:

khi đó UID của user_name là 1001

Tạo user cho fax

faxadduser -p password -u 1001 user_name

trong đó password là mật khẩu của user_name

Fax client

Chưa có nhiều công cụ client tiện dùng cho Hylafax. Có lẽ nên dùng nhất là Winprint HylaFAX Reloaded. Ứng dụng này tạo một máy in HylaFAX. Tài liệu từ một ứng dụng Windows có thể fax đi bằng cách in ra máy in HylaFAX. Tuy nhiên máy in này chỉ dùng được trong mạng cục bộ. Ngoài ra có thể tạo máy in ra fax trên Hylafax server và chia sẽ máy in qua Samba.

Giả sử mail server có DNS hay DDNS, khi đó login vào Rainloop qua domain và dùng mail to fax để fax từ xa.

Cấu hình mail to fax

Người dùng gởi email có file đính kèm là tài liệu cần fax về địa chỉ số_fax_nhận@fax.mydomain, các file kèm sẽ được tự động trích xuất và fax về số fax nhận.

Có hai cách cho kiểu email dạng số_fax_nhận@fax.mydomain, chọn một trong 2

  1. transport và master.cf
  2. valias và aliases

Trong cả hai cách, chúng ta chuyển hướng email đến một script, cung cấp cho nó số fax người nhận và nội dung email, sau đó script dùng faxmail để fax các file attach của email.

Script cho trường hợp 1 rất đơn giản vì postfix có thể gởi thông tin số fax nhận và người gởi, trong trường hợp 2 thì chúng ta phải lọc từ email các thông tin cần thiết.

1. transport và master.cf

Mở file /etc/postfix/master.cf thêm vào cuối file

fax unix - n n - 1 pipe
  flags= user=fax argv=/path/to/mail2fax ${user} ${sender}
  • fax ở dòng đầu là dịch vụ fax
  • fax ở dòng thứ hai là tên user của Linux, user này nếu chưa có thì phải tạo.
  • /path/to/mail2fax là script xử lý mail đến

Tiếp theo mở file /etc/postfix/main.cf thêm vào dòng

transport_maps = hash:/etc/postfix/transport
fax_destination_recipient_limit = 1

Kế đến là tạo file /etc/postfix/transport có nội dung

fax.mydomain      fax:localhost

để thông báo với postfix rằng các email có tên miền fax.mydomain phải chuyển đến dịch vụ fax, mà theo master.cf thì script mail2fax sẽ nhận và xử lý email này.

Cuối cùng mã hóa file transport

postmap /etc/postfix/transport

File script mail2fax như file kèm và tất nhiên phải có quyền thực thi.

2. valias và aliases

Mở file /etc/postfix/main.cf thêm vào dòng

virtual_alias_maps = hash:/etc/postfix/valias
fax_destination_recipient_limit = 1

Tiếp theo tạo file /etc/postfix/valias

@fax.mydomain      fax

rồi mã hóa

postmap /etc/postfix/valias

Mở file /etc/aliases thêm vào dòng

fax:    |path/to/mail2fax

rồi chạy lệnh thông báo cập nhật aliases

newaliases

File script mail2fax trong trường hợp này làm nhiều việc, trích xuất từ email số fax nhận, địa chỉ email người gởi, sau đó chuyển nội dung email cho faxmail, rồi cho sendfax. Chính vì vậy mà fax có thể được gởi 2 lần. Script từ Hylafax+ này cần sửa lại đôi chút, bỏ qua lệnh faxmail! Chú ý là trong trường hợp này user fax phải không tồn tại, nếu không mọi email cho user fax có thể chuyển nhầm sang dịch vụ fax.

Chú thích

  • Một trong những rắc rối là email có thể chứa text dạng UTF-8, trong khi Hylafax chỉ hiểu ISO-8859. Khi đó hoặc bản fax không đọc được hoặc không thể fax đi.
  • Mặc khác, email có nội dung ở phần body sẽ được diễn giải theo HTML mà Hylafax chưa có công cụ chuyển đổi chính xác ra PS, dẫn tới lỗi.

Vì vậy tốt nhất là phân tích email để chỉ lấy file gởi kèm, thí dụ dùng munpack của gói mpack.

Email bản fax đến

Mặc định Hylafax sẽ gởi bản fax vừa nhận được cho user FaxMaster qua email. Có thể thay đổi user nhận ảnh của fax bằng cách tạo file /var/spool/hylafax/etc/FaxDispatch có nội dung như

SENDTO = tên_user;
FILETYPE = tif;

Chuyển đổi định dạng tài liệu fax

Hylafax chỉ hỗ trợ các dạng tài liệu ps, pdf, tiff và text unicode 8859-1. Vì vậy phải chuyển tài liệu cần fax sang các định dạng này. Mặc định công cụ chuyển đổi MIMEconvertersfaxmail, tuy nhiên công cụ này chỉ chuyển đổi các định dạng trên sang ps của fax. Chúng ta có thể tự cung cấp thêm công cụ chuyển đổi khác cho Hylafax để có thể fax ảnh jpeg, png hay các file text, html unicode utf-8.

Thí dụ, chuyển đổi file kèm có MIME Type là image/jpeg thành ps bằng công cụ riêng như sau:

  • Tạo thư mục image, tạo file script jpeg trong thư mục image. Script jpeg có nhiệm vụ chuyển đổi jpeg ra ps.
  • Tương tự với dạng image/png, text/plain, text/html

Giả sử các thư mục imagetext được đặt trong thư mục tool, chúng ta tạo một link tên faxmail trong /usr/sbin trỏ đến thư mục tool. Sau đó khởi động lại hylafax.

Một tool giúp chuyển đổi các định dạng file ảnh sang ps là imageMagick, tuy nhiên nó cũng cần các tool phụ trợ.

Tuy nhiên, đáng ngạc nhiên là hylafax có sẵn công cụ chuyển đổi jpeg và png sang ps, chỉ là không được thiết kể để dùng.

Mở tập tin /var/spool/hylafax/etc/typerules, tìm đến dòng

0   short   0xffd8   error  filetype conversion support not configured

đặt # ở đầu dòng và thêm vào các dòng

0   short   0xffd8   ps     jpegtopnm < %i| ppmtopgm | \
                                pnmscale -xysize %w %l | \
                                pnmtops -dpi %R -equalpixels >%o

Các tool trong câu lệnh đều có sẵn trên rPi. Save rồi khởi động lại hylafax

Lỗi font với textfmt hay enscript

Mặc định textfmtenscript được gọi để chuyển text ISO-8859-1 hay ascii sang ps.

textfmt mặc định dùng font Courier-BoldCourier nhưng không tìm thấy font do các đường dẫn không đúng.

Mở file /var/spool/hylafax/etc/hyla.conf, sửa lại dòng

FontMap: /usr/share/ghostscript/9.20/Resource/Init:/usr/share/ghostscript/9.20/lib

(Kiểm tra thư mục /usr/share/ghostscript để biết chính xác ghostscript đang ở phiên bản nào.)

Mở file /usr/share/ghostscript/9.20/Resource/Init/Fontmap.GS, sửa 2 dòng liên quan đến font Courier

%/Courier-Bold        /NimbusMonoPS-Bold ;
/Courier-Bold         (n022024l.afm) ;
/Courier-BoldOblique  /NimbusMonoPS-BoldItalic ;
%/Courier             /NimbusMonoPS-Regular ;
/Courier              (n022023l.afm) ;

Thử lại

echo 'ASCII text' | textfmt -B
echo 'ASCII text' | enscript -B -f Courier-Bold@11 --margins=24::60:36 -s 2.2 -q -M A4 -o /dev/stdout

Nếu không có lỗi và nhận được nội dung ps tuơng ứng thì đã đặt font thành công

Comments Off on piFAX và mail server

Filed under Software

Comments are closed.