Home Sweet Home LANLAN Project



1997年5月中旬某日(日)
と、いうわけで、DHCP はまたもやパスして、本日の課題は amd なんです。

紫野の環境だと、でんちゃんにつながっている CD-ROM(SCSI の外づけ)は Samba で「しの」と「はるか」に共有されてます。ローカル CD-ROM 装備の「はるか」はともかく、普段は FD も CD-ROM も何にもつけてない「しの」からは「でんちゃん」の CD-ROM をよく使います。

でも、CD-ROM ってのはリムーバブルだから、mount しっぱなしってのはあんまり使い勝手がよくありませんね。ディスクの入れ替えをするたびに telnet で、mount/umount するのはやはりちょっとばかし面倒です。そんなわけで、紫野にとっては、自動マウントできたら便利ぃっ!なんですね(ほほほっ)

用意するファイルはふたつです。
amd-upl102.tar.gz と Linux 用のパッチ amd-upl102.patch.gz です。

まず、amd-upl102.tar.gz の方を適当なディレクトリに展開し、親ディレクトリから patch を当てます。

    # zcat amd-upl102.patch.gz | patch -p0

さて、Linux 用の patch があたったら、インストール先を少し変更しておきましょう。config/Makefile.local.linux の ETC (インストール先)を変更します。(別に変更しなくてもよいけど、その場合のインストール先は、/usr/etc になります。)

    ETC = /usr/local/bin

んで、後はおなじみの作業の、make & make install です。無事、/usr/local/bin 以下(インストール先を変更しなかった場合は、/usr/etc 以下)に、

# ls
amd*  mk-amd-map*  fsinfo*  version.amd
amq*  wire-test*   hlfsd*

がインストールされたら完了です。マニュアルは、ソースの /doc 以下に texinfo形式で収められています。 ・・・けど、これがよぐわがんにゃいのでした(<お馬鹿)

人生、捨てる神あれば拾う神あり?(<をいをい)で、amd の基本的な設定について説明してくださっているページがあります。suck でもいつもいつも、お世話になってます(ぺこぺこ)

んなわけで、こちらを参考にした紫野の場合の mapfile はこんな感じ
(とりあえず、/cdrom が自動マウントされればいいのっ!という内容ね。)、

# cat /etc/amd.conf
cdrom type:=program;fs:=/.mnt/cdrom;\
    mount:="/bin/mount mount -rt iso9660 /dev/cdrom /.mnt/cdrom";\
    umount:="/bin/umount umount /dev/cdrom"

さらに、amd を /etc/rc.d/rc.local でこんな風に起動することにしました。

    #starting amd

    if [ -x /usr/local/bin/amd ]; then
    rm -f /var/run/amd.pid
    /usr/local/bin/amd -l syslog /amd /etc/amd.conf -p > /var/run/amd.pid
    fi

んで、さらにファイルをつくっておきましょう。

    # mkdir /amd /amd/cdrom
    # mkdir /.mnt /.mnt/cdrom
    # ln -s /amd/cdrom /cdrom

後、これは紫野がよくわかってないからかもしれないのだけど、我が家の環境では、nfs が modules になってないと、うまく自動マウントできませんでした。(もちろん kernel に組み込んじゃってもよかったのだろうけど。)

えっと、amd の自動マウント(<なんとなく、馬から落ちて落馬するみたいなフレーズだなぁ。)は、

    /amd/cdrom が見たいよ → んじゃ、/.mnt/cdrom をマウントしましょ → 自動マウントする → おっけ〜 → /.mnt/cdrom を /amd/cdrom にリンクしたよん。 →(^o^)

って感じになっているみたいです。

紫野は、/cdrom にいつも CD-ROM をマウントしていて、これを samba で共有してますから、/amd/cdrom は /cdrom にリンクしました。さて、amd を立ち上げて、/cdrom にアクセスしてみます。 (ちなみに、この CD は電子ブック)

    # ls /cdrom
    catalog dgx01/ language vto

