getty_ps
撥入及撥出?讓你的數據機能夠正確地撥號出去.如果你還沒有讀過 我怎麼用數據機撥號出去 一節的話現在去讀! 它包含有非常重要的設定資訊.如果你只想用數據機來撥出的話你不需要讀此節.
要用來接受撥接以及撥號出去的話,那麼你必須確實地設定你的數據機(再一次對你的數據機使用 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 訊號.
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
上將不能運作.
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
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)的功能,以及回撥的能力.