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

第 4章 TTY環境和支援

本章假設您已熟悉:

請參閱termio(7)的線上援助頁中,有關STREAMS和TTY驅動程式的相關背景資訊。

TTY串流

在使用者的shell和終端機之間的資料路徑稱之為串流(stream)。在串流上的資料包含了字元和控制資訊。該控制資訊會影響資料的處理,如改變碼集或是通訊協定的控制碼。從終端機輸入串流的資料是未經處理的(raw),之後再依序經由串流模組處理後,交給shell或是應用程式使用。

串流(STREAMS)提供了將行的處理模組化的一種方式,如此可使處理的程序依功能合併成各個模組。這些模組可以隨時依使用者的需求不同而在行中增減,提供不同的環境給終端機。

傳統的STREAMS

傳統的STREAMS TTY環境包含了原始裝置驅動程式(raw device driver)、 文字行控制模組(line discipline module)、串流表頭(stream head)。原始裝置驅動程式在系統核心程式(kernel)和硬體之間提供了一個輸出入的介面。 因為它最接近實際的硬體,它提供了基本通訊協定、通訊速度切換、以及其他的低階服務。文字行控制模組是一些控制指令將原始資料(raw data) 轉成處理過的資料,其中包含了處理刪除(delete)字元、行清除(line kill)字元等功能。串流表頭在使用者的處理(process)和串流之間提供了一個介面。

繁體中文Solaris的STREAMS模組

繁體中文Solaris作業環境利用了STREAMS的特性支援繁體中文。除了傳統的 TTY模組外,此系統在STREAMS中處理碼的轉換。中文輸入通常是由許多的現有繁體中文TTY提供,因此繁體中文Solaris的TTY環境中沒有中文輸入。

繁體中文Solaris作業環境加強了既有的傳統模組。它的文字行控制可以正確地處理寬字元(widecharacter)的游標移動,以及一般的通訊協定。繁體中文Solaris軟體轉碼模組可在兩種不同的字碼格式(如Big5和EUC)之間轉換。

碼的轉換是根據和所設的相對應旗號或參數。例如,您使用的是Big5碼終端機。 從終端機的輸入會轉成EUC,而送到終端機的輸出會轉成Big5碼。

可以載入串流的主要模組是:ldtermbig5euc

TTY公用程式

ioctl(input/output control;輸出入控制)呼叫是處理裝置輸出入的低階常式。

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的字串值是在終端機輸出入時,配合相對應的碼集,做為資料宣告機制之用。

表 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用一終端機裝置名稱,為設定STREAMS模組給某TTY通訊埠,反應devt(裝置類型)欄位(位於terminfo資料庫)。此裝置名稱是對應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 作業環境提供了特殊用途之模組,來關閉或開啟轉碼,以及適當地處理多位元組( multibyte )與寬( wide )字元。載入某一個模組後, 就開啟了相對應的轉換。轉換的內定狀態是開啟的。

請參閱setterm(1)線上援助頁中的有關說明。

/bin/stty指令

-defeucw選項(用於/bin/stty指令)可用來修改STREAMS的模組來配合使用者環境的改變。該選項不能用於/usr/ucb版本的stty,因為它並沒有做過國際化(internationalized)的處理。

下列指令會查詢使用者環境中的EUC碼集寬度,同時設定文字控制中相對應的資訊:


system% /bin/stty defeucw 

例如,如果使用者有設定LC_CTYPE環境變數到區域環境, 透過此選項就能知道在zh_TW環境下的碼集中,每個字元是幾個位元組,以及每個字在螢幕上的寬度如何等等,然後將這些訊息送至串流中的相關模組。

TTY設定範例

系統管理者可以把setterm的指令加在/etc/rcn.d目錄(n是執行層次)下的啟動指令集中(startup script),在系統啟動時就可執行。另外,使用者可以在登入時,執行指令setterm指令 設定其終端機串流,包括適合的繁體中文輸入轉碼模組。下面的範例setterm是在系統提示下當成指令輸入,或是放在如.cshrc.login的系統檔案、或是啟動指令集中。這些命令可以明確地指定裝置類別,或是使用terminfo資料庫。

設定繁體中文Solaris軟體的STREAMS

使用下列的指令,明確地命令STREAMS模組使用Big5終端機:


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 System Administration Guide中進一步的說明。

透過「串列通訊埠」安裝終端機

您可以從管理工具選單中選取「串列通訊埠」,設定終端機所用的串列埠。 「串列通訊埠」提供了最簡單的方法安裝終端機。「串列通訊埠」是透過admintool呼叫。請參閱Solaris System Administration Guide中有關admintool的進一步說明。

使用串列通訊埠

  1. 變成高階使用者(superuser)。


    system% su
    
  2. 輸入admintool

    會出現admintool的選單。


    system# admintool 
    
  3. 選取「串列通訊埠」的圖像。

使用串列通訊埠選單

安裝支援CNS 11643的中文終端機之方法和安裝ASCII終端機一樣。

  1. 從「串列通訊埠」選單選擇「編輯」。

    會出現「串列通訊埠:修正串列通訊埠」的子選單。

  2. 在「管理工具:修正串列通訊埠」的子選單上,選擇「啟動服務」、「通訊速度 9600」,並輸入終端機種類。

    Graphic
  3. 在「專家選項」下,選取"建立utemp項目",並在「串流模組」欄中輸入適當的模組。


    註解 -

    欲在繁體中文Solaris作業環境下安裝支援Big5碼的終端機,請在「串流模組」欄中輸入big5euc


    Graphic

透過指令行介面安裝終端機

下列步驟是透過指令行把終端機設定在ttya所需之程序:

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

    這樣會顯示監控器的版本號碼。


    # ttyadm -V 
    
  2. 輸入下列指令。將版本代換成監控器的版本號碼。

    (請參見sacadm(1M)pmadm(1M)線上援助頁的進一步相關說明。 )


    # pmadm -r -p zsmon -s ttya 
    # sacadm -a -p zsmon -t ttymon -c /usr/lib/saf/ttymon -v 版本
    
  3. 利用配合您的終端機種類的pmadm命令新增登入(login)服務:

    如果您使用的是EUC終端機,請用下列指令:


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

    如果您是使用Big5碼的終端機,請用STREAMS模組big5euc(在ttyadm指令):


    # pmadm -a -p zsmon -s ttya -i root -fu -v 版本 -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 區域環境
    # /bin/stty cs8 -istrip  defeucw 
    

    註解 -

    這些值表示作業系統和終端機的溝通是設定在"8位元無同位檢查 (8-bit no-parity)"的模式。請確定終端機是設定在"8位元無同位檢查"模式。有關如何正確設定終端機的選項,請參閱終端機的設定手冊。


設定使用者的TTY

檢查您的TTY是否正確地設定了:

  1. 輸入指令/bin/stty,同時使用選項-a


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


    system% /bin/stty cs8 -istrip defeucw
    

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

在EUC區域環境下使用Big5 TTY

  1. 如果您是使用Big5種類的終端機,您必須變成高階使用者(superuser),使用下列指令將STREAMS模組載入系統核心程式(kernel):


    system% su
    Password: (如有需要,輸入高階使用者的密碼)
    # modload /kernel/strmod/big5euc 
    
  2. 輸入下列的指令:


    system% setterm -x big5