Korean Solaris User's Guide

Chapter 12 TTY Environment and Support

This chapter assumes that you are familiar with the following information.

This chapter includes the following sections:

Refer to the termio(7I) man page for background information on STREAMS and TTY drivers.

TTY STREAMS

The data path between a user's shell and the terminal is called a stream. The data on a stream contain characters and control information that affect data handling, such as the control sequences that precede a change in code set or communication protocols. Data that enters the stream from the terminal is raw or unprocessed. Data is sequentially processed by STREAMS modules for appropriate use by the shell or an application.

STREAMS provides a way to modularize the processing on a line, allowing processing instructions to be grouped in functional modules. These modules can be added or removed from the line so that different environments can be provided to a terminal according to the user's needs.

Traditional STREAMS

The traditional STREAMS TTY environment contains a raw device driver, a line discipline module, and a stream head. The raw device driver provides an I/O interface between the kernel and the hardware. Because it is closest to the physical hardware, it provides basic communication protocols, baud rate switching, and other low level services. The line discipline module is a set of instructions or disciplines that transforms the raw data to processed data. This includes handling the delete character, line kill character, and others. The stream head provides an interface between the user's process and the stream.

Korean Solaris STREAMS

The Korean Solaris Operating System uses the modular nature of STREAMS to support Korean. In addition to the traditional TTY modules, this product implements code conversion in STREAMS. Hangul-Hanja conversion is typically supplied by many existing Korean TTYs and is not available in the Korean Solaris TTY environment.

The Korean Solaris Operating System enhances the traditional modules. The line discipline of the operating system handles proper cursor movement for wide characters as well as normal protocols. The Korean Solaris code conversion modules convert between two different character code formats. For example, Packed format, combination code of KS C 5601-1987, can be converted to EUC format, completion code.

Code conversion depends on the appropriate flags or parameters being set. For example, if a Packed code terminal is being used, the input from the terminal is converted to EUC and the output to the terminal is converted to Packed code.

The major modules that can be pushed onto the stream are ldterm, kpack and kjohap.

TTY Utilities

ioctl (input/output control) calls are low-level routines for handling device input and output.

The termcap and terminfo databases are used by applications to configure their terminal display appropriately.

EUC ioctl Features

The Korean Solaris Operating System uses ioctl STREAMS commands for general EUC handling. The table describes the ioctl requests.

Table 12–1 ioctl Requests and Descriptions

ioctl Request

Description 

EUC_WGET

Get cswidth values from TTY stream

EUC_WSET

Set cswidth values for TTY stream

EUC_OXLOFF

Set code conversion to OFF 

EUC_OXLON

Set code conversion to ON 

Character code conversion to and from the terminal is controlled by EUC_OXLON and EUC_OXLOFF.

The termcap database

The termcap and terminfo databases used to tailor the terminal characteristics for an application. The following table describes the variables of the termcap database.

Table 12–2 termcap Variables and Descriptions

Variable 

Description  

dv

Device type: language and code set 

ci

Init sequence for multiple code sets 

s0

Shift into code set 0 

s1

Shift into code set 1  

s2

Shift into code set 2 

s3

Shift into code set 3 

The terminfo database

The following are extensions to terminfo. The s0-s3 string values are used as data announcement mechanisms for the respective code sets during terminal I/O.

Table 12–3 terminfo Variables and Definitions

Variable 

Capname 

Tc 

Definition 

device_type

devt

dv

Device type: language and code set  

code_set_init

csin

ci

Init sequence for multiple code sets 

set0_des_set

s0ds

s0

Shift into code set 0 

set1_des_set

s1ds

s1

Shift into code set 1 

set2_des_set

s2ds

s2

Shift into code set 2 

set3_des_set

s3ds

s3

Shift into code set 3 

TTY Commands

The two commands for configuring and using the TTY environment are setterm and /bin/stty. setterm is used primarily to build the TTY stream for a particular terminal type, pushing the necessary modules onto the stream. stty changes the behavior of the modules in the stream.

setterm Command

setterm is used to configure the TTY STREAMS environment. It can inquire about and manipulate STREAMS modules for a particular TTY port. setterm allows users to tailor their TTY STREAMS environment using system-provided or user-provided STREAMS modules.

setterm uses a terminal device name that reflects the devt (device type) field in the terminfo database for configuring STREAMS modules for a TTY port. This device name is matched with an entry of the same name in the setterm configuration file, /usr/share/lib/setterm/ko/conf.file or /usr/share/lib/setterm/ko.UTF-8/conf.file. This entry contains detailed instructions on which modules to pop and push in order to properly configure the STREAMS environment.

setterm can also take the device type as a direct argument. This device type is similarly matched with an entry in /usr/share/lib/setterm/ko/conf.file or /usr/share/lib/setterm/ko.UTF-8/conf.file.

