Debian10でhylafaxを使ってファックス送受信
今回はフリーOSのDebian(buster)と、フリーのFAXアプリケーションであるHylafaxを使ってPCをFAX化してみたいと思います。
2024年1月追記
筆者はDebian12(bookworm)でhylafaxのモデムが設定できない現象に遭遇しました。これは、hylafax+(プラス)に差し替えることで改善しました。本家は更新も滞っているようですので、こちらもご検討ください。
FAXモデムが別途必要です。
Debian(Linux)にモデムを接続
RS232Cモデム、USBモデム、USBシリアルケーブルそれぞれで試しました。
まず、手元にあった古いモデム「OMRON ME5614D2」をシリアルポートに接続してみました。とくに問題なく/dev/ttyS0として利用できるようになりました。ttySxの番号はシリアルポートがひとつしかなくても1や2の時もあります。
次に、USBポートモデムをを試してみます。「IO-DATA DFM-56U」を接続すると、/devディレクトリに「ttyACM0」という特殊ファイルが作成されました。
さらに、USBシリアルケーブルを試してみます。バッファローコクヨサプライの「Arvel SRC06-USB」に先ほどのオムロン製モデムを接続した状態で接続したところ「ttyUSB0」として認識されました。
筆者が以前にシリアルケーブルを接続した際は自動で認識されませんでした。そのような場合は手動での設定します。まず「lsusb」でデバイスのIDを表示させメモします。
# lsusb
...
Bus 001 Device 003: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
...
ID部分はvendor-id:product-idとなっています。これらを分けて次のように入力します。
これでttyUSBxのエントリーに表示されるようになると思います。この設定コマンドは再起動時には消えてしまいます。必要なら、rc.localやcronの@reboot等のエントリーに記述し、起動時にコマンドが入力されるようにします。
FAXモデムはおそらくデフォルトで「dialout」グループに所属していると思います。ユーザー権限で操作時する際は、該当のユーザーをこのdialoutグループに所属させるようにします。
ttyとは
少し寄り道して、/devに存在するttyについて書きます。これはQiita:「ttyとかptsとかについて確認してみる」によると、ユーザーが接続しているシリアルコンソールを指すそうです。
接続端末と考えるとよりわかりやすいかもしれません。
また、同名のコマンドも存在して現在接続しているコンソールを確認できます。
$ tty /dev/tty1
直接PCを操作している場合は上記のように/dev/tty1と表示されます。このときALT+F2キーでコンソールを変えてログインして同じコマンドを実行すると今度は次のような結果になります。
$ tty /dev/tty2
またTeraTerm等から接続している場合は次のようになります。
$ tty /dev/pts/0
これを利用して、tty1からpts0へ出力をかけることもできます。
$ echo hello>/dev/pts/0
PAYFORWARD:「ttyとptsとは」によるとttyは「teletypewriter」、ptsとは「pseudo(疑似)-terminal」の略だそうです。
SSHなどはアプリケーションで疑似的に端末を実現しているので、ptsとなるようです。
モデムはそのような端末として扱われるため「ttyACM0」という名前がつけられるとう話でした。
Hylafaxのインストール
モデムが認識されたら、次にファックスアプリのHylaFAXをインストールします。
Debian Wiki:「HylaFax」に従って進めていきます。
近頃はWindowsの機能としても仮想的にDebianを動かせたりしますが、仮想環境だと安定稼働させるのは難しいと書いてありました。
$ su - ... # apt update ... # apt install hylafax-server ...
インストールが終わったら設定をします。suを実行する時-を入れてないとパスの問題が発生しますので、その場合はいったん抜けて-を付けて入りなおしてください。
こちらは「すべてをカスタマイズせよ」を参考にさせていただきました。
# faxsetup ... HylaFAX configuration parameters are: [1] Init script starts faxq: yes [2] Init script starts hfaxd yes [3] Start old protocol: no Are these ok [yes]?
この状態でENTERを押します。この後もいつくかレスポンスを求められます。
設定で稼働させたプロセスを止めていいかとのことなのでyesと答えます。筆者の場合は6992でしたが、プロセス番号は様々です。
サーバーを再起動させるかなのでyesと答えます。
モデムの設定をするかどうかなのでyesと答えます
モデムを指定します。先ほど確認した通り、シリアルモデムは「ttyS0」のままでいいですが、USBモデムなら「ttyACM0」なので「ttyACM0」と入力します。
国別のコードです。日本は81です。
市街局番です。0を抜いて入力します。
電話番号です。+81(国コード)、先頭の0を抜いた市外局番、市内局番、番号を.(半角ピリオド)で区切って記述します。「+81.123.45.6789」
FAX送信時に表示される名前です。任意の半角文字列にしておきます。
さきほど省いた市外局番の0をここで設定します。
国際電話のプレフィックスです。010にしておきます。
この後は、しばらくデフォルト値でENTERを入力します。
Dial string rules file (relative to /var/spool/hylafax) [etc/dialrules]? Tracing during normal server operation [1]? Tracing during send and receive sessions [11]? Protection mode for received facsimile [0600]? Protection mode for session logs [0600]? Protection mode for ttyACM0 [0600]?
次から聞かれる2種の問いには好みによって設定してください。
電話を受けるまでのコール数です。
モデムの音です。OFFで問題ないと思いますが、ONにしておけばテスト時はわかりやすいと思います。
次の項目はデフォルト値のまま進めます。
Command line arguments to getty program ["-h %l dx_%s"]? Pathname of TSI access control list file (relative to /var/spool/hylafax) [""]? Pathname of Caller-ID access control list file (relative to /var/spool/hylafax) [""]? Tag line font file (relative to /var/spool/hylafax) [etc/lutRS18.pcf]?
この項目で日付印字のフォーマットを設定していますが、このままだと文字化けします。なので次のように修正します。
"From %%l %Y-%m-%d %T Page %%P of %%T" または "From¥ %%l|%F¥ %T¥ %Z|Page¥ %%P¥ of¥ %%T" ¥は環境によりバックスラッシュになります。
またしばらくデフォルト値でのENTERが続きます。
Time before purging a stale UUCP lock file (secs) [30]? Hold UUCP lockfile during inbound data calls [Yes]? Hold UUCP lockfile during inbound voice calls [Yes]? Percent good lines to accept during copy quality checking [95]? Max consecutive bad lines to accept during copy quality checking [5]? Max number of pages to accept in a received facsimile [25]? Syslog facility name for ServerTracing messages [daemon]? Set UID to 0 to manipulate CLOCAL [""]? Use available priority job scheduling mechanism [""]? Are these ok [yes]?
今までのこれらの設定がすべてOKならAre these okをyesで進めてください。次は電話回線のチェックがあるので、モデムの先にケーブルを差してください。
USBモデムデバイスが認識されているので、ここでモデムの反応がない場合はUSB自動サスペンドを解除するとうまくいくかもしれません。
この後もデフォルト値のENTERで進めます。
Hmm, this looks like a Class 1.0 modem. Product code (ATI0) is "56000". Other information(ATI3) is "CX93001-EIS_V0.2013-V92". DTE-DCE flow control scheme [default]? Modem manufacturer is "Rockwell/Conexant". Modem model is "AC/K56". Using prototype configuration file conexant-1.0... The modem configuration parameters are: ModemFlowControl: rtscts ModemHardFlowCmd: AT&K3 ModemNoFlowCmd: AT&K0 ModemRate: 19200 ModemSetupDCDCmd: AT&C1 ModemSetupDTRCmd: AT&D2 ModemSoftFlowCmd: AT&K4 Are these ok [yes]? ... Are these ok [yes]?
二度設定の確認を求められた後、別のモデムを設定しますか?と聞かれるのでこれだけnoを入力します。
最後です。モデム起動の確認にyesのままENTERを押したら設定完了です。
サービスの再起動を求められるので「systemctl restart hylafax」とします。
モデムの設定変更
インストール中のメッセージにも表示されますが「/var/spool/hylafax/etc/config.ttyACM0」にモデムの設定が記憶されます。もし修正が必要な場合はこのファイルに直接記述してもかまいません。
インストール時同様に対話式に設定を変更したい場合は「faxaddmodem」コマンドを使います。次に接続しているポートを聞かれるので、修正したいモデムのポートを入力してください。すると、現在の状態が表示され確認を求められるのでここで「no」と答えるとモデムの設定が始まります。
Serial port that modem is connected to [ttyACM0]?
...
Are these ok [yes]?
...
モデムを変更した場合もサービスの再起動が必要なので「systemctl restart hylafax」とします。
用紙設定
用紙設定は/var/spool/hylafax/etc/pagesizesになります。この一番最後に記述されているdefaultのエントリーがA4から始まっていれば、デフォルトでA4(縦)を使う設定です。
同名の設定ファイルが/etc/hylafaxディレクトリにも存在しますが、先のファイルに記述すればこちらにもコピーされます。
設定ファイルにも説明がある通り、各行の値はタブ区切りで、「名前」、「略称」の後に、用紙の「幅」と「高さ」、印字面の「幅」と「高さ」、印字開始の「縦」「横」位置です。
各値は1200で割って25.4をかけるとmm(ミリ)になります。逆算する場合は47.24をかけた値になります。例えばA4の長辺の場合297mm×47.24≒14030になります。
FAX送受信
送信は基本的にtiffで処理されますが、ps(ポストスクリプトファイル)やPDFファイルも指定できます。今はWindows10に「Microsoft Print to PDF」という印刷をエミュレートしてPDFかするものや、GhostScriptなどPDF化するフリーアプリが多く存在するのでPDFで管理するのが一番楽だと思います。
送信時のコマンドは「sendfax」です。これにオプションを付けて送信します。オプションの主なものは次の通りです。
- -d
宛先の番号を指定します。複数指定する場合は -d xxxx -d yyyyと繰り返します。
- -n
表紙を付けずに印刷します。
- -t
通信失敗時のリトライ回数です。デフォルトは3回となっています。
- -T
呼び出しに応じなかった場合のリトライ回数です。デフォルトは12回となっています。
- -a
送信時刻を設定できます。「10:00PM」といった形で時刻指定するか、「now」とすることですぐに送信します。aオプションを指定しないときの挙動はすぐに送信するようになっているので、あえて明示する必要はないですが、エラーで休止になっているジョブを再送する際に使います。
- -s
用紙のサイズを指定します。用紙設定のファイルである/var/spool/hylafax/etc/pagesizesにある名前(例:A4やA5等)か略称を指定します。
筆者の環境では用紙の設定をしても、送信時A4縦長以外の用紙サイズではうまく送信できませんでした。A4横長のデータをを送信したかったらAdboe Acrobat Reader DC等を使って、A4横データを縦に表示しWindows Print to PDF等で印刷して縦書きに変換したのちに送信する回避策をとっています。
また、何かわかったらここに記述したいと思います。
- -h
送信するモデムを指定したり、別のFAXサーバーを指定できます。
[modem@]host[:port]という書式です。「ttyS0@localhost」や「ttyACM0@127.0.0.1:4559」とします。
筆者の環境ではhylafaxは4559番で待ち受けるようでしたが、不明場合は/etc/service等で確認してください。
他にもman sendfaxで表示されるようにオプションはいろいろありますが、それらは-dオプションより前に指定する必要があります。
結果の確認
送信前のFAXの状態を確認するには「faxstat」に-sオプション、送信終了したFAXの結果を確認するには-dオプションをつけて実行します。受信確認は-rを付けます。
- JID
JOB IDです。このJOB IDを使って、再送指示や、中止指示を出します。
- Pri
優先度
- S
コール中はR(Ringing?)、終了するとD(Done?)が入ります。予約時はP(preserve?)です。モデムの認識ができていなくて送信できないときはW(Wait?)となっています。
- Owner
FAX送信したユーザーです
- Number
宛先番号です
- Pages
送信済みページ:全ページ
- Dials
現在回数:上限回数
- TTS
予約時に送信時刻が入ります
JID | Pri | S | Owner | Number | Pages | Dials | TTS | Status |
1 | 127 | D | root | 1234567890 | 1:1 | 1:12 |
中止と再送
中止する場合はfaxrm、再送する場合はfaxalterで送信時刻を変えます。faxalter -a now ジョブID です。
# faxalter -a now 7
他、faxalterのオプションには-dで番号変更、-mでモデム変更などがあります。
FAXのログ
FAXのログは/var/spool/hylafax/logにあります。
このディレクトリにはサマリーログを記録している「xferfaxlog」、と詳細な通信状態を記録しているcの後9桁の番号の入ったファイル(例:c123456789)があります。cから始まるファイルがどの通信のものかはxferfaxlogをみればわかるようになっています。あとこのディレクトリにある「seqf」はcから始まるファイルの連番を記憶しているファイルです。
また/var/spool/hylafax/docqディレクトリには直近で送信したfaxのデータが残っています。