繁體中文 Solaris 使用者指南

第 11 章 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 STREAMS 指令進行一般的 EUC 處理。下面是這些 ioctl 呼叫及其效果的總結:

EUC_WGET

從 TTY 串流取得 cswidth

EUC_WSET

設定 TTY 串流的 cswidth

EUC_OXLOFF

將字碼轉換設定為 OFF

EUC_OXLON

將字碼轉換設定為 ON

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

termcapterminfo 資料庫

termcapterminfo 資料庫可用來修改應用程式的終端機特性。

下表列出 termcap 資料庫的延伸:

表 11–1 ioctl 要求和說明

變數 

描述 

dv

裝置類型:語言和字碼集 

ci

多個字碼集的起始順序 

s0

移位到字碼集 0 

s1

移位到字碼集 1 

s2

移位到字碼集 2 

s3

移位到字碼集 3 

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

表 11–2 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 堆疊上的名稱、在堆疊上推入或彈出模組,以及執行其它作業。透過進行 ioctl 呼叫來處理 STREAMS 堆疊。

繁體中文 Solaris 作業系統提供特殊模組,可以啟用或禁用程式碼轉換,正確地處理多位元組和寬字元。將模組推入堆疊可啟用對應的轉換。轉換的預設狀態是已經啟用。

如需更多資訊,請參閱「setterm(3CURSES) 線上說明手冊」。

/bin/stty 指令

/bin/stty 指令的 -defeucw 選項是用來修改 STREAMS 模組以反映出使用者環境中的變更。這個選項與 stty/usr/ucb 版本無法一起作用,因為該版本並未國際化。

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


system% /bin/stty defeucw

例如,如果使用者將環境變數 LC_CTYPE 設定成 locale,這個選項就會得到 zh_TW 環境中字碼集的每一字元位元組數資訊以及每一字元的螢幕寬度。接著該選項會在串流中將資訊傳送給相關模組。

TTY 設定範例

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

配置繁體中文 Solaris 軟體的 STREAMS

使用下列指令,明確設定 STREAMS 模組做為 BIG5 終端機用途。


setterm -x big5

這個使用與 terminfo 無關。

您可以在系統上使用與 BIG5 相容的 VT-100 終端機,此系統具有如 terminfo 資料庫中以下範例的登錄:


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,

使用下列配置指令引用 VT-100 登錄:


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
#

配置好時,預設會啟用轉換。應用程式也可透過 ioctl() 函式呼叫來設定功能。

終端機支援

繁體中文 Solaris 作業系統支援 BIG5 終端機。終端機應該具有內建的繁體中文字型和輸入方法。

安裝終端機

如果您尚未將終端機新增到系統,請先只在 ASCII 模式中安裝終端機。

如何透過串列埠介面新增終端機

您可以使用「管理工具」功能表上的串列埠選項來配置終端機的串列埠。串列埠提供最簡單的終端機安裝方法。


注意 –

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


  1. 成為超級使用者。


    system% su
    
  2. 鍵入 admintool

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


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

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

    「修改服務」子功能表即會出現。

  5. 在「修改服務」子功能表上選取「啟用」、「鮑率 9600」,然後提供終端機類型。

    設定終端機類型和鮑率
  6. 在「專家選項」下選取「建立 utemp 登錄」,然後在「串流模組」欄位中輸入適當的模組。


    注意 –

    若要安裝支援繁體中文 Solaris 作業系統 BIG5 程式碼的終端機,請將 big5euc 新增到「串流模組」欄位。


    建立 utemp 登錄和指定串流模組

如何透過指令行新增終端機

透過指令行在 ttya 埠上設置終端機時需要下列程序。

  1. 鍵入下列指令判定通訊埠監視器版本號碼:


    # ttyadm -V
    

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

  2. 請鍵入下列指令,以通訊埠監視器版本號碼來取代 ver


    # pmadm -r -p zsmon -s ttya
    # sacadm -a -p zsmon -t ttymon -c /usr/lib/saf/ttymon -v ver
    

    如需更多資訊,請參閱「pmadm(1M) 線上說明手冊」和「sacadm(1M) 線上說明手冊」。

  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 模組載入到核心。


    # modload /kernel/strmod/big5euc
    
  2. 輸入以下指令。


    system% setterm -x big5