The setterm configuration file uses a special language for instructions on what actions to take. This language allows users to determine the names of modules on the STREAMS stack, to push or pop modules on the stack, and to do other operations. setterm manipulates the STREAMS stack by making ioctl calls.

/bin/stty Command

The defeucw option to the /bin/stty command is for modifying STREAMS modules to reflect changes in the user's environment. It does not work with the /usr/ucb version of stty, which has not been internationalized.

The following command queries the user's environment for information on EUC code set width and sets.


system% /bin/stty defeucw

For example, if the user has the environment variable LC_CTYPE set to locale, this option gets information on the number of bytes per character and the screen width per character for the code sets in the ko and ko.UTF-8 environments and then sends this information to relevant modules in the stream.

TTY Setup Examples

The system administrator can add setterm in the startup script in /etc/rcn.d directory (where n is the run level), to run at the system boot time. Also, users can run the setterm command at login to configure the stream for their terminal, including the appropriate modules for Korean input code conversion. The following examples using setterm work as commands typed at a system prompt or included in system files such as .cshrc, .login, and the startup script. Such commands can either explicitly set the device type or use the terminfo database.

Configuring STREAMS for Korean Solaris Software

You can use the commands in this section to configure STREAMS modules.

    Use the following command to explicitly configure the STREAMS module for the EUC, completion code, terminal type.


    system% setterm -x EUC
    

    Use the following command to explicitly initialize the Packed STREAMS module that supports the combination code of KS C 5601-1987.


    system% setterm -x PACK
    

    Use the following command to explicitly initialize the Johap STREAMS module that supports a combination code of KS C 5601-1992.


    system% setterm -x JOHAP
    

Use this procedure to run a configuration command that references an entry in the terminfo database.

  1. Add the following entry for a FAST-15 Packed code terminal to the terminfo database.


    fast-15 | fast-pack | korean terminal packed mode,
    devt=PACK,
    use=vt100-w,
  2. Use the following configuration command to reference the entry for the FAST-15 Packed code terminal.


    system% setterm -t fast-15
    

For setterm to work properly, the /usr/share/lib/setterm/ko/conf.file must contain an entry that corresponds to the device type. This entry gives setterm instructions for placing the appropriate conversion modules in the TTY stream.

    Add the following entry that corresponds to the device type to the /usr/share/lib/setterm/ko/conf.file.


    #
    KoreanPACK|PACKthrow \
    							popto zs|mcp|mti|ptem \
    							push kpack \
    							push ldterm \
    							push ttcompat \
    							run {stty defeucw} \
    							catch
    #
    KoreanJOHAP|JOHAP	throw \
    							popto zs|mcp|mti|ptem \
    							push kjohap \
    							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
    # 

Configuring STREAMS for the ko.UTF-8 Locale

You can use the commands in this section to configure STREAMS modules the ko.UTF-8 Locale.

    Use the following command to explicitly configure the STREAMS module for the ko.UTF-8 locale.


    system% setterm -x u8
    

    Use the following command to explicitly initialize an EUC terminal to use the ko.UTF-8 locale


    system% setterm -x ku8euc
    

    Use the following command to explicitly initialize the Johap STREAMS module. This module supports combination code of the KS C 5601-1992 terminal to use the ko.UTF-8 locale.


    system% setterm -x ku8johap
    system% stty defeucw cs8 -istrip
    

Use this procedure to run a configuration command that references an entry in the terminfo database.

  1. Add the following entry for a FAST-15 Packed code terminal to the terminfo database.


    fast-15 | fast-pack | korean terminal packed mode,
    devt=PACK,
    use=vt100-w,
  2. Use the following configuration command to reference the entry for the FAST-15 Packed code terminal.


    system% setterm -t fast-15
    

For setterm to work properly, the /usr/share/lib/setterm/ko.UTF-8/conf.file must contain an entry that corresponds to the device type. This entry gives setterm instructions for placing the appropriate conversion modules in the TTY stream.

    Add the following entry that corresponds to the device type to the /usr/share/lib/setterm/ko.UTF-8/conf.file.


    # Korean specific entries:
    #
    # Completion/Wansung/EUC code terminal support (KS C 5601-1992)
    KoreanU8EUC|KU8EUCthrow			\
    			popto zs|mcp|mti|ptem   \
    			push ku8euc		\
    			push eucu8		\
    			push ldterm		\
    			push ttcompat		\
    			push u8euc		\
    			run {stty defeucw}	\
    			catch
    #
    # Combination code terminal support (KS C 5601-1992 Annex 3)
    KoreanU8JOHAP|KU8JOHAPthrow			\
    			popto zs|mcp|mti|ptem   \
    			push ku8johap		\
    			push eucu8		\
    			push ldterm		\
    			push ttcompat		\
    			push u8euc		\
    			run {stty defeucw}	\
    			catch
    #

Terminal Support

