家で骨董品のようなSHARPの電話/FAX機(UX-T35CL)を使っているが,何年か前にスキャナー部分が壊れてしまってFAXの送信が出来なくなっている
FAXの送信はめったにしないけどたまに必要な時があるので,どうしようかと思っていた。
SHARPの電話/FAX機が置いてあるそばにRaspberry Pi Zero Wがあるんで,いまさらではあるがFAX Modemを使ってFAXを送受信出来る環境を作成し,ネットワーク上のPCからFAXを送信したり,FAXを受信したらプリンターから印刷するようにしてみた。
US Roboticsの古いSPORTSTERやMegahertzもまだ持ってるけど,これらをRaspberry Pi Zero Wで使うにはちょっと大変なんで,以前使っていたRATOCのREX-USB56がどこかにあるはずなのでそれを見つけて使ってみることにした。
Raspberry Pi Zero Wは学習リモコンや部屋の温度/湿度の測定なんかで使っていたんだけど,IFTTTの無料で使えるサービスが劣化してしまってからは部屋の温度/湿度の測定ぐらいにしか使っていなかった。
OSはRaspbian Stretchを使っているんだけど,しばらく更新をしてこなかったので更新作業から始めた。そしたらなかなかすんなり更新が出来ず,更新エラーを修正していたらなんとBusterになってしまった それでも古いけど*1・・・
Raspberry Pi Zero WのUSBコネクタはUSB 2.0 MicroUSBなんで,OTGケーブル(MicroUSB/USB A)経由でREX-USB56を接続した。自動的にハードウェアを認識して,デバイスドライバーのロードとデバイスファイルが作成された。
# lsusb Bus 001 Device 003: ID 0572:1321 Conexant Systems (Rockwell), Inc. : # dmesg | grep cdc_acm [ 21.644279] cdc_acm 1-1.1:1.0: ttyACM0: USB ACM device : # lsmod | grep cdc_acm cdc_acm 19834 2 # ls -la /dev/ttyACM* crw------- 1 uucp dialout 166, 0 1月 3 09:15 /dev/ttyACM0
NTT西日本からレンタルしているRT-500KIの電話機2とREX-USB56を接続した。
電話機1には壊れているSHARPの電話/FAX機がそのままつながっていて,電話機として引き続き使っている。
NTT西日本のフレッツ光での固定電話はひかり電話なのだが,FAXを外部から着信する時に指定着信番号を追加すると電話機2で直接着信することが出来るのでFAX専用としては便利に使える。
RT-500KIの電話機2に指定着信番号に2を設定して,電話番号*2で着信できるようにした。
また,ひかり電話はアナログ電話と違いIP電話なのでパケットが途切れる場合がある。途切れた場合音声電話であれば特に問題にはならないが,FAXデータの送受信時にパケットが途切れるとFAXデータの伝送が途切れてしまいエラーとなってしまう。RT-500KIの設定の音質優先モードを「優先や最優先」に設定することで多少は改善出来るかもしれない。
現在はとりあえず「なし」で運用している。
FAXサーバーを実現するのにオープンソースで開発されていて無料で使用できるHylaFAX Community Editionをインストールする。
FAXサーバーを使うと,ネットワーク上の他のマシンからFAXを送信したり,外部からFAXを受信して他のマシンで確認したり,プリンターで印刷したり出来るようになる。
印刷しなければエコにつながるかも。
以下のようにパッケージ管理ツールでHylaFAXをインストール出来た。
# apt install hylafax-server
インストール後にfaxsetupが起動され,設定を色々と尋ねられて答えることで設定を行う。
必要だろうと思われるところだけ設定して,後はデフォルトのままにした。
これらの設定でModem関連はconfig.ttyACM0のようなファイルに保存されるので,後で変更もできる。
インストール後,TagLineFormat(FAXの1行目のヘッダーでどのように表示するかを設定する)を以下のように変更した。デフォルトだと日付部分が%cになっていて,OSのロケールが日本語だと文字化けするから。
TagLineFormat: "From %%l|%Y-%m-%d %T|Page %%P of %%T"
ここに使われるフォントは,18pointのLucida Typewriterフォント(lutRS18.pcf)が使われている。
TagLineFont: etc/lutRS18.pcf
用紙のサイズを/etc/hylafax/pagesizesファイルでデフォルトをA4に設定する。
default A4 9921 14031 9255 13207 472 345
Hylafaxサーバーにログインするためのユーザーアカウントを作成する。
管理者ユーザーの場合,
# faxadduser -a 管理者パスワード -p ユーザーパスワード ユーザー名
通常ユーザーの場合,
# faxadduser -p ユーザーパスワード ユーザー名
とすればユーザーアカウントを作成できる。
ユーザーの削除は,
# faxdeluser ユーザー名
とするようだ。
クライアントアプリから作成したユーザーアカウントで接続できる。
HylaFAXのサービスを再起動する。ステータスでエラーが無いか確認しておく。
# systemctl restart hylafax # systemctl status hylafax -l
HylaFAXのsendfaxコマンドで送信できる。
# sendfax -n -m -d 送信先電話番号 送信するファイル(txtやpdfなんか)
送信先電話番号のところにFAXが届けば送信機能は問題ない。
外部からFAXを家の「電話番号*2」としたFAX電話番号に送ってみる。
Modemが無音で着信して,FAXが受信できれば問題ない。FAXデータは/var/spool/hylafax/recvqディレクトリにTIF画像(FAXでは標準フォーマットらしい)で保存されるので確認しておく。
受信したFAXデータを指定した宛先へメールで送信してみる。
この場合,Raspbianでメールが外部に送信出来る環境が構築出来ている必要がある。
/etc/hylafax/FaxDispatchファイルを,以下の内容で作成する。
FILETYPE=pdf; SENDTO=送信先メールアドレス; FROMADDR=送信元メールアドレス;
これで,FAXを受信するとTIF画像をPDF文書に変換した後,指定した宛先へメールで送る。
複数の宛先にしたい場合は,SENDTO=XXXXXXを縦に必要数設定すればいいみたい。
/var/spool/hylafax/recvqディレクトリのTIF画像はそのまま残る。定期的に削除したほうが良いかも。
FILETYPEで指定できるのは,ps,tif,pdf。
/etc/hylafax/FaxDispatchファイルには,通常のHylaFaxの保存先とは違うカスタム処理を定義する事が可能。
Raspbianで印刷出来るプリンター(最近EPSONのEW-M754Tを買った)があれば,/etc/hylafax/FaxDispatchに,
if [ -f $FILE ]; then tiff2ps -a -w 9 -h 11 $FILE | lp -o fitplot -o media=a4 -d EPSON_EW_M754T_Series fi
のように追加すると,FAX受信後自動的に指定したプリンターで印刷される。
EPSON EW-M754Tは電源がOFFになっていても印刷データを受信すると自動的にONになって印刷されるのでなかなか便利(しばらくすると電源OFFになる)
普段使っているPCのアプリからFAXを送信する時に使うHylaFAXのクライアントアプリも,いろいろリリースされている。
以下は,Windowsマシンで仮想プリンターを利用してFAX送信ができるクライアントアプリ。
現在Winprint HylaFAX Reloadedを使っている。
基本的には,クライアントアプリはローカルネットワーク上(自宅orVPN接続)での環境で使用する。
Windowsマシンで仮想プリンターを使ってアプリから印刷をすると,FAXサーバーから送信出来るようにするHylaFAXクライアント。GPLで無料で使用できる。
受信したFAXの管理を行う機能はない。
インストールはWinprint HylaFAX ReloadedのFilesからインストーラーをダウンロード(version 0.4.11)して,ファイルをダブルクリックでインストール出来る。
自前で日本語化する言語ファイルを作成したので,解凍してlocaleディレクトリにコピーする。
アプリを起動しConfigureボタンをクリックしてLanguageで日本語に設定してOKを押すと,日本語表示になる。
再度設定ボタンを押して,メインタブでHylafaxが動作しているサーバーのIP Addressと上記で作成したログイン用のユーザー/パスワードを設定すると,HylaFAXサーバーに接続出来る。
ページサイズをA4に,解像度をファインに設定しておく。
Windowsアプリから印刷するプリンターにHylaFAXを選択して印刷をしてみる。
送信先のFAX番号が入力出来るダイアログが表示されるので送信先のFAX番号を入力して送信ボタンを押すと,HylaFAXのFAXサーバーからFAXが送信が出来た。
電話帳にはaddressbook.csvというファイル名のcsvファイル(UTF-8)が使用できる。
ABC会社,XXX-YYY-ZZZZ
YajHFCはJavaで書かれているWindows,Linux,MacOS Xなんかで動作するHylaFAXクライアントで,無料で使用できる。
Windowsでは仮想プリンターからFAX先を指定して送信が出来る。受信したFAX(recvqに保存されている)もクリックして表示できる。また送信キューの管理も出来る。
YajHFCのDownloadsからダウンロードでき,Windows用のインストーラーも用意されている。
電話帳にLDAPが使用できるのがGood。
上記のHylaFAXクライアントはローカルネットワーク上(自宅orVPN接続)で使用するので,インターネット上の端末等からはFAXサーバーに接続してFAX送信は出来ない。
そこで,FAX送信したいPDFファイルを電子メールに添付して,件名に相手の送信先FAX番号を入れてメールすると,HylaFAXからメールに添付されたPDFファイルをFAX送信するようにしてみた。
これが出来ると,Internet経由のメールやAndroid端末とかでもFAXが送れるようになるので便利になる。
便利ではあるが勝手に使用されないような最小限の対策も行う必要がある。
インターネットからメールが受信できるメールサーバーに,FAX送信メール専用のメールアカウントを作成する。
自前で運用しているメールサーバーがあるので,そこにfaxxxxxというアカウントを作成した。
このメールアドレス宛にFAX送信メールを送ると,このメールサーバーに届くようにする。
HylaFAXサーバーが動作しているRaspberry Pi Zero Wで,上記のメールサーバーのfaxxxxx宛のメールを読み出すために,fetchmailを使用する。
fetchmailのインストールはパッケージ管理ツールで行える。
# apt install fetchmail mpack nkf
faxxxxxアカウントを作成し,作業ディレクトリを用意する。
$ mkdir -p ~/sendfax/tmp
fetchmailの設定ファイル~/.fetchmailrcを,以下のような内容で作成する。
set postmaster yuji # error mailの送信先 set no bouncemail # error mailを送信者に返さない set no spambounce # spam mailを送信者に返さない poll xxxxx.xxx # 接続mailサーバー protocol pop3 # POP3 port 995 # 接続port user 'faxxxxx' # mailユーザー名 pass 'yyyyyyyy' # mailパスワード ssl # POP over SSL/TSLで接続 mda '/home/faxxxxx/sendfax.sh'
内容は,メールサーバー(例ではPOP3s)に合わせて作成する。
パーミションの設定をしておく。
$ chmod 600 ~/.fetchmailrc
通常fetchmailはメールサーバーからメールを取ってきてローカルマシンのメールボックスに転送目的で使用するが,今回はメールを取ってきてsendfax.shに渡すようにしている。
メールから添付されたPDFファイルを取り出して,FAXを送信するスクリプト~/sendfax.shを作成した。
- ! - ! - ! - | - | | | ! ! - | ! - ! - | ! - | - | ! | | ! |
|
必要なところ(トークンパスワード等)は編集し,パーミションの設定をしておく。
$ chmod 700 ~/sendfax.sh
sendfax.shはfetchmailから実行される。FAXの送信は,HylaFAXのsendfaxコマンドを使用している。
FAXサーバー側のsendfax.shで,正しいトークンが記載されているかどうかチェックし,正しくない場合はFAXの送信はしないようにしている。
こうしておかないと,どのユーザーからのメールでもFAXを送信することが出来てしまい,電話回線が勝手に使われてしまうことになってしまうから
またFAXでのカバーページは送信しないようにしている。
注意する事として,munpackだと添付ファイル名に日本語を使うとうまく処理できない場合があるので,添付ファイル名は英数字にする。
新しくコメントをつける