繁體中文 Solaris 系統管理員指南

第 4章 TTY 環境和支援

本章假設您熟悉:

如需 STREAMS 和 TTY 驅動程式的背景資訊,請參閱 termio(7I)線上援助頁。

TTY 串流

使用者的 shell 與終端機之間的資料路徑稱之為串流。 串流上的資料含有影響資料處理的字元和控制資訊,像是字碼集或通訊協定中的變更優先的控制序列。 從終端機進入串流的資料都是未經過處理的。為了讓 shell 或應用程式正確使用資料,資料都必須經過 STREAMS 模組來循序處理。

STREAMS 提供了一個方法,來模組化文字行上的處理,讓處理指令按功能模組進行分組。您可以從該文字行中新增或移除這些模組,以便根據使用者的需要,來提供不同的環境給終端機。

傳統的 STREAMS

傳統的 STREAMS TTY 環境含有原始裝置驅動程式、文字行控制模組,以及串流表頭。原始裝置驅動程式會在核心與硬體之間提供 I/O 介面。 因為它最接近實體硬體,所以它提供基本的通訊協定、鮑率切換,以及其它低層次的服務。文字行控制模組是一組指令或控制,可將未經處理的資料轉換為經過處理的資料。 這包括處理刪除字元、刪除行字元及其它。串流表頭會在使用者的處理與串流之間提供一個介面。

繁體中文版 Solaris STREAMS

繁體中文版 Solaris 作業環境會使用 STREAMS 的模組本質,來支援繁體中文。除了傳統的 TTY 模組,此產品會以 STREAMS 執行字碼轉換。基本上,許多現有的繁體中文 TTY 都支援中文輸入,但在「繁體中文版 Solaris TTY」環境中卻無法使用。

繁體中文版 Solaris 作業環境會加強傳統的模組。它的文字行控制會處理寬字元的適度游標移動及一般的協定。 繁體中文版 Solaris 軟體字碼轉換模組會在兩個不同的字元字碼格式之間(像是 Big5 與 EUC 之間)進行轉換。

字碼轉換是根據設定的適當旗標或參數而定。例如,如果正在使用 Big5 碼終端機的話,從該終端機的輸入會轉換為 EUC,而且到終端機的輸出會轉換為 Big5 碼。

可推入串流中的主要模組是 ldtermbig5euc

TTY 公用程式

ioctl(輸入/輸出控制)呼叫是低層次的常式,用來處理裝置輸入和輸出。

應用程式會使用 termcapterminfo 資料庫來適當地配置它們的終端機顯示。

EUC ioctl 功能

繁體中文版 Solaris 作業環境會使用 ioctl(2) STREAMS 指令來處理一般的 EUC。下面是這些 ioctl 呼叫及其效果的總結:

表 4–1 ioctl 要求和說明

ioctl 要求

說明 

EUC_WGET

從 TTY 串流取得 cswidth

EUC_WSET

設定 TTY 串流的 cswidth

EUC_OXLOFF

將字碼轉換設定為 OFF 

EUC_OXLON

將字碼轉換設定為 ON 

進出終端機轉換字碼的字元是由 EUC_OXLONEUC_OXLOFF 控制的。

termcap

termcapterminfo 資料庫可用來修改應用程式的終端機特性。下列是 termcap 資料庫的延伸:

表 4–2 termcap 變數和說明

變數 

說明 

dv

裝置類型:語言和字碼集 

ci

多個字碼集的起始順序 

s0

移位到字碼集 0  

s1

移位到字碼集 1  

s2

移位到字碼集 2  

s3

移位到字碼集 3  

terminfo

下列是 terminfo 的延伸。s0-s3 字串值是作為終端機 I/O 期間個別字碼集的資料公布機制。

表 4–3 terminfo 變數和說明

變數 

大寫名稱 

Tc 

說明 

device_type

devt

dv

裝置類型:語言和字碼集 

code_set_init

csin

ci

多個字碼集的起始順序 

set0_des_set

s0ds

s0

移位到字碼集 0  

set1_des_set

s1ds

s1

移位到字碼集 1  

set2_des_set

s2ds

s2

移位到字碼集 2  

set3_des_set

s3ds

s3

移位到字碼集 3  

TTY 指令