おっけ〜ですね。では、「しの」から「でんちゃん」の /cdrom を開いてみましょう。マイ・コンピューターからのぞきます。よしっ、ちゃんと見えますね。ということで、これで完了です(^_^)。

本日のおまけ:
プロバイダーの変更も終わり、テレホーダイの番号変更も終了したので、Nifty4U の接続を kermit から telnet に変更しました。

夜も更けてきたので、これでおしまい。またね。



1997年5月中旬某日(土)
FAX はやんない」なんて言っていましたが、Mgetty+Sendfax Archive/Documentation Centre をつらつらと眺めていたら(それでも未練がましく Documents を漁っているところが紫野である)、「FAXの受信はともかく送信は出来るようにしておいてもよいなぁ。」という気になってきました。

さらに Documents を読み進むうちに、mgetty に -R オプションを指定すると、「1回目の Call はとらずに、オプションで指定した秒数以内に再度 Call があった時のみ着信する」ということが分かりました。

そうねぇ、究極的にはダイヤルイン契約にするにしても、とりあえず家族が使う分にはこの方法でもかまわないような気がします。man page にははっきり「お奨めしない」と書いてありますねぇ。それでもこのオプションが存在するということは、世の中おなじようなことで悩んでいる方が多いということんなんですね。
うん、でも、試しにやってみようかな(笑)

ちなみに、Mgetty というのは man page によると、

    Mgetty is a ``smart'' getty replacement, designed to be used with hayes compatible data and data/fax modems. Mgetty knows about modem initialization, manual modem answering (so your modem doesn't answer if the machine isn't ready), UUCP locking (so you can use the same device for dial-in and dial-out). Mgetty provides very extensive logging facilities.

なんだそうです(<手抜き)。
ものすごく乱暴にいうと、かかってきた電話が data(つまりコンピューターのアクセス)なのか、fax なのかを区別してくれて、おんなじシリアルポートを使って電話をかけるのも受けるのも出来るという、とぉっても賢い getty 、ってことかな。
あっ、もちろん、モデムが fax modem でないと fax 機能は使えないです。modem はおなじみのヘイズ互換に対応している、と(今時、そうでないモデムって見ないけどな。互換性の高い/低いはあるにしても、だ。MWAVE のばかやろ〜。)

ふふぅん、そうか。普通、モデムを着信するように初期化しちゃうと、繋がってるマシンが立ち上っていなくてもモデムが勝手に電話を取ってしまうけど、 mgetty は、mgetty 自身がモデムをコントロールするから、モデム自体を着信用に設定しておく必要がない(というより、それだとうまく機能しない)。だから、マシンが立ち上ってないときは、モデムは着信しないってわけですね。
しかぁし、企業だとそういうこともあるんだろうけど、普通の家庭(に fax modem があるのかっ>紫野)だと、マシンが立ち上ってないときはモデムの電源も切れているやうな気がしません?

んで、もうひとつの機能のほうが、sendfax。読んで字のごとく、fax を送信する方の機能、というわけ。
これは、つまり、mgetty を立ち上げておかなくたって、fax の送信は出来る(<あたりまえか・笑)ってことだよね(^_-)

よおっし、やってみようぢゃありませんか。(<燃える設定をたく (^=^;;))


前準備1・通信関係の整理整頓

導入の前に、通信関係の整理整頓をしておきましょう。
何がやりたいか? どのポートに何をさせたいのか? の整理整頓です。

  • でんちゃんにはふたつの COM Port があり、それぞれ、

    • COM1(ttyS0)には microcom (fax modem)経由で TA のアナログポート、
    • COM2(ttyS1)には TA のデータポート

    がつながれています。

  • diald を使用したプロバイダーへのダイアルアップ(ppp)は ttyS1 で行います。

  • Nifty4U+ を使用した Nifty-Serve へのアクセスは telnet 経由で ttyS1 で行います。 その他の BBS へも telnet が使用できるところは原則的に telnet (ttyS1)で行います。

  • UUCP は行いません。(今のところ)

  • Kermit による手動の接続は ttyS0 のアナログモデム経由で行います。が、今のところ需要はありません。

  • アナログモデム(ttyS0)から fax を送信します。

  • 外部からの着信(data)は原則的に ttyS0 のアナログモデム経由で行います。(ISDN Card 持ってないんです。)

  • 外部からの着信(fax)は ttyS0 のアナログモデムで行います。


