This chapter assumes that you are familiar with the following information.
The Solaris Operating System communicates with external devices using STREAMS and ioctl.
Different terminal types are supported by termcap and terminfo.
This chapter includes the following sections:
Refer to the termio(7I) man page for background information on STREAMS and TTY drivers.
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.
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.
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.
ldterm is a generic EUC line discipline module. It processes all normal line discipline functions and also handles proper cursor movement and backspacing for wide characters (EUC). See ldterm(7M) for more information.
kpack controls code conversion between Combination code of KS C 5601-1987 and EUC.
kjohap controls code conversion between Combination code of KS C 5601-1992 code and EUC.
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.
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 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 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 |
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 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.
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.
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.
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.
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, |
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 # |
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.
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, |
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 # |
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.
Packed code is also called combination code, KS C 5601-1987 and KS C 5601-1992.
If you have not added a terminal to your system before, first try installing a terminal in ASCII mode only.
Become superuser.
system% su |
Type admintool.
The admintool menu will appear.
system# admintool |
Select the serial ports icon.
Click edit on the serial ports menu.
The modify service submenu appears.
From the modify service submenu, select enabled, baud rate 9600. Then enter the terminal type.
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.
For more information on admintool, see the System Administration Guide: Solaris Containers, Resource Management, and Virtualization.
Use the following procedure to set up a terminal on ttya port from the command line.
Determine the port monitor version number.
# ttyadm -V |
The port monitor version number will display.
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.
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`” |
Turn on the terminal.
Refer to the documentation that accompanies the terminal.
Log in the terminal.
Check to see that the installation is correct.
# setenv LANG ko # /bin/stty cs8 -istrip defeucw |
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.
Use the following procedure to verify that the TTY is properly set up.
Type the /bin/stty command with the -a option.
system% /bin/stty -a |
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.
If you use a Packed code (KS C 5601-1987) terminal , you must load the kpack STREAMS module into the kernel.
Become superuser.
system% su Password: (Type superuser password here if required.) |
Load the kpack module.
#modload /kernel/strmod/kpack |
Type the following command to enable the module.
system% setterm -x PACK |
If you use a combination code (KS C 5601-1992) terminal , you must load the kjohap STREAMS module into the kernel.
Become superuser.
system% su Password: (Type superuser password here if required.) |
Load the kjohap module.
# modload /usr/kernel/strmod/kjohap |
Type the following command to enable the module.
system% setterm -x JOHAP |
If you use an EUC (KS C 5601-1987-0) terminal , you must load the ku8euc STREAMS module into the kernel.
Become superuser.
system% su Password: (Type superuser password here if required.) |
Load the ku8euc module.
#modload /kernel/strmod/ku8euc |
Type the following command to enable the stream module.
system% setterm -x KU8EUC |
Type the following command to enable 8-bit I/O.
system% stty defeucw cs8 -istrip |
If you want to use dtterm, type the following command.
system% setterm -x u8 |
If you use a Johap (KS C 5601-1992-3) code terminal , load the ku8johap STREAMS module into the kernel.
Become superuser.
system% su Password: (Type superuser password here if required.) |
Load the ku8johap module.
#modload /kernel/strmod/ku8johap |
Type the following command to enable the module.
system% setterm -x KU8JOHAP |
Type the following command to enable 8-bit I/O.
system% stty defeucw cs8 -istrip |
If you want to use dtterm, type the following command.
system% setterm -x u8 |