이 장은 사용자가 다음 사항을 잘 알고 있다는 것을 전제로 합니다.
Solaris 운영 환경이 STREAMS와 ioctl을 사용하여 외부 장치와 통신하는 방법
termcap과 terminfo가 다른 터미널 유형을 지원하는 방법
STREAMS 및 TTY 드라이버에 대한 배경 정보에 대해서는 termio(7I) 설명서 페이지를 참조하십시오.
사용자의 셸과 터미널 사이의 데이터 경로를 스트림이라고 합니다. 스트림상의 데이터는 코드 세트나 통신 프로토콜의 변경에 우선하는 일련의 제어와 같이 데이터 처리에 영향을 주는 문자 및 제어 정보를 포함합니다. 터미널에서 스트림에 입력되는 데이터는 가공되지 않은 데이터입니다. STREAMS 모듈은 셸이나 응용프로그램이 적절히 사용할 수 있도록 데이터를 순차적으로 처리합니다.
STREAMS는 처리 명령을 기능적 모듈로 그룹화할 수 있도록 행에서의 처리를 모듈화합니다. 이러한 모듈은 사용자의 필요에 따라 터미널에 다른 환경을 제공하기 위해 행에 추가하거나 삭제할 수 있습니다.
전형적인 STREAMS TTY 환경에는 원시 장치 드라이버, 회선 제어 모듈 및 스트림 헤드가 있습니다. 원시 장치 드라이버는 커널과 하드웨어 사이의 I/O 인터페이스를 제공합니다. 물리적 하드웨어에 가깝기 때문에 기본적인 통신 프로토콜, 전송 속도 전환 및 기타 낮은 수준의 서비스를 제공합니다. 회선 제어 모듈은 명령 또는 제어 세트로서 원시 데이터를 처리된 데이터로 변환합니다. 이 모듈에는 삭제 문자, 행 강제 종료 문자 및 기타 문자가 포함됩니다. 스트림 헤드는 사용자의 프로세스와 스트림 사이의 인터페이스를 제공합니다.
한국어 Solaris 운영 환경은 STREAMS의 모듈 특성을 사용하여 한국어를 지원합니다. 전형적인 TTY 모듈과 더불어 이 제품은 STREAMS에서 코드 변환을 실행합니다. 한글-한자 변환은 일반적으로 기존의 많은 한국어 TTY에 의해 제공되며 한국어 Solaris TTY 환경에서는 사용할 수 없습니다.
한국어 Solaris 운영 환경에서는 전형적인 모듈이 향상되었습니다. 회선 제어는 일반 프로토콜 뿐만 아니라 넓은 문자의 적절한 커서 이동도 처리합니다. 한국어 Solaris 소프트웨어 코드 변환 모듈은 조합(KS C 5601-1987의 조합 코드)과 EUC(완성 코드)처럼 두 가지 서로 다른 문자 코드 형식 사이의 변환을 실행합니다.
코드 변환은 플래그나 매개변수 설정에 따라 달라집니다. 예를 들어, 조합 코드 터미널을 사용하면 터미널의 입력은 EUC로 변환되고 터미널로의 출력은 조합 코드로 변환됩니다.
스트림으로 확장될 수 있는 주요 모듈은 ldterm , kpack 및 kjohap입니다.
ldterm(7M)은 일반 EUC 회선 규칙 모듈입니다. 이 모듈은 일반 EUC 회선 제어 모듈로 모든 보통 회선 제어 기능을 처리하고 넓은 문자(EUC)의 적절한 커서 이동 및 백스페이싱을 다룹니다.
kpack은 KS C 5601-1987과 EUC 조합 코드 사이의 코드 변환을 제어합니다.
kjohap은 KS C 5601-1992 코드와 EUC 조합 코드 사이의 코드 변환을 제어합니다.
ioctl(입력/출력 제어) 호출은 장치의 입력과 출력을 처리하기 위한 하위 수준의 루틴입니다.
응용프로그램은 터미널 표시를 적절히 구성하기 위해 termcap 및 terminfo 데이터베이스를 사용합니다.
한국어 Solaris 운영 환경은 일반적인 EUC 처리를 위해 ioctl(2) STREAMS 명령을 사용합니다. 다음은 ioctl 호출과 호출에 따른 결과를 요약한 것입니다.
표 4–1 ioctl 요청 및 설명
ioctl 요청 |
설명 |
---|---|
EUC_WGET |
TTY 스트림에서 cswidth값 얻기 |
EUC_WSET |
TTY 스트림의 cswidth 값 설정 |
EUC_OXLOFF |
코드 변환을 OFF로 설정 |
EUC_OXLON |
코드 변환을 ON으로 설정 |
터미널과 관련된 문자 코드 변환은 EUC_OXLON과 EUC_OXLOFF에 의해 제어됩니다.
termcap과 terminfo는 응용프로그램의 터미널 특성에 맞도록 만들어진 데이터베이스입니다. 다음은 termcap 데이터베이스의 확장입니다.
표 4–2 termcap 변수 및 설명
변수 |
설명 |
---|---|
dv |
장치 유형: 언어 및 코드 세트 |
ci |
다중 코드 세트의 초기 시퀀스 |
s0 |
코드 세트 0으로 이동 |
s1 |
코드 세트 1로 이동 |
s2 |
코드 세트 2로 이동 |
s3 |
코드 세트 3으로 이동 |
다음은 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 환경을 구성하고 사용하는 명령어는 setterm과 /bin/stty입니다. setterm은 특정 터미널 유형을 위한 TTY 스트림을 구축하고 필요한 모듈을 스트림에 제공하는데 사용됩니다. stty는 스트림에서 모듈의 작동을 변경합니다.
setterm은 TTY STREAMS 환경을 구성하는데 사용됩니다. 이 명령은 특정 TTY 포트의 STREAMS 모듈을 조회하고 조정할 수 있습니다. 사용자는 setterm을 통해 시스템 또는 사용자가 제공하는 STREAMS 모듈을 사용하는 TTY STREAMS 환경을 조정할 수 있습니다.
setterm은 TTY 포트의 STREAMS 모듈을 구성하기 위해 terminfo 데이터베이스에서 devt(장치 유형) 항목을 반영하는 터미널 장치 이름을 사용합니다. 이 장치 이름은 setterm 구성 파일인 /usr/share/lib/setterm/ko/conf.file 또는 /usr/share/lib/setterm/ko.UTF-8/conf.file에서 같은 이름의 항목과 일치됩니다. 항목에는 STREAMS 환경을 적절히 구성하기 위해 어떤 모듈이 팝되고 푸시되는지에 대한 세부 명령이 포함됩니다.
setterm은 직접 인자로 장치 유형을 가질 수 있습니다. 이 장치 유형은 /usr/share/lib/setterm/ko/conf.file 또는 /usr/share/lib/setterm/ko.UTF-8/conf.file에 있는 유사한 항목과 일치합니다.
setterm 구성 파일은 실행할 작업을 지시하기 위해 특별한 언어를 사용합니다. 이 언어는 사용자가 STREAMS 스택에서 모듈의 이름을 결정하고 스택에서 모듈을 푸시하거나 팝하고 기타 작동을 수행하도록 합니다. setterm은 ioctl을 호출하여 STREAMS 스택을 조작합니다.
자세한 정보는 setterm(1) 설명서 페이지를 참조하십시오.
/bin/stty 명령의 defeucw 옵션은 사용자 환경의 변경 사항을 반영하기 위해 STREAMS 모듈을 수정하는 옵션입니다. 이 옵션은 국제화되지 않은 stty의 /usr/ucb 버전에서는 사용할 수 없습니다.
다음 명령은 사용자 환경에서 EUC 코드 세트 너비에 대한 정보를 조회하고 조회한 정보를 회선 규칙에 설정합니다.
system% /bin/stty defeucw |
예를 들어, 사용자가 환경 변수 LC_CTYPE을 locale로 설정하면, 이 옵션은 ko와 ko.UTF-8 환경에 있는 코드 세트의 문자당 바이트 수와 화면 너비에 대한 정보를 얻은 다음 이 정보를 스트림에 있는 관련 모듈로 전송합니다.
시스템 관리자는 시스템이 부팅될 때 실행되도록 /etc/rcn.d 디렉토리(n은 실행 레벨)에 있는 시작 스크립트에 setterm을 추가할 수 있습니다. 또한 사용자는 로그인할 때 setterm 명령을 실행하여 한국어 입력 코드 변환에 필요한 적합한 모듈 등의 터미널 스트림을 구성할 수 있습니다. setterm을 사용하는 다음 예는 시스템 프롬프트에서 명령으로 입력하거나 .cshrc, .login 및 시작 스크립트와 같은 시스템 파일에 포함시키면 실행됩니다. 이러한 명령은 장치 유형을 명시적으로 설정하거나 terminfo 데이터베이스를 사용할 수 있습니다.
EUC(완성 코드) 터미널용 STREAMS 모듈을 구성하려면 다음을 입력하십시오.
system% setterm -x EUC |
몇 가지 다른 예로 조합 또는 조합 모듈을 사용하는 조합 코드 터미널 사용을 생각해 봅시다.
KS C 5601-1987의 조합 코드를 지원하는 조합 STREAMS 모듈을 초기화하려면 다음을 입력하십시오.
system% setterm -x PACK |
KS C 5601-1992의 조합 코드를 지원하는 조합 STREAMS 모듈을 초기화하려면 다음을 입력하십시오.
system% setterm -x JOHAP |
이 사용법은 terminfo와 무관합니다.
terminfo 데이터베이스에 다음과 같은 항목(해당 터미널에 적합한)을 포함시켜 시스템상에서 FAST-15 조합 코드 터미널을 사용해 보십시오.
fast-15 | fast-pack | korean terminal packed mode, devt=PACK, use=vt100-w, |
이 항목을 참조하는 구성 명령은 다음과 같습니다.
system% setterm -t fast-15 |
setterm이 응용프로그램에서 적절히 작동하게 하려면 /usr/share/lib/setterm/ko/conf.file에 장치 유형에 해당하는 항목이 있어야 합니다. 이 항목은 TTY 스트림에 적합한 변환 모듈을 두기 위해 setterm 명령을 제시합니다. 예를 들어, 다음과 같습니다.
# 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 # |
자세한 정보는 setterm(1) 설명서 페이지를 참조하십시오.
ko.UTF-8 로켈의 STREAMS 모듈을 구성하려면 다음을 입력하십시오.
system% setterm -x u8 |
ko.UTF-8 로켈을 사용하기 위해 EUC 터미널의 STREAMS 모듈을 초기화하려면 다음을 입력하십시오.
system% setterm -x ku8euc |
ko.UTF-8 로켈을 사용하기 위해 KS C 5601-1992 터미널의 조합 코드를 지원하는 조합 STREAMS 모듈을 초기화하려면 다음을 입력하십시오.
system% setterm -x ku8johap system% stty defeucw cs8 -istrip |
setterm이 응용프로그램에서 적절히 작동하려면, /usr/share/lib/setterm/ko.UTF-8/conf.file에 장치 유형에 해당하는 항목이 있어야 합니다. 이 항목은 TTY 스트림에 적합한 변환 모듈을 두기 위해 setterm 명령을 제시합니다. 예를 들어, 다음과 같습니다.
# 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 # |
자세한 정보는 setterm(1) 설명서 페이지를 참조하십시오.
한국어 Solaris 운영 환경은 완성 코드 터미널과 팩형 코드(조합 코드라고도 하는 KS C 5601-1987 및 KS C 5601-1992) 터미널을 지원합니다. 터미널에는 내장된 자동 장치, 한글/한자 글꼴 및 입력 방식이 있어야 합니다.
이전에 터미널을 시스템에 추가한 적이 없다면 먼저 ASCII 모드로만 터미널을 설치하십시오. 자세한 내용은 시스템 관리 설명서를 참조하십시오.
직렬 포트는 터미널의 직렬 포트를 구성하는 Admintool 메뉴에서 액세스할 수 있습니다. 직렬 포트는 터미널을 설치하는 가장 쉬운 방법을 제공합니다. 직렬 포트는 admintool에 의해 실행됩니다. admintool에 대한 자세한 내용은 시스템 관리 설명서를 참조하십시오.
ASCII 터미널을 설치하는 것과 같은 방식으로 KS C 5601을 지원하는 한국어 터미널을 설치하십시오.
직렬 포트 메뉴에서 편집을 선택하십시오.
직렬 포트: 서비스 수정 부속 메뉴가 나타납니다.
관리 도구에서: 서비스 수정 부속 메뉴에서 서비스 사용 가능, 전송 속도 9600을 선택하고 터미널 유형을 입력하십시오.
전문가 옵션에서 “utmp 입력 항목 작성”을 선택하고 스트림 모듈 항목에 적절한 모듈을 입력하십시오.
스트림 모듈 항목에 kpack을 추가하여 한국어 Solaris 운영 환경에 KS C 5601-1987 버전의 조합 코드를 지원하는 터미널을 설치하십시오.
스트림 모듈 항목에 kjohap를 추가하여 한국어 Solaris 운영 환경에 KS C 5601-1992 버전의 조합 코드를 지원하는 터미널을 설치하십시오.
다음은 명령줄 이용하여 ttya 포트에 터미널을 설정하는데 필요한 절차입니다.
포트 모니터 버전 번호를 결정하십시오.
포트 모니터 버전 번호가 표시됩니다.
# ttyadm -V |
ver를 포트 모니터 버전 번호로 대체하여 다음 명령을 입력하십시오.
(sacadm(1M) 및 pmadm(1M)에 대한 자세한 정보는 관련 설명서 페이지를 참조하십시오.)
# pmadm -r -p zsmon -s ttya # sacadm -a -p zsmon -t ttymon -c /usr/lib/saf/ttymon -v ver |
터미널 유형과 일치하는 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`” |
KS C 5601-1987 버전의 조합 코드를 사용하는 한국어 팩형 코드 터미널의 경우에는 STREAMS 모듈 kpack을 ttyadm 명령에 입력하십시오.
# 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`” |
KS C 5601-1992 버전의 조합 코드를 사용하는 한국어 조합 코드 터미널의 경우에는 STREAMS 모듈 kjohap을 ttyadm 명령에 입력하십시오.
# 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`” |
터미널을 켜십시오.
터미널과 함께 제공된 설명서의 지시 사항을 따르십시오.
터미널에 로그인하십시오.
정확히 설치되었는지 확인하십시오.
# setenv LANG ko # /bin/stty cs8 -istrip defeucw |
이 값은 운영 체제가 터미널과 “8비트 패리티 없음” 모드로 통신하도록 설정되어 있다는 것을 나타냅니다. 터미널이 “8비트 패리티 없음” 모드로 설정되어 있는지 확인하십시오. 터미널 옵션을 설정하는 방법은 터미널 설정 설명서를 참조하십시오.
다음 절차에 따라 TTY가 적절히 설정되었는지 확인하십시오.
/bin/stty 명령을 -a 옵션과 함께 입력하십시오.
system% /bin/stty -a |
위의 값(cs8, -istrip)이 나타나지 않으면 다음 명령을 사용하여 설정하십시오.
system% /bin/stty cs8 -istrip defeucw |
이 단계는 터미널을 설정하는 마지막 단계입니다. 한국어 터미널의 기본 설정값은 완성 코드 모드입니다. 팩형 코드 TTY 설치는 다음 절에서 계속됩니다.
팩형 코드 유형 터미널을 사용하고 있다면 STREAMS 모듈을 커널로 로드해야 합니다.
팩형 코드 터미널(KS C 5601-1987)을 사용하고 있다면 수퍼 유저로서 다음 명령을 입력하여 kpack을 로드해야 합니다.
system% su Password: (필요하면 수퍼 유저 암호를 여기에 입력하십시오.) # modload /kernel/strmod/kpack |
다음 명령을 입력하십시오:
system% setterm -x PACK |
조합 코드 터미널(KS C 5601-1992)을 사용하고 있다면 수퍼 유저로서 다음 명령을 입력하여 kjohap 모듈을 로드해야 합니다.
system% su Password: (필요하면 수퍼 유저 암호를 여기에 입력하십시오.) # modload /usr/kernel/strmod/kjohap |
다음 명령을 입력하십시오.
system% setterm -x JOHAP |
EUC 터미널(KS C 5601-1987-0)을 사용하고 있다면 수퍼 유저로서 다음 명령을 입력하여 ku8euc 모듈을 로드해야 합니다.
system% su Password: (필요하면 수퍼 유저 암호를 여기에 입력하십시오.) # modload /kernel/strmod/ku8euc |
스트림 모듈을 활성화하려면 다음을 입력하십시오.
system% setterm -x KU8EUC |
8비트 I/O를 활성화하려면 다음을 입력하십시오.
system% stty defeucw cs8 -istrip |
dtterm을 사용하려면 다음 명령을 입력하십시오.
system% setterm -x u8 |
조합 코드 터미널(KS C 5601-1992-3)을 사용하고 있다면 수퍼 유저로서 다음 명령을 입력하여 ku8johap 모듈을 로드해야 합니다.
system% su Password: (필요하면 수퍼 유저 암호를 여기에 입력하십시오.) # modload /kernel/strmod/ku8johap |
스트림 모듈을 활성화하려면 다음을 입력하십시오.
system% setterm -x KU8JOHAP |
8비트 I/O를 활성화하려면 다음을 입력하십시오.
system% stty defeucw cs8 -istrip |
dtterm을 사용하려면 다음 명령을 입력하십시오.
system% setterm -x u8 |