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à:
- Mã quốc gia: 84 (Việt Nam)
- Mã vùng: 28 (TpHCM)
- Số điện thoại của modem
- Đầu số gọi liên tỉnh: 0
- Đầ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
- transport và master.cf
- 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 MIMEconverters là faxmail, 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 image và text đượ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 textfmt và enscript được gọi để chuyển text ISO-8859-1 hay ascii sang ps.
textfmt mặc định dùng font Courier-Bold và Courier 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