用來配置和使用 TTY 環境的兩個指令是 setterm/bin/sttysetterm 主要是用來將所需的模組推入串流, 來建立特定終端機類型的 TTY 串流。 stty 會變更模組在串流中的行為。

setterm 指令

setterm 是用來配置 TTY STREAMS 環境。它可以查詢並處理特定 TTY 通訊埠的 STREAMS 模組。 setterm 可讓使用者使用系統或使用者提供的 STREAMS 模組來修改它們的 TTY STREAMS 環境。

setterm 會使用反映 terminfo 資料庫中之 devt(裝置類型)欄位的終端機裝置名稱,來配置 TTY 通訊埠的 STREAMS 模組。 此裝置名稱符合 setterm 配置檔 /usr/share/lib/setterm/zh_TW/conf.file 中同名的登錄。 此登錄包含有關要彈出及推入哪一個模組來適當配置 STREAMS 環境的詳細指示。

setterm 也可將裝置類型視為一個方向引數。此裝置類型同樣地也符合 /usr/share/lib/setterm/zh_TW/conf.file 中的登錄。

setterm 配置檔會使用特殊的語言,來取得要採取何種動作的相關指示。此語言可讓使用者決定模組在 STREAMS 堆疊上的名稱、在堆疊上推入或彈出模組,以及執行其它作業。 setterm 會建立 ioctl 呼叫來處理 STREAMS 堆疊。

繁體中文版 Solaris 作業環境提供特殊目的模組,來啟用/停用字碼轉換,並適當地處理多位元組和寬字元。 將模組推入堆疊可啟用對應的轉換。轉換的預設狀態是已經啟用。

如需詳細資訊,請參閱 setterm(1) 線上援助頁。

/bin/stty 指令

/bin/stty 指令中的 -defeucw 選項是用來修改 STREAMS 模組,以反映使用者環境中的變更。 它不使用 /usr/ucb 版本的 stty(尚未國際化)。

下列指令會查詢使用者的環境,以取得有關 EUC 字碼集寬度的資訊,並將該資訊設定在文字行控制中:


system% /bin/stty defeucw 

例如,如果使用者已將環境變數 LC_CTYPE 設定為 locale, 則此選項會取得下列相關資訊:字碼集在 zh_TW 環境中之每個字元的位元組數與每個字元的螢幕寬度, 然後將此資訊發送到串流中的相關模組。

TTY 設定範例

系統管理員可在 /etc/rcn.d 目錄 (其中的 n 是執行層次) 中的啟動程序檔中加入 setterm,以在系統啟動時執行。 此外,使用者可在登入時執行 setterm 指令,來配置它們終端機的串流,包括適用於繁體中文輸入字碼轉換的模組。 使用 setterm 的下列範例,其功能類似在系統提示時鍵入的指令,或是系統檔案(像是 .cshrc.login 及啟動程序檔)中所包括的指令。 這類的指令可明確地設定裝置類型,或使用 terminfo 資料庫。

配置繁體中文版 Solaris 軟體 STREAMS

若要明確地配置 Big5 終端機的 STREAMS 模組,請使用:


setterm -x big5

這個使用與 terminfo 無關。

請進一步考慮利用 terminfo 資料庫中類似下列的登錄(適用於 VT-100 終端機),來在系統上使用這樣的終端機(與 Big5 相容):


