SuSE Linux: 모든 버전
xterm에서 텔넷 연결을 하면 backspace
키나 기능키들이
정상적으로 동작을 하지 않는다.
backspace
키코드가
\010
(Ctrl-H)이 아닌 \177
코드를
사용하고 있다. 여기에는 간단한 두가지 이유가 있다.
리눅스 콘솔에서도 \177
은 backspace
키로 지정
되며 \033[3~
은 Delete
키로 지정 되어 있다.
그리고 많은 프로그램에서 Ctrl-H는 도움말 기능을 사용하기위해서
지정되어 있다.
Background
backspace
/delete
문제의 기원은 텔렉스 기계와
초기 UNIX/DOS 컴퓨터를 사용하던 시대로 거슬러 올라간다.
아스키 코드에 따르면 \010
은 커서 를 한칸뒤로 이동시키
는 것을 의미한다. 이것은 삭제 (delete) 시킨다는 것이 아니라
덧쓰기를 한다는 의미이다. 그리고 \177
은 커서에 있는 문자를 무시한다는 의미를 가지고 있는데
이것이 바로 삭제를 의미 한다.
시간이 지나면서 여러 터미널과 에뮬레이션에서 이 문자들의
의미가 약간씩 바뀌었다. 예를 들어, 표준 vt100
에서는
\010
을 BackSpace
키로 사용하고
표준 vt220
에서는 \177
를 BackSpace
로 사용했다.다른플랫폼에서 개발된 리눅스에서도
이로 인해 backspace
와 Delete
키의
매핑에 문제가 생기게 되었다.
한편 이 문제는 /usr/lib/terminfo/*/
파일들이
/etc/termcap
엔트리들에 있는 적절한 표현으로 통제
되어야 한다.
본격적으로 문제에 대해 생각해 보자.현재 다양한 종류의 UNIX
운영체제들 사이에는 똑같은 이름의 터미널을 위한 엔트리에 차이가
있다.
그래서 terminfo
파일들을 수세리눅스에서
사용되는대로 그대로 남겨둘것을 권장한다.terminfo
파일은 xterm
과 같은 터미널이나 터미널 에뮬레이터
의 행동을 나타내준다. /usr/lib/terminfo/x/xterm
에 있는
terminfo
파일의 C소스코드로 기술된 대로 정확히
동작한다. xterm
에서의 키보드 매핑은 우리 수세 리눅스
배포본의 /usr/X11R6/lib/X11/app-defaults/XTerm
에
정의 되어 있다. 이것은 X11R6.1/6.3 배포본 표준 정의를
따르고 있다.BackSpace
키는 \177
을 반환하여 주고 Delete키는 \033[3~
을 반환
하여 준다.그래서, Motif 프로그램들에서는 XKeymap
이 변경되지 않은 상태이기 때문에 아무런 문제가 없다.
원격 시스템에 텔넷 연결을 생성시키면 로컬 시스템의
/user/lib/terminfo/x/xterm
에 있는 로컬
xterm이 리모트 시스템 의 /usr/lib/terminfo/x/xterm
에 있는 원격 xterm과 일치하지 않을 수 있기 때문에 신경을 써야
한다. 그래서, 특별한 변경을 하지 않았더라도
XFree86[tm]-3.2(색상 지정을 하는데 사용되는)에 들어 있는 xterm이 X11R5나 X11R6 등
의 다른 워크스테이션상의 xterm들과 완전히 다를 수 있다. 그리고 종종 시스템이 다르면
기능 키들이 완전히 다른 이스케이프 시퀀스를 사용할 수 있다.
Solution:
● TERM=vt100과 같은 최소 터미널 표현과 ~/.telnetrc 파일을 사용하시오. 이 파일에는
로컬 터미널(여기서는 xterm)이 리모트 시스템 telnetd 등과 관련하여 어떻게 동작하는지 기
술되어 있다.
------------------------------------------------
#
plato.suse.de
unset stop
unset start
set erase ^?
set outbinary true
environ export DISPLAY
environ export WINDOWID
#
------------------------------------------------
이렇게 DISPLAY
와 WINDOWID
변수들이 설정(이것은 리모트 telnetd가
이것을 할 수 있을 경우에 한해서 해당)되면 start/stop 비트가 비워져서 outbinary=true
변수와 상관없이 umlauts가 사용될 수 있다. 그리고 erase=\177
은 로컬 백스페이스키를 나타내 준다.
로컬 스크린 상에서 리모트 로그인 쉘을 가지고 리모트 xterm을 시작해 준다.
stty 프로그램을 사용해서 로컬 백스페이스키와 관련한 리모트 프로그램들의 행동을 지정해 줄 수 있다.
stty erase ^\?
다음 두 번째 해결책은 좋은 네트워크 연결이 가지고 있을 때 가장 적합하다. 이 해결책을
위해서 수세 리눅스에서는 xlogin
이라는 스크립트가 존재한다(이것은 xlogin 패키지에 포함
되어 있다). 이 스크립트는 먼저 Xauthority
키를 rsh를 경유에서 패스시킨 다음에 로컬 스
크린 상에서 원격 xterm
을 열어 준다. 이것은 다음과 같이 하면 쉽게 호출할 수 있다.
xlogin hostname
다음에는 수세 리눅스 4.4.1보다 오래된 버전을 가진 사용자들에게 도움을 줄 수 있는 스크립트이다.
----------------------------------------------------------------------------
#!/bin/bash
#
rechner=$*
term="/usr/bin/X11/xterm -ls"
xauth="/usr/bin/X11/xauth"
redi="< /dev/null > /dev/null"
#
if [ -z "${DISPLAY}" ]; then
echo "No DISPLAY variable" 2>1&
exit 2
else
DISPLAY=`echo ${DISPLAY%%unix}`
fi
#
#
if [ -z "${HOSTNAME}" ]; then
HOSTNAME=`hostname -f`
fi
#
#
case ${DISPLAY} in
:*)
DISPLAY=${HOSTNAME}${DISPLAY}
esac
#
#
if [ -z "${XAUTHORITY}" ]; then
XAUTHORITY="${HOME}/.Xauthority"
fi
#
# Programs
#
remote_xauth="${xauth} -i merge -"
local_xauth="${xauth} -f ${XAUTHORITY} extract - ${DISPLAY}"
xterm="${term} -display ${DISPLAY}"
#
#
for host in $rechner; do
title="-T ${host} -n ${host}"
${local_xauth} | rsh ${host} "${remote_xauth}"
rsh -n ${host} "exec ${xterm} ${title} ${redi}" &
done
exit 0
----------------------------------------------------------------------
키워드: BACKSPACE, DELETE, TELNET, XTERM
카테고리:
피드백: Send Mail to werner@suse.de (Please give the following subject: SDB-backspace_delete
)
SDB-backspace_delete, Copyright SuSE Linux AG, Nrnberg, Germany
- 버전: 14. Feb 2001
SuSE Linux AG - 최근에 만들어진 : 16. Feb 2001 에 의해 werner (sdb_gen 1.40.0)