Linux Serial HOWTO 中譯版: 我要怎麼樣用數據機以 getty_ps 撥入及撥出?

Next Previous Contents

## 6. 我要怎麼樣用數據機以 `getty_ps` 撥入及撥出?

讓你的數據機能夠正確地撥號出去．如果你還沒有讀過 我怎麼用數據機撥號出去 一節的話現在去讀！ 它包含有非常重要的設定資訊．如果你只想用數據機來撥出的話你不需要讀此節．

## 6.1 撥入及撥出的數據機配置

要用來接受撥接以及撥號出去的話，那麼你必須確實地設定你的數據機（再一次對你的數據機使用 `AT` 指令群）：

> `

>     E1       本地回應指令
>     Q0       回報結果回應
>     V1       開啟冗長模式
>     S0=0     不要接聽 (uugetty 以 WAITFOR 選項來處理)

> `

如果你沒有正確地設定，放在你配置檔裡的起始(`INIT`)字串可能會失敗，因而停住整個程序． 但是，下面有更多配置檔的選項...

> `

>     &C1     DCD 只有在連線以後才開啟
>     &S0     DSR 永遠為開啟
>             DTR 開啟/關閉 重置數據機（是數據機製造商而定 - RTFM)

> `

這些會影響你數據機有關開始以及結束撥號的動作．

如果你的數據機不支援儲存設定，你可以透過在你配置檔裡的起始字串來設定這些東西． 參閱下面所述．有一些數據機是以 DIP 開關來影響暫存器的設定，也要確定這些設定是正確的．

我已經開始著手收集不同種類數據機的設定． 到目前為止，我還只有它們的一小部分，如果你想要寄送給我你目前所用配置，非常歡迎! 你可以從這些取得設些設定: `ftp://ftp.cc.gatech.edu/pub/people/gregh/modem-configs`．

注意: 為了讓我的 USR Courier V.34 數據機在 DTR 訊號掉下去後正常地重置，我必須設定 `&D2` 及 `S13=1`(這是設定暫存器 S13 的 bit 0)．這確定能在 USR Sportster V.34 上運作正常．

注意: 某些 Supra 數據機處理 DCD 訊號的方式異於其它的數據機． 如果你在用 Supra 數據機，試著設定為 `&C0` 而不是 `&C1`． 你也必須設定 `&D2` 使之正常地處理 DTR 訊號．

## 6.2 安裝 `getty_ps`

從 `ftp://sunsite.unc.edu/pub/Linux/system/serial` 最新的版本． 特別地，如果你想使用高速通訊(57600 或 115200 bps)，你必須取得 2.0.7j 或以後的版本． 你也必須有 libc 5.x 或之後的版本．

依照預設值，`getty_ps` 將會照 Linux 的檔案系統標準(FSSTND, File System Standard)來配置，這個意思是二進位碼將會放在 `/sbin` 下，而配置檔將會以 `/etc/conf.{uu}getty.ttyS`N 來命名． 這點並不能從文件敘述中找到！它也會假定 lock files 將得要放到 `/var/lock` 目錄裡．要確定你有 `/var/lock` 這個目錄．

如果你不想依照 FSSTND 的話，二進位碼將會放到 `/etc` 裡面，而配置檔將會放到 `/etc/default/{uu}getty.ttyS`N 裡面，而 lock files 則將會放到 `/usr/spool/uucp` 裡面． 如果你有使用 UUCP 的話那麼我建議這樣做，因為如果你把 lock files 搬到 UUCP 無法找到的地方去那麼它將會出問題的．

`getty_ps` 也可使用 `syslogd` 來記錄訊息．如果你目前沒有執行它的話，參閱 `syslogd(1)` 以及 `syslog.conf(5)` 的線上手冊來設定 `syslogd`． 訊息會優先以 LOG_AUTH 記錄，錯誤使用 LOG_ERR 記錄，而除錯使用 LOG_DEBUG． 如果你不想使用 syslogd 的話那麼你可以編輯在 `getty_ps` 原始檔案裡的 `tune.h` 用一個記錄檔來取代，預設檔名為 `/var/adm/getty.log`．

決定好是否要依照 FSSTND 以及使用 syslog．你也可以選擇兩者的組合． 編輯 `Makefile`，`tune.h` 以及 `config.h` 來反應你所作的決定． 然後，根據套件裡的說明編譯及安裝．

從現在起，所有談到 `getty` 的地方都是指 `getty_ps` 而言． 談到 `uugetty` 則是指 `getty_ps` 套件裡的 `uugetty` 而言． 這些指令在 `mgetty` 或 `agetty` 上將不能運作．

## 6.3 設定 `uugetty`

為了要能從你的數據機撥入及撥出，我們想要用 `uugetty`．uugetty 執行很重要的 lock file 檢查． 如果沒有的話更新 `/etc/gettydefs` 以便為數據機增加項目(注意到這裡的項目互相參考，它們並非固定速度 - 每個項目之間的空白行是必要的):

