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 訊號掉下去後正常地重置,我必須設定 &D2S13=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.ttySN 來命名. 這點並不能從文件敘述中找到!它也會假定 lock files 將得要放到 /var/lock 目錄裡.要確定你有 /var/lock 這個目錄.

如果你不想依照 FSSTND 的話,二進位碼將會放到 /etc 裡面,而配置檔將會放到 /etc/default/{uu}getty.ttySN 裡面,而 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.你也可以選擇兩者的組合. 編輯 Makefiletune.h 以及 config.h 來反應你所作的決定. 然後,根據套件裡的說明編譯及安裝.

從現在起,所有談到 getty 的地方都是指 getty_ps 而言. 談到 uugetty 則是指 getty_ps 套件裡的 uugetty 而言. 這些指令在 mgettyagetty 上將不能運作.

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/cuaN 設備而不要用 /dev/ttySN

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

linux# getty -c /etc/gettydefs

6.4 自訂 uugetty

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