これを シリアルポート側から見ると、

  • ttyS0(アナログモデム) : data/fax の dial-in、kermit/faxの dial-out。

  • ttyS1(TA データポート): diald 経由の dial-out。dial-in は今のところなし。

ということになります。つまり、mgetty を設定するのは ttyS0 だけ(しつこいけど、今のところ)ですね。

前準備2・ device/permission の整理整頓

さて、mgetty を設定して、dial-in/dial-out を同じ device で行う場合の注意として、 マニュアルには

    Important note: Use the `/dev/ttyS*' devices for getty and for dial-out (that is, for kermit, uucico, cu, seyon, ...) - never use `/dev/cua*'. Dialing out on `/dev/cua*' will result in the error message "device busy". (There are reasons why mgetty cannot use the "`ttyS*' vs. `cua*' kernel locking mechanism", see below). If all programs agree on using `/dev/cua*' only, it will work, too - but they have to agree on one variant.

という説明があります。(/dev/cua* を使うな。/dev/ttyS* を使いなさいっ!)(理由もこの記述の下にあります。)

紫野は、kermit を使うときに cua1 を指定していたので、それぞれのユーザーの .kermrc ファイル上の /dev/cua1 を /dev/ttyS1 に修正します。

しかし、このままだと、root はともかく、普段使っているアカウントからは /dev/ttyS0 を permission の関係で使えません。紫野の場合、/dev/ttyS0 は、root.tty の所有になっているので、 /etc/group を開いていつものアカウントをtty group に追加しておきました。

前準備3・ pppd のオプションの整理整頓

さて、紫野の /etc/ppp/option は発呼側専用の設定になっています(^=^;) このままでは着信するときに困りますよね (^=^;)

pppd のマニュアルによると

/etc/ppp/options
System default options for pppd, read before user
default options or command-line options.

~/.ppprc
User default options, read before command-line
options.

/etc/ppp/options.ttyname
System default options for the serial port being
used, read after command-line options.

だそうなので、オプションを読み込む順番は、

  1. /etc/ppp/options
  2. ~/.ppprc
  3. command-line options
  4. /etc/ppp/options.ttyname

なのかな?。
やっぱり、/etc/ppp/options に user なんてあるのはよくなさそうです(苦笑)。なわけで、/etc/ppp/options は /etc/ppp/options.ttyS1 (TA のデータポート)にコピーし、/etc/ppp/options はカラファイルにしました。

/etc/ppp/options.ttyS0 は、発呼/着信の両方を使う可能性があるので(ま、もっぱら着信だけども)コマンドラインオプションで指定することにしたので作成しません。

更に、Linux, mgetty & AutoPPP. を読んでいたら

pap-secrets はrename/remove するほうがいい(理由は分からないけど、気分的には外から見られたら嬉しくないファイルではある by 紫野)

とあったので、diald で使用している ダイヤル用スクリプトの始めのほうで、どっかから(内緒・笑) pap-secrets をコピーして、ip-down で接続完了後 /etc/ppp/pap-secrets を削除するようにします。これで、プロバイダーにつなげている間以外は、/etc/ppp/pap-secrets は存在しないようになったはずです。(pap で接続してるんだから、ip-up で削除してもいいやうな気はする・・・。)

変更が完了したら、ちゃんと diald を使って ppp 接続ができるか確認しましょう。

本日はここまで。おつかれさま。



1997年5月中旬某日(日)
さて、mgetty+sendfax を入手しましょう。
紫野が頂いたのは、mgetty1.1.6-May05.tar.gz でした。

さて、mgetty + sendfax をつくりましょうっ!

ソースを展開して、cp policy.h-dist policy.h をしたら、policy.h を編集します。

その1・policy.h の編集

policy.h にはコメントがついているのでゆっくり見ていけば大丈夫ですが、紫野が変更した部分は以下のとおりです

  • #define DEVICE_GROUP "tty"

    紫野は /dev/ttyS0 を使うアカウントを tty group に登録していますので、ここは tty にします。

  • #define LOG_PATH "/var/log/mgetty/log_mg.%s"

    mgetty の作成するログファイルの場所です。/var/log/mgetty を作成しておきます。

  • #define ADMIN "root"

    エラーが起こったときやコンソールにエラー情報が書き込めないときなどに連絡する宛先です。

  • #define NOLOGIN_FILE "/etc/nologin.%s"

    /etc/nologin.ttyS0 などというファイルが存在するときには、mgetty は着信処理しません。

  • #define MGETTY_PID_FILE "/var/run/mg-pid.%s"

    mgetty 起動時の pid file の作成場所です。

  • # ifdef linux
    # define LOCK "/var/lock/LCK..%s"

    lock file の場所です。pppd/kermit/seyon などの lock file と同じところを指定します。間違うとこまった事態になります(^=^;)

  • #define LOCKS_BINARY 1

    lock file がバイナリかアスキーか? kermit がバイナリの lock file を作成するようならここを 1 にします。

  • #define MODEM_INIT_STRING "ATS0=0Q0&D3&C1"

    mgetty 起動時のモデムの初期化コマンドです。重要なのは、S0=0 (通常、着信しない設定)。S0=1 にしてはいけません。着信するかどうかは mgetty が決定します。たぶん、デフォルトで大丈夫でしょうけど、モデムのマニュアルで確かめてね。

  • #define FAX_IN_GROUP "tty"

    受信した FAX 画像ファイルのグループ。紫野の場合は、前述の理由で、tty です。

  • #define FAX_RECV_SWITCHBD 19200

    ROCLWELL のチップを使っている場合はFAX受信時の速度を落とさないと不具合があるそうです。
    紫野の場合、これを指定しないで FAX を受信したらうまく受信しなかったので。

  • #define FAX_LOG "/var/log/mgetty/fax/Faxlog"

    受信した FAX のログファイルです。/var/log/mgetty/fax を作成しておきます。

  • #define FAX_STATION_ID "81 48 xxxxxxx"

    電話番号です。「81」は日本の国コード(たぶん・笑) 国コードつきのときは市外局番を示す「0」は要りません。

  • #define FAX_SEND_BAUD 19200

    多少遅くても安全サイドとっとこう(苦笑)

  • #define FAX_DIAL_PREFIX "ATDT"

    プッシュホン(トーン)なら ATDT、ダイヤル(パルス)なら ATDP です。

  • #define FAX_MODEM_TTYS "ttyS0"

    紫野の場合は、mgetty を使うのは /dev/ttyS0 なので。

  • #define MAIL_TO "faxadmin"

    FAX を受信したことを連絡する宛先。
    adduser で faxadmin を作成しておきました。受信した旨の連絡を受けるだけなら、/etc/aliases に登録しておいてもいいですよね。
    紫野の場合は、後で mail2fax gateway を導入したりする前提で、faxadmin にはprocmail を仕込んでおくつもりなので正式なアカウントとして登録しました。
    faxadmin ホームディレクトリは samaba で共有しているところに設定し、受信した FAX と 送信用 FAX もこのディレクトリ以下に保存されるようにします。

  • #define FAX_NOTIFY_PROGRAM "/usr/local/lib/mgetty+sendfax/new_fax"

    FAX を受信したあと、受信した画像ファイルに自動処理を行うためのプログラムです。紫野はここで、g3 ファイル形式から GIF に変換するように指定しています。

その2・Makefile の編集

次に Makefile を編集します。

  • CFLAGS=-O2 -Wall -pipe -DAUTO_PPP

    -DAUTO_PPP は、Win95 からのダイアルアップ接続で、ログインプロンプトを無視して pap 認証を始めさせるときには必要です。

  • spool=/home/data

    受信 FAX や送信用 FAX 原稿ファイルを保存する場所。紫野は、samba client からスプールをのぞく気だったので、samba で共有しているディレクトリを指定しました。

  • PERL=/usr/local/bin/perl

    perl のある場所。faxrunq (スプールに入っている 送信用 FAX 原稿を送信するためのスクリプト)などで perl を使用します。

  • ECHO="echo -e" シェルが bash の場合は、"echo -e"にしましょう。

その3・make & make install

お疲れさまでした。 make ; make install します。無事、完了しましたか? ちょっと長かったですよね(って、うちだけ?)
ここで設定した内容を変えるためには、mgetty.configsendfax.config、あるいはコマンドラインを使用します。

さて、今日は頭を使って疲れたので、これでおしまい。



1997年5月中旬某日(月)
なかなか実際のテストまでたどりつかない でんちゃんの FAX Server 化(とほほ〜)
ようやく起動するところまでたどりつきました。

その1・まず受信側を設定しましょう(mgetty)

  1. mgetty を起動します。

    /etc/inittab の /dev/ttyS0 の行のコメントを外し、下記のように変更します。

    • s1:2345:respawn:/usr/local/sbin/mgetty ttyS0 -R 45 -n 1

    -R xx オプションは一度目フ Call は無視して xx 秒以内に2度目の Call があったときのみ着信させるためのオプションです。-n x の方は、何回の ring で着信するか?のオプション。我が家の留守電との兼ね合いで、 -n 1 を設定することにしました。
    その他、オプションは man page をどうぞ。

    次に、

    • # init q

    を実行すると、mgetty が起動します。" ps ax | grep mgetty" などで起動していることを確かめてみます。
    ちゃんと起動しますと、モデムの TR ランプが点灯しているはずです。

  2. Win95からの接続テスト

    さて準備は完了しました。手近なターミナルソフトから「でんちゃん」に電話をかけてみましょうっ!

    紫野の場合は、もうひとつのTAにぶら下がっている電話のコネクタをひっこぬいて「しの」に接続して秀タームから電話をかけてみました。一度目はダイヤル音がなったところで切ります。さて、2度目。モデムがコネクトした後、ログインプロンプトが出たら成功です。/etc/passwd に記載してある適当なアカウントでログインしてみましょう。

    むふふ、成功っ!

  3. Win95 からのダイアルアップ接続

    Win95 のダイアルアップネットワークから『新しい接続』を選び、電話番号と接続の方法を指定します。さらに「設定」のボタンから「オプション設定」を選択し「呼び出してからターミナルウィンドウを表示」をチェックしておきます。

    この状態で、ダイアルアップネットワークを起動してみましょう(もちろん、2回ダイヤルします)。おなじみのピーガガガーの後にターミナルウィンドウが開いてログインプロンプトがでたら成功です。よしよし。

  4. login.config ファイルを編集します。

    さて、ターミナルウィンドウでログイン作業するのが面倒な場合(笑)は、login.config で AutoPPP の設定を追加します。
    通常は(Makefile を編集してなければ)、/usr/local/etc/mgetty+sendfax/login.config となっているはずです。

    # ls /usr/local/etc/mgetty+sendfax/
    dialin.config  faxheader  login.config  sendfax.config
    fax.allow  faxrunq.config  mgetty.config

    loging.config の下記の部分をコメントアウトしておきます。

    • /AutoPPP/ - guest /usr/sbin/pppd auth -chap +pap login crtscts modem debug 192.168.x.yyy:192.168.x.yyz

    mgetty をもう一度起動しなおしてから、今度は、「呼び出してからターミナルウィンドウを表示」のチェックをはずしてテストしてみます。Win95 はログインプロンプトを無視して、PAP 認証をはじめ、mgetty はそれに応えます。『ユーザー名とパスワードを確認中』から『ネットワークに接続中』となり、接続が完了しましたか?この状態で「でんちゃん」で who してみるとこんな感じです。

    # who
    root    tty1  Jun 7 08:23
    pppuser  ttyS0 Jun 8 18:29 (38400)
    root    ttyp1  Jun 8 18:15 (haruka.ouchi.or.jp)

    ttyS0 が「しの」からのダイアルアップ接続で、ttyp1 が「はるか」からの telnet 接続です。

  5. 次は FAX 受信ですね

    さて、mgetty は FAXを受信した場合、g3 形式でスプールディレクトリに保存します。これはこれでいいんですが、紫野の場合は、samba 経由で Win95 やら OS/2 からFAX 画像をみたいわけです。さすがにさすがの PM View (OS/2 上で動くほとんど無敵の画像ローダー)でも g3 形式を直接見ることはできません(苦笑)

    mgetty+sendfax パッケージには、g32pbm と pbm2g3 というユーティリティが付属しています。これは、それぞれ g3 形式から pbm 形式、pbm から g3 へと変換してくれるツールです。pbm なら PM View からも見ることができるけれど、さて、Win 95 で pbm 形式が見られるツールを紫野は持っていません。

    ん〜、紫野は GV のお世話になってますので、pbm から gif (読める形式ならなんでもいいですけどね)に落とせばいいんですよね。

    というわけで(<話が飛ぶ)、pbmplus パッケージを入手しましょう。tgz ファイルを適当なディレクトリに展開したら、Makefile をちょっと修正します。

    • CC = gcc
    • CFLAGS =-O2
    • INSTALLBINARIES = /usr/local/bin/pbmplus
    • INSTALLMANUALS1 = /usr/man/man1
      SUFFIXMANUALS1 = n
      INSTALLMANUALS3 = /usr/man/man3
      SUFFIXMANUALS3 = n
      INSTALLMANUALS5 = /usr/man/man5
      SUFFIXMANUALS5 = n
    • SUBDIRS = pbm pgm ppm

    インストール用のディレクトリ /usr/local/bin/pbmplus を作成して、make & make install でおしまいです。

      # mkdir /usr/local/bin/pbmplus
      # make
      # make install

    このパッケージのなかの ppmtogif が紫野の使いたかったものなんですね(笑)

    後日、pbmplusパッケージは、netpbmパッケージに入れ替えました。pnmscale をつかってファイルのサイズを調整しています。 インストールに関しては、『汎用 graphics converter: netpbm パッケージのインストール』 を参考にさせていただきました。

    mgetty+sendfax のソースディレクトリの、samples のなかには new_fax コマンドとして使えるようにいくつかの sample が用意されています。今回、紫野が使うことにしたのは、samples/new_fax.pbm です。
    これを /usr/local/lib/mgetty+sendfax/new_fax としてコピーし、修正します。ppmtogif は処理にけっこうな時間がかかってしまいますが、処理が間に合わないほど FAX を受信するわけでもない(よな、たぶん)ので、これでよしとしました。

    さぁ、準備完了です。今度は「しの」の Easy FAX から適当なファイルを作成して「でんちゃん」に電話します。モデムがコネクトして送信終了したのを確認したら、スプールディレクトリに gif ファイルができているかを確認します。

    ・・・OKですね(^_^)

    FAX 受信したよんっ!というメールがちゃんと来ているかどうかもチェックしてみます。

    無事 FAX の受信ができるようになったので、本日はここでおしまい。おやすみなさい(^o^)

    受信メールについては、後日、受信FAXをgifファイルに変換して、さらに mime でエンコードしてメールする ように変更しました。また、印刷用に g32ps を使うようになりました。



1997年6月初旬某日(土)
さて、紫野が 『FAX Server を立ち上げようっ!』と思ったのは、ぢつは、FAX の送信が行いたいためでした。だって、FAX を受信する機能(や、閲覧性・笑)を云々するのなら、OCR で FAX を電子化するならともかく、PCはまだまだ専用機にはかないませんものね。

ひるがえって、送信機能がPCから使えるというのは大きいのです。紫野はあんまり手書きが好きじゃないこともあって、家庭で作成するちょっとしたメモだってなぜか、PC上で作ったりしてますから(<字がきたないので見たくないんだよねぇ。)、これをこのまま FAX できるってのはおいしいです。それに、プリンタで印刷した紙を FAX するよりずっと奇麗に FAX できますし(それでも、手書きのほうを喜ぶ方々もおりますけれども。でもね、紫野は紫野の汚い手書きの文字を見てるとどうにも情けなくなるからヤなのっ!)

それなのに、なぜ mgetty+sendfax で受信機能を先に設定したか?というと、やっぱりコレです。『日本語問題』・・・(つくづく、祟りますよね。OS/2 でも祟られどうしだけれども、Linux でもそうなのよね・・・sigh)

ま、嘆いていたところで何かが変わるわけじゃありませんから、なんとかするっきゃないんですけどね(ぐちぐち)

んなわけで、sendfax 送信側の設定っ!です。

まず、整理整頓です。

  1. FAX 送信は日本語を使う。
  2. mgetty+sendfax パッケージでは、送信する FAX 原稿は g3 形式でなければならない。
  3. 日本語の FAX を送信するには、保存される g3 形式ファイルが日本語フォントを使って作られればよい。
  4. 2. の作業は、faxspool スクリプトが行い、faxrunq スクリプトが実際の送信処理を行っている。
  5. faxspool スクリプトで日本語フォントを使った g3 形式ファイルを作るようにすればいいんである。

結論っ!、faxspool スクリプトを日本語対応にしようっ!
言うは安し行うわ・・・なんだけどね(泣)
このへんの FAX スプーリングに関しては、マニュアルをどうぞ(^_^)

まず、faxspool スクリプトでファイルを g3 形式に変換している部分を探します。ここだけ直せばいいんだよね。

んで、g3 ファイルを作るための変換手順は、

  • ただのテキストファイル

    ascii → nkf -e → psconv(日本語テキストの PostScript File 化)→ 日本語 GS(dfaxlow/dfaxhigh) → g3

  • Post Script File

    (Windows or OS/2 の Printer Driver) → 日本語 PostScript File → 日本語 GS → g3

とします。とりあえず、このふたつが変換できればよしとしましょう(Windows や OS/2 から作業する限りはこれで充分ですね。TeX で論文でも書かないかぎりわ・・・。PS ファイルにすれば画像だって OK よっ、てか。)

  1. 日本語 Ghostscirpt 導入

    つまり、ほぼ全面的に日本語 GhostScript におんぶにだっこ状態ということなので、まだ導入していない場合は、(自分で作ってもよいけど) JE の Ghostscript パッケージを導入します。んでもって、GS 経由で Post Script が通常にプリントできる状態まで持って行きます。(このあたりは、JF の「JPprinting-mini-HOWTO」にお世話になりました。)
    vflib を経由して True Type フォントが使えるようにしておくとよいかもしれません。(導入したそのままよりはフォントがきれいになります。ちなみに、紫野は自前で購入してあった Windos 用のフォントを使用しました。MSのフォントってなんかライセンスにうるさそうだったのだもん。)

    後日、GhostScript は 5.03 に変更しました。日本語化パッチが公開されています。さんくすっ!

  2. Postscript → g3 用のドライバを入手する。

    紫野が導入した JE は ヴァージョン 0.9.8a だったので、残念なことに dfaxlow/dfaxhigh ドライバが入っていませんでした(;_;)。(サポートされているドライバはgs -h で表示されます。)
    なので、0.9.7 のヴァージョンから jgsdrv.tgz だけ頂いてきて、このなかの dfaxlow.dlm と dfaxhigh.dlm を /usr/local/lib/ghostscript/drivers/ にコピーします(GS のヴァージョンは一緒なのでこれで動きます・笑)。ドライバがないと変換できんもんな〜。

    GSをヴァージョンアップ後は、ドライバは標準でついてくる faxg3 ドライバを使用しています。faxspool の最初のほうで指定しているのでコメントをつけかえましょう。
  3. コマンドの位置を確かめておく

    受信側で作っておいた pbmplus パッケージのなかには pbmtext というコマンドが含まれていますので、これの位置を確かめておきましょう。このコマンドは faxspool スクリプトから呼び出されます。他に、psconv が入っているかどうかも確かめておきましょう。dvi ファイルを FAX するのなら、jdvi2kps が入っているかどうかも確かめときましょう。

  4. fax.allow or fax.deny を編集します。

    /usr/local/etc/mgetty+sendfax/fax.allow or fax.deny を編集します。ご察しでしょうが、fax.allow には fax を送信できるユーザー、fax.deny には FAX 送信を禁止するユーザーを書いておきます。

  5. スプールディレクトリの Permission を確認します。

    送信用 FAX 原稿をスプールするディレクトリ(と、その親)の Permission を確認しておきましょう。

  6. faxspool スクリプトを修正します。

    やっと、本題。/usr/local/bin/faxspool を修正します。

    紫野の場合は、こんな感じで修正しました。pbmtext の位置も実際の位置に書き換えるか path 切ってあるところにリンクしておきましょう。(ちなみに、pbmtext で送信 FAX の上の端っこに追加される1行データを作成するんですね。この Header の内容は、usr/local/etc/mgetty+sendfax/faxheader で調整できますが pbmtext の日本語対応はしてないので、使えるのは半角英数字だけです。)
    とりあえず 書き方がじぇんじぇん分からないのでCover Page は使用しないことにしました。

    # needs GNU GhostScript installed.
    # For driver selection, see definition of GS_DRIVER_{HI,LO} above.
    #
    fs_cvt_ps() {
    driver="$GS_DRIVER_HI"
    test X$3 = X-n && driver="$GS_DRIVER_LO"

    cat $1 |
    gs $driver -sOutputFile=$2%02d -sPaperSize=a4 -dNOPAUSE -q -dSAFER -
    }

    #
    # convert ASCII text files
    # go via GhostScript and gslp.ps
    # (could also used hp2hig3 or nenscript -> gs or pbmtext)
    #
    fs_cvt_ascii()
    {
    #####
    # via Ghostscript:

    driver="$GS_DRIVER_HI"
    test X$3 = X-n && driver="$GS_DRIVER_LO"

    nkf -e $1 | psconv -j | gs $driver -q -sPaperSize=a4 -sOutputFile=$2%02d -dNOPAUSE -

  7. 送信テスト

    さて、適当な送信用の原稿を用意して、

      faxspool (電話番号) (送信ファイル名)

    という感じでテストしてみましょう。うまくいけば、「スプールしたよ」メッセージが表示されるはずです。スプールされた f1.g3 等の g3 ファイルを 表示してみて、ちゃんと日本語が表示されるか確かめてみます。

      cat f1.g3 | g32pbm | xv -

  8. faxrunq スクリプトを cron に追加する。

    このままだと、スプールされた FAX 原稿はいつまでも送信されませんので、送信するための faxrunq スクリプトを適当な間隔で起動するように cron に追加します。

    faxrunq を起動して実際に FAX が送信されるかどうか確認し、送信された FAX がちゃんと読めるかどうかを確かめてみましょう。

さて、でんちゃん上で無事 FAX が送れるようになったところで、本日はおしまい。クライアントの設定はまた後日。お疲れさま。



メールください 前のページ ホームページへ戻る 次のページ


----------

・ そして、雑談の日々・・・

・ 詳しい検索方法はこちら!

ホームページのなかのフリーワード検索ができます。

Keywords:


・ Please Back to  

----------