> `

>     # Modem entries
>     115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #57600

>     57600# B57600 CS8 # B57600 SANE -ISTRIP HUPCL #@S @L @B login: #38400

>     38400# B38400 CS8 # B38400 SANE -ISTRIP HUPCL #@S @L @B login: #19200

>     19200# B19200 CS8 # B19200 SANE -ISTRIP HUPCL #@S @L @B login: #9600

>     9600# B9600 CS8 # B9600 SANE -ISTRIP HUPCL #@S @L @B login: #2400

>     2400# B2400 CS8 # B2400 SANE -ISTRIP HUPCL #@S @L @B login: #115200

> `

如果你有 9600 bps 或更快且具資料壓縮功能的數據機，你可以鎖定你的串列埠速度而讓數據機去處理傳輸的其它速度． 然後，不像上面在 `/etc/gettydefs` 裡的一連串列表，只需為數據機加上一行，例如:

> `

>     # 115200 fixed speed
>     F115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #F115200

> `

如果你將你的數據機設成 RTS/CTS 執行硬體流量控制的話，那麼你可以將 `CRTSCTS` 加到這些項目裡：

> `

>     # 115200 fixed speed with hardware flow control
>     F115200# B115200 CS8 CRTSCTS # B115200 SANE -ISTRIP HUPCL CRTSCTS #@S @L @B login: #F115200

> `

如果你要的話，你可以讓 `uugetty` 在簽入時的標題上印出些有趣的東西． 在我的例子裡，我印出系統名稱，串列線路，以及目前的每秒位元傳輸率． 你可以加入其它的東西：

> `

>            @B    目前的每秒位元傳輸率(bps, 在看到 @B 時估計的)．
>            @D    現在日期, 格式 MM/DD/YY．
>            @L    getty 所連接的串列線路．
>            @S    系統名稱．
>            @T    現在時間，格式 HH:MM:SS (24 小時制)．
>            @U    目前簽入的使用者．這是在 /etc/utmp 檔中非空 ut_name 欄位項目的計數值．
>            @V    版本值，在預設檔中給定的．
>            如果要顯示 '@' 符號的話，用 '\@' 或 '@@'．

> `

接下來，確定你數據機所接的串列埠有輸出及輸入的設備． 如果你的數據機設在 `ttyS3` 的話你將會需要 `/dev/cua3`，以及 `/dev/ttyS3` 這兩個設備． 如果你沒有正確的設備，參閱 在 /dev 中建立設備 該節說明如何建立設備，並且建立這些設備． 如果你希望在你的 `uugetty` 正在監視這個串列埠是否有人簽入時還能夠用數據機撥出的話，用 `/dev/cua`N 設備而不要用 `/dev/ttyS`N．

當你正在編輯 `/etc/gettydefs` 時，你可以這樣來檢查它的語法是否正確:

> `

>     linux# getty -c /etc/gettydefs

> `

## 6.4 自訂 `uugetty`

你有許多參數可以用來改變你所擁有的每一個埠．這些是以分別對每一個埠使用不同配置檔的方式來實作的． 這個 `/etc/conf.uugetty` 檔案會被所有的 `uugetty` 行程所使用，而 `/etc/conf.uugetty.ttyS`N 只由那個埠使用． 預設的配置檔範例可以在 `getty_ps` 的原始檔案裡找到，這在絕大部分的 Linux 發行套件裡面都會有． 因為篇幅的考量，沒有把它們列在這裡． 要注意的是如果你用的是比較舊的 `getty` 版本(比 2.0.7e 版還舊)，或者是你沒有依照 FSSTND 的話，那麼預設的檔案將會是 `/etc/default/uugetty.ttyS`N． 我的 `/etc/conf.uugetty.ttyS3` 看起來像這樣:

> `

>     # sample uugetty configuration file for a Hayes compatible modem to allow
>     # incoming modem connections
>     #
>     # alternate lock file to check... if this lock file exists, then uugetty is
>     # restarted so that the modem is re-initialized
>     ALTLOCK=cua3
>     ALTLINE=cua3
>     # line to initialize
>     INITLINE=cua3
>     # timeout to disconnect if idle...
>     TIMEOUT=60
>     # modem initialization string...
>     # format: <expect> <send> ... (chat sequence)
>     INIT="" AT\r OK\r\n
>     WAITFOR=RING
>     CONNECT="" ATA\r CONNECT\s\A
>     # this line sets the time to delay before sending the login banner
>     DELAY=1
>     #DEBUG=010

> `

將下面那一行加到你的 `/etc/inittab` 裡去，那麼 `uugetty` 就會在你的串列埠上執行(用你環境的正確資訊來取代 - 配置檔的位置，串列埠名，速度，及預設終端機形式):

> `

>     S3:456:respawn:/sbin/uugetty -d /etc/default/uugetty.ttyS3 ttyS3 F115200 vt100

> `

重新啟動 `init`:

> `

>     linux# init q

> `

對於在你 `/etc/inittab` 裡面的速度參數，你會希望使用你數據機所能支援的最高每秒位元傳輸率．

現在 Linux 將會隨時監視你的串列埠是否有連線．從別的地方撥號並簽入你的 Linux 機器．

`uugetty` 還有更多的選項，參閱 getty (lm) 線上手冊獲得更完整的敘述． 別的不提它還有排程(scheduling)的功能，以及回撥的能力．

Next Previous Contents