The Korean Solaris Operating System supports completion-code terminals and Packed-code terminals. The terminals should have built-in automata, Hangul/Hanja fonts, and Hangul/Hanja input methods.


Note –

Packed code is also called combination code, KS C 5601-1987 and KS C 5601-1992.


Installing a Terminal

If you have not added a terminal to your system before, first try installing a terminal in ASCII mode only.

How to Install a Terminal to Support KS C 5601

  1. Become superuser.


    system% su
    
  2. Type admintool.

    The admintool menu will appear.


    system# admintool
    
  3. Select the serial ports icon.

  4. Click edit on the serial ports menu.

    The modify service submenu appears.

  5. From the modify service submenu, select enabled, baud rate 9600. Then enter the terminal type.

    The preceding context describes the graphic.
  6. Under expert options, select the create utemp entry and enter the appropriate module in the streams modules field.

    To install a terminal that supports the KS C 5601-1987 version of combination code for the Korean Solaris Operating System, add kpack to the streams modules field.

    To install a terminal that supports the KS C 5601-1992 version of combination code for the Korean Solaris Operating System, add kjohap to the streams modules field.

    The preceding context describes sthe graphic.

    For more information on admintool, see the System Administration Guide: Solaris Containers, Resource Management, and Virtualization.

How to Set Up a ttya Port from the Command Line

Use the following procedure to set up a terminal on ttya port from the command line.

  1. Determine the port monitor version number.


    # ttyadm -V
    

    The port monitor version number will display.

  2. Enter the following commands and substitute the port monitor version number for ver.


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

    For more information, see pmadm(1M) and sacadm(1M) man pages.

  3. Use the pmadm command that matches your terminal type to add a login service.

    For EUC terminals, use the following command.


    # 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`”
    

    For Korean Packed code terminals that use the KS C 5601-1987 version of Combination code, type the STREAMS module kpack in the ttyadm command.


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

    For Korean Combination code terminals, which use the KS C 5601-1992 version of Combination code, type the STREAMS module kjohap in the ttyadm command.


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

    Refer to the documentation that accompanies the terminal.

  5. Log in the terminal.

  6. Check to see that the installation is correct.


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

    Note –

    These values show that the operating system is set to communicate with the terminal in 8-bit no-parity mode. Make sure the terminal is set up in 8-bit no-parity mode. Refer to the terminal's setup manual for the proper way to set terminal options.


How to Verify TTY Set Up

Use the following procedure to verify that the TTY is properly set up.

  1. Type the /bin/stty command with the -a option.


    system% /bin/stty -a
    
  2. If the cs8, -istrip values set in the previous procedure are not listed, use the following command to set them.


    system% /bin/stty cs8 -istrip defeucw
    

This is the last step in setting up a terminal. The default setting of a Korean terminal is the completion-code mode. Continue to the next section to install a Packed-code TTY.

How to Use Packed Code and Johap TTY in the ko Locale

If you use a Packed code (KS C 5601-1987) terminal , you must load the kpack STREAMS module into the kernel.

  1. Become superuser.


    system% su
    Password: (Type superuser password here if required.)
    
  2. Load the kpack module.


    #modload /kernel/strmod/kpack
    
  3. Type the following command to enable the module.


    system% setterm -x PACK
    

How to Use Combination Code and Johap TTY in the ko Locale

If you use a combination code (KS C 5601-1992) terminal , you must load the kjohap STREAMS module into the kernel.

  1. Become superuser.


    system% su
    Password: (Type superuser password here if required.)
    
  2. Load the kjohap module.


    # modload /usr/kernel/strmod/kjohap
    
  3. Type the following command to enable the module.


    system% setterm -x JOHAP
    

How to Use the EUC TTY in the ko.UTF-8 Locale

If you use an EUC (KS C 5601-1987-0) terminal , you must load the ku8euc STREAMS module into the kernel.

  1. Become superuser.


    system% su
    Password: (Type superuser password here if required.)
    
  2. Load the ku8euc module.


    #modload /kernel/strmod/ku8euc
    
  3. Type the following command to enable the stream module.


    system% setterm -x KU8EUC
    
  4. Type the following command to enable 8-bit I/O.


    system% stty defeucw cs8 -istrip
    
  5. If you want to use dtterm, type the following command.


    system% setterm -x u8
    

How to Use the Johap TTY in the ko.UTF-8 Locale

If you use a Johap (KS C 5601-1992-3) code terminal , load the ku8johap STREAMS module into the kernel.

  1. Become superuser.


    system% su
    Password: (Type superuser password here if required.)
    
  2. Load the ku8johap module.


    #modload /kernel/strmod/ku8johap
    
  3. Type the following command to enable the module.


    system% setterm -x KU8JOHAP
    
  4. Type the following command to enable 8-bit I/O.


    system% stty defeucw cs8 -istrip
    
  5. If you want to use dtterm, type the following command.


    system% setterm -x u8