vt100-b|VT-100-compatible with Big-5 chars,
lines#40, .csin=E(BE)IE[?1h, csin=E(BE)I, devt=PACKBig5,
s0ds=E(H, s1ds=E$@, s2ds=E(H, use=cit600,

參照此登錄的配置指令是:


setterm -t vt100-b

為了讓 setterm 在此應用程式中能正常使用, /usr/share/lib/setterm/zh_TW/conf.file 檔案必須含有一個對應到裝置類型的登錄。 這個登錄會給予 setterm 指示,將適當的轉換模組放入 TTY 串流中;例如:


#
big5throw \
			popto zs|mcp|mti|ptem \
			push big5euc \
			push ldterm \
			push ttcompat \
			run {stty defeucw} \
			catch
#
GenericEUC|EUCthrow \
			popto zs|mcp|mti|ptem \
			push ldterm \
			push ttcompat \
			run {stty defeucw} \
			catch
#
ASCIIthrow \
			popto zs|mcp|mti|ptem \
			push ldterm \
			push ttcompat \
			catch
# 

如需詳細資訊,請參閱 setterm(1 )線上援助頁。配置好時,預設會啟用轉換。應用程式也可透過 ioctl() 函式呼叫來設定功能。

終端機支援

繁體中文版 Solaris 作業環境支援 Big5 終端機。終端機應該具有內建的繁體中文字型和輸入方法。

安裝終端機

如果您之前尚未將終端機新增到系統,請先試著只在 ASCII 模式中安裝終端機。 如需詳細資訊,請參閱「Solaris 系統管理指南」。

新增終端機的串列埠介面

「串列埠」可從「管理工具」功能表中取得,可用來配置終端機的串列埠。 串列埠提供最簡單的終端機安裝方法。串列埠是由 admintool 啟動的。 有關 admintool 的詳細資訊,請參閱 「Solaris 系統管理指南」。

存取串列埠
  1. 成為超級使用者。


    system% su
    
  2. 鍵入 admintool

    「管理工具」功能表就會出現。


    system# admintool 
    
  3. 選取「串列埠」圖示。

使用「串列埠」功能表

當您安裝 ASCII 終端機時,支援 CNS 11643 的中文終端機也會同時安裝。

  1. 選取「串列埠」功能表上的「編輯」。

    串列埠:「修改服務」子功能表即會出現。

  2. 在「管理工具:修改服務」子功能表上選取「啟用」、「鮑率 9600」,然後輸入終端機類型。

    Graphic
  3. 在「專家選項」下選取「建立 utemp 登錄」,然後在「串流模組」欄位中輸入適當的模組:


    註解 –

    若要安裝支援繁體中文版 Solaris 作業環境之 Big5 碼的終端機, 請將 big5euc 新增到「串流模組」欄位中。


    Graphic

新增終端機的指令行介面

透過指令行在 ttya 通訊埠上設定終端機時需要下列程序:

  1. 決定通訊埠監視器版本號碼。

    通訊埠監視器版本編號即會顯示。


    # ttyadm -V 
    
  2. 請輸入下列指令,以通訊埠監控器版本號碼來取代 ver

    (如需 sacadm(1M)pmadm(1M)的詳細資訊,請參閱它們的線上援助頁。)


    # pmadm -r -p zsmon -s ttya 
    # sacadm -a -p zsmon -t ttymon -c /usr/lib/saf/ttymon -v ver
    
  3. 請使用符合終端機類型的 pmadm 指令,來新增登入服務:

    請對 EUC 終端機使用下列指令:


    # pmadm -a -p zsmon -s ttya -i root -fu -v ver -m “ `ttyadm -S y \
      -T terminal_type -d /dev/ttya -l 9600 -m ldterm,ttcompat -s \
      /usr/bin/login`”
    

    針對 Big5 碼終端機,請在 ttyadm 指令中使用 STREAMS 模組 big5euc


    # pmadm -a -p zsmon -s ttya -i root -fu -v ver -m “`ttyadm -S y \
      -T terminal_type -d /dev/ttya -l 9600 -m big5euc,ldterm,ttcompat -s \
      /usr/bin/login`” 
    
  4. 開啟終端機。

    請遵循終端機隨附的文件。

  5. 登入終端機。

  6. 檢查安裝的正確性:


    # setenv LANG locale 
    # /bin/stty cs8 -istrip  defeucw 
    

    註解 –

    這些值會顯示作業系統是設定為與「8 位元無同位檢查」模式中的終端機通訊。 請確定終端機是設定在「8 位元無同位檢查」模式中。請參閱終端機的設定手冊,來取得正確設定終端機選項的方法。


設定使用者的 TTY

若要檢驗您的 TTY 是否設定正確:

  1. 請用 -a 選項鍵入 /bin/stty 指令:


    system% /bin/stty -a 
    
  2. 如果沒有列出上面的值(cs8-istrip),請使用下列指令來設定它們:


    system% /bin/stty cs8 -istrip defeucw
    

    這是設定終端機的最後一個步驟。

以 EUC 語言環境來使用 Big5 TTY

  1. 如果您是使用 Big5 類型終端機,您必須以超級使用者的身份使用下列指令,來將 STREAMS 模組載入核心中:


    system% su
    Password: (Type superuser password here if required.) 
    # modload /kernel/strmod/big5euc 
    
  2. 請鍵入下列指令:


    system% setterm -x big5