open()
: Opening `/dev/ttyS*' normally blocks until the "carrier
detect" line goes active (unless open()
is called with the
O_NDELAY
flag; mgetty
and all dial-out programs do that), and
opening `/dev/cua*' will return an error message (errno=EBUSY
)
if another process has the device already open, thus preventing
dial-out on `/dev/cua*' if mgetty
is active on
`/dev/ttyS*'.
mgetty + sendfax - Table of ContentsSection51
We use `/dev/ttyS*' all the time for dial-in and for dial-out,
and believe me, it works, and it's the only combination that will
work properly. The kernel locking mechanism only works if you use modem
auto-answer (the getty process sleeps until the modem gets a carrier), and
mgetty uses manual answer (it waits for the RING message from the modem),
which will save your callers a lot of grief because their calls will
only be answered if your computer is ready to receive a call. Part of the
motivation for writing mgetty was being tired of losing lots of money
for useless calls to a hung machine.
ttyS* と cua* の相違
この件に関しては、JF で教えて頂きました。
To: JF@jf.gee.kyoto-u.ac.jp (Japanese Linux FAQ Mailing List)
Subject: [JF:4334] Re: about ttyS* & cua*
Date: Fri, 18 Apr 97 14:46:33 +0900
From: Shinya Hanataka
Posted: Fri, 18 Apr 1997 14:45:11 +0900
---------
ttyS? と cua? の話ですが、歴史的にはモデムがまだダイアラーを内蔵してい
なかった大昔に遡ります。ttyS? の方は通常の通信用ポートでモデムや端末に
接続しておりましたが、cua? の方はダイアラーというダイアル発信専用の装
置に接続していました。
モデムがダイアル機能を内蔵するが一般的になってきた時、互換性を保つため
に cua? はモデムと同じシリアル・デバイスに接続するようになりましたが、
ttyS? の方は通信用なのでオープンする時に回線が確立するまでは待つ、cua?
の方は発信用なのでいつでもオープンできるといような仕様になっています。
まこと良い方法のようなのですが、大きな問題がありまして、発信と受信を一
つの回線を使用しようとした場合にロック・ファイル名の違いなどにより、デ
バイスの取り合いが発生してしまいます。それで linux において最近は受信
にも発信にも ttyS? の方を使うのがあたり前になっています。発信の場合に
はソフトでオープンの時のみ non-blocking モードしてやることで cua? と同
じように使用することができます。
結論として発信専用の場合やデバッグ時を除いては ttyS? を使用するです。
----
ここで言っている「通信用」とは「発呼用」という言葉があたるかもしれません。(これもある方から教えて頂きました。
「ttyS? の方は通信用なのでオープンする時に回線が確立するまでは待つ、cua?
の方は発信用なのでいつでもオープンできるといような仕様になっています。」ttyS* と cua* はどう違うかというのは、このような動きの違いがあるということで、このあたりの違いはとてもおもしろいと思います。
mgetty は ttyS のこのような動きを利用しているのだろうけれど、
mgetty はどのように動くか(Section 8)で、ttyS* のロックファイルの操作は tricky だと書いてありました。
The lock file handling is tricky, but very important. It is essential
確かにtricky かもしれないなと思う。
mgetty が waiting になるとき、一旦作られた lock file は 取り除かれて、
その状態で waiting になっている。waiting になっている時は lock file が
ないので、最初、waiting の時は cua* は動くのかと思っていたのです。
Section8 の記述も興味を持って読みました。
The lock file handling is tricky, but very important. It is essential
that all programs that use the modem agree on one locking
protocol, otherwise one program might not know that the modem is in
use and will try to dial out anyway. A typical lock file is a file
called `/var/lock/LCK..ttyxx', containing the process ID (PID) of
the process currently using the modem. Other processes can read it and
tell if the lock file belongs to an existing process or if it is
"stale" and can be removed. This will obviously not work if the
processes look for lock files in different places, or if one of them
writes its PID in ASCII and another one tries to read it as a binary
number (while mgetty and sendfax do not care whether foreign lock files
are written in binary or ascii format, other programs do! mgetty can
sometimes detect this problem, and will then log a warning).
ttyS* の Permission
mgetty はちゃんと動き、FAX の受信も ppp 接続(発信)もちゃんとできるよう
になって、通常の使用にはさしつかえはない状態にはなったのですが、今、ちょっ
とぶつかっているのが、ttyS* のpermissions に関することです。この件に関
してはmgetty + sendfax - Table of Contents section51 に以下のような記述がありました。
Section51
If you get into trouble with write permissions on ttySx, you may add
a new group `dialout' to `/etc/group', then
chown .dialout /dev/ttySx
your device, and add your users to
the dialout group. Don't forget to add the system user `uucp' to
that group (UUCP needs to have modem access), and make sure,
port-group
in mgetty's configuration file is set up correctly.
The concept of such a dialout group is already used in most Linux
distributions today.
ttyS* の write permissions に問題があるなら、
`dialout' という group を作りなさいとのこと。
私はいま、slackware3.1 を使っているのですが、
確かに、/etc/group には dialout というグループはありません。
sention51 にこんな記述がありました。
The concept of such a dialout group is already used in most Linux
distributions today.
最近の Linux には dialout という group がおかれているそうです。mgetty で ttyS* を使った場合、ひとつのデバイスで着信発信の両方に使えるわけだから、ttyS* は「着信用デバイス」、cua* は「発信用デバイス」とだけ説明すると少々混乱します。
なぜ group 登録をするかということに関しては、mgetty 添付の FAQ に回答がありました。
Q: every time mgetty starts up, the permissions of my tty device get
changed and I have to issue "chmod +w /dev/ttySx" to be able to
dial out.
A: that's not a bug, that's a feature. You don't *want* to allow anybody
using your machine to be able to dial out (think of your phone costs!),
so it's a security issue.
If you *want* to allow dialout for everyone, #define FILE_MODE 0666
in policy.h. I would not recommend it, I would give access to a
special group, and put every one that may dial out into this group.
Q: mgetty が始動するといつも私の tty device のパーミッションが変更されます。そうすると私はダイアルアウトできるように "chmod +w /dev/ttySx" をしなければなりません。
A: それはバグではありません。それが仕様です。あなたはあなたのマシンを誰でもがダイアルアウト(あなたが払う電話代を考慮して!)できるように望んではいけません。それはセキュリティの問題です。
誰にでもダイアルアウトを許可したいなら、policy.h で #define FILE_MODE 0666 にします。そのようにするのをお勧めしたくありません。私は特定のグループにアクセス権を与え、そしてこのグループにダイアルアウトする許可を与えます。
ローカルユーザの誰でもが使えるようにするよりは特定のグループにのみ許可をしておけば、自分が使用する限りにおいては問題はないわけですから。実は、私もttyS1 に対して、数回 chmod +w /dev/ttySx このようにして permission を変更していました。ところがもとに戻ってしまうのです。なぜだろうと思っていたのですが、that's not a bug, that's a feature. ということだそうで、なるほど、納得。
mgetty:FAX の受信
ちょっと感激、 FAX の受信は大成功!mgetty を waiting の状態にさえしておけば、mgetty はかかってきた電話が、通常の声の電話か、 FAX か、パソコンへのログインかを見分けてくれます。
そこで FAX の受信実験を行いました。送ったものは、日本語で書かれたもの。
パソコンは自動的に FAX を受け取り、
/var/spool/fax/incoming に入ります。
chie:/var/spool/fax/incoming# ls
ff354cfa6S1-_075-464-3091-54_.01 ff355822cS1-_075-464-3091-54_.01
ff35580e4S1-_075-464-3091-54_.01 ff355832aS1-_075-464-3091-54_.01
ファイルの名前が長いのが少々難点ではありますが、ff というのはファインモード、ちなみに fn はノーマルモードということになります。
さて、受け取ったファイルはそのままでは見ることはできないので、
mgetty-0.99 のディレクトリの下tools のなかにある g3topbm を使います。このツールを使って、まずは xv で画面に表示する、あるいは受信ファイルを *.pbm というファイルに変換して、xv 等で見ることができます。
chie:/usr/local/src/mgetty-0.99/tools# ls
g3cat g3topbm pbmtog3
g3cat g3topbm pbmtog3 これらのツールがパスのあるディレクトリにないと面倒なので、これらを /usr/local/bin にコピーしました。
こうすれば、xv を起動して一発で受信ファイルを見ることができます。
chie:/var/spool/fax/incoming# g3topbm /var/spool/fax/incoming/ff355832aS1-_075-464-3091-54_.01 | xv -
あるいは一度 *.bpm に変換します。
chie:/usr/spool/fax/incoming# cat ff355832aS1-_075-464-3091-54_.01 | g3topbm >/tmp/fax2.pbm
chie:/usr/spool/fax/incoming# cd /tmp
fax2.pbm
というファイルにしておいて、それを xv で見ることもできます。
xv でfax2.pbm を表示させ、そのファイルを jgp でセーブしてみました。
日本語文のFAX サンプルです。
Linuxmemo(このファイル)の先頭に戻る
back to Home Page(English)
ホームページに戻る(日本語)