[solved;해결됨] ubuntu server 설치후 콘솔창 한글 깨지는 현상 질문

ubuntu server 를 설치한 후 콘솔에서 한글이 깨집니다.
ssh 툴로 접근해서 보면 한글 표시가 잘 되고있는 상태입니다.

관련하여 해결 방안 문의합니다.

해준 작업은 아래 작업만 해두었습니다.
$ sudo locale-gen ko_KR.UTF-8

$ locale
LANG=ko_KR.UTF-8
LANGUAGE=
LC_CTYPE="ko_KR.UTF-8"
LC_NUMERIC="ko_KR.UTF-8"
LC_TIME="ko_KR.UTF-8"
LC_COLLATE="ko_KR.UTF-8"
LC_MONETARY="ko_KR.UTF-8"
LC_MESSAGES="ko_KR.UTF-8"
LC_PAPER="ko_KR.UTF-8"
LC_NAME="ko_KR.UTF-8"
LC_ADDRESS="ko_KR.UTF-8"
LC_TELEPHONE="ko_KR.UTF-8"
LC_MEASUREMENT="ko_KR.UTF-8"
LC_IDENTIFICATION="ko_KR.UTF-8"
LC_ALL=

한글은 자소문자가 아니라 음소문자입니다.
하나의 발음을 표현하기 위해, 몇개의 자모가 조합되고, 그렇게 조합되서 하나의 자소를 만들어 냅니다
또한, 그렇게 해서 완성된 자소의 갯수가 엄청나게 많습니다.

참고로, 현행 한글의 디지탈체계는 완성형 코드체계이고, 완성된 자소에 대해 고유한 번호를 할당하는 코드체계입니다.
과거에는 조합형이라고, 각각의 초/중/종성 별로 사용하는 자모에 대해 코드르 부여하는 조합형 코드체계와 비교된 적이 있습니다만,
이런 방식의 문제는 많은 자소를 코드체계에 맞춰 할당할 수 없다는 점이 있었습니다. 즉, 특수문자 같은것을 할당할 영역이 부족하다는 것이죠.

하지만, 완성형이던, 조합형이던 1바이트의 최대 크기인 256을 넘는 자소를 가지기 때문에, 2바이트 이상이 필요합니다.
하지만 컴퓨터에서 문자단위의 최소단위는 1바이트이고, 롬바이오스에서 제공하는 입출력 함수는 1바이트를 최소단위로 합니다.
그리고, 현실적으로도 그 많은 자소를 롬바이오스에 등록하는 것도 문제가 있습니다.

일단 운영체제로 진입하면, 메모리나, 디스크에 대한 접근이 자유로워지기 때문에… 한글사용에 대한 제약은 적어지게 됩니다.
그러나, 텍스트모드/그래픽모드 라는 것 자체가 롬바이오스에서 구분하고 있는 화면 표현 방식입니다.
텍스트모드는 롬바이오스에서 제공하는 자소 집합을 이용해, 자소단위로 화면에 보여줍니다.

한글은 자모를 기반으로 하는 음소문자이기에, 자소단위로 표현하는 텍스트모드에는 적용되기 힘듭니다.

그러나, 롬바이오스에서는 그래픽모드로 하고, 이 그래픽모드에서 텍스트모드를 흉내내는 방식으로는 표현이 가능합니다.
통상 프레임버퍼(framebuffer)라는 기술로 이런 식으로 표현을 하게 됩니다.
프레임버퍼는 말그대로, 메모리내에 전체화면을 저장하고, 일정한 프레임로 화면에 보여주는 방식입니다.
메모리내에 화면이 저장되기 때문에…메모리 저장소에 기록만 하면, 디스플레이 장치가 일정주기로 탐색하여 화면에 보여줍니다.
즉, 화면출력장치에 직접 명령을 하는 것이 아니라, 화면 메모리에 작업하는 것입니다.

어쩌다 보니, 점점 깊게 들어가고, 어려운 부분을 설명하게 되었네요.

콘솔에서 한글을 출력하려면, 프레임버퍼기능을 사용해야 합니다.
단지 화면에 보여지는것만으로 만족하신다면, fbterm을 설치하시고, 화면을 전환하시면 됩니다.
fbterm은 framebuffer terminal의 약자로 보시면 됩니다.

[code:2e0dxyb8]
sudo apt-get install fbterm
fbterm
[/code:2e0dxyb8]
보통 화면에 한글 파일이나, 디렉토리가 보여지게 하거나,
한글 글꼴을 화면에 출력하는 것은 이것으로 충분합니다. 그리고, 대부분의 복잡한 작업은
그래픽 화면에서 하시면 되는 것입니다.

그러나, 한글을 입력하려고 하신다면, 많이 복잡해집니다.

설치)
sudo apt-get install uim-fep uim-byeoru fbterm

실행)
/usr/bin/fbterm – /usr/bin/uim-fep -u byeoru

이렇게 하시면, 콘솔에서도 한글입출력이 가능합니다.

하지만, uim의 한글전환키가 잘 적용되지 않아, 그 부분의 수정을 필요로 합니다.

uim 한영전환 키 설정)
$HOME/.uim.d/customs/custom-global-keys1.scm을 편집하셔서,
generic-on-key,generic-on-key?,generic-off-key,generic-off-key? 항목에 "<Control> "를 추가해주세요.
$HOME/.uim.d/customs/custom-byeoru-keys1.scm을 편집하셔서,
byeoru-on-key,byeoru-on-key?,byeoru-latin-key,byeoru-latin-key? 항목에 "<Control> "를 추가해주세요.
이렇게 설정하시면, 컨트롤 스페이스를 눌러 한영전환이 가능합니다.
그리고, 계정별이 아니라, 시스템전체에 적용되는 설정은
/usr/share/uim/{generic-key-custom.scm,byeoru-key-custom.scm}를 편집하시면 됩니다.

  1. fbterm 설정
    $HOME/.fbtermrc 파일을 편집하셔서
    font-names= 항목에
    font-names=영문글꼴명,한글글꼴명 이렇게 적어주세요
    예) font-names=Droid Sans Mono Dotted,NanumGothicCoding
    text-encodings=MSCP949,EUC-KR,UTF-8,UTF-16 으로 수정해주시고,
    input-method=uim-fep라고 적어주세요.

  2. 로케일 설정 및 가상 터미널 자동실행

$HOME/.profile을 편집하셔서 다음과 같은 내용을 추가해 주세요.

[code:2e0dxyb8]
tty_tmp=tty 2&gt;/dev/null|/bin/sed -r '/^&#91;^\/&#93;/d;s/^\/dev\/(&#91;^\/&#93;+)\/?(&#91;0-9&#93;+)$/\1 \2/g'
ttytype="${tty_tmp% *}"
export TTY_TYPE=$ttytype

if [ "$ttytype" = "tty" ]; then
echo "You are in Console."
ttyno=${tty_tmp##* }

LANG=&quot;en_US&#46;utf8&quot;
LANGUAGE=&quot;en_GB&#58;en&quot;
LC_ALL=C

for vt in 5 6;
do
    if &#91; &quot;$ttyno&quot; = &quot;$vt&quot; &#93;; then
        echo &quot;Intialize FBTERM &#46;&#46;&quot;
        LANG=&quot;ko_KR&#46;UTF-8&quot;
        LANGUAGE=&quot;ko_KR&#58;ko&#58;en_GB&#58;en&quot;
        LC_ALL=$LANG
        export LANG LANGUAGE LC_ALL
        exec /usr/bin/fbterm -- /usr/bin/uim-fep -u byeoru
    fi
done

else
echo "Maybe you are in X-Window."
LANG="ko_KR.UTF-8"
LANGUAGE="ko_KR:ko:en_GB:en"
LC_ALL=$LANG
export LANG LANGUAGE LC_ALL
fi
[/code:2e0dxyb8]

대충 코드에 대해 설명드리자면,
기본적으로, 콘솔에서 로케일을 영문으로 설정합니다. 왜냐면, 어자피 한글입출력이 안되기 때문에… 영문으로 설정하는 것이죠.
그리고 그래픽 터미널에서는 한글로 설정합니다.

하지만, 예외적으로
for vt in 5 6; 이하 코드에서 보여지듯,
가상터미널 5,6번에 대해서는
로케일을 한글로 설정하고.
자동으로 fbterm을 실행되게 하면서, fbterm내에서 자동으로 uim-fep를 실행하면서…
uim-fep의 입력기를 벼루로 설정합니다.

이렇게 해두시면, Ctrl+Alt+F5~F6을 눌러 가상터미널을 전환한 화면에…
로그인이 되면, 자동으로 한글입출력이 가능한 콘솔화면으로 전환됩니다.
$HOME/.profile은 사용자별로 로그인시 자동실행되는 파일입니다.
$HOME/.bashrc는 이에 반해, bash가 실행될때 마다, 사용자별로 자동실행됩니다.

첨언)
fbterm에 ucimf를 붙여 한글을 입력을 할 수 도, 있습니다.
그러나, 절대로 비추합니다. 왜냐면 입력방식을 중국사람이 만든것이라, 중국어입력체계에 맞춰져있습니다.
즉, 물흘러가듯, ㄱ ㅏ ㅇ 이렇게 입력하면 되는 것이 아니라, 글쇠를 누르면 선택화면이 나오고, 선택하게 되어 있습니다.
한글자마다 저래야 한다면 얼마나 불편하겠습니까?

한글은 정말 위대한 문화유산이자, 우리나라의 보배이자 자랑입니다.
중국의 한자와 비교해 본다면, 정말이지…
우리가 얼마나 편하게 발음을 표현하고, 얼마나 쉽게 배우는지…
또 이 한글이 디지털 세계에서도 잘 적용되는지… 그로 인해 IT에서 보이지 않는 잇점이 얼마나 많은지…
새삼 느끼게 됩니다. 세종대왕님 만세… 만만세… 이구요…
한글날은 당연히 국경일이 되어야 합니다. ^^

답변 감사합니다.

ssh에서는 한글이 잘 보이고 콘솔에서는 한글이 왜 깨지는지 확실히 알았습니다.

감동 받았습니다. ^^

좋은 하루 되세요~

아!! 그리고 위 설정만 따라하면 폰트가 없어서 안 나오더라구요.
폰트 설치했습니다.
$ sudo apt-get install ttf-nanum-coding

일단 위 작업만 하더라도 한글 잘 보이더라구요.

그리고 프레임버퍼를 루트만 사용되게끔 되어 있더군요.
어차피 콘솔 접속은 루트만 사용할거기에 별다른 설정 없이 작업 마무리 했습니다.

다시 한번 감사합니다.(이 글 읽고 다른 한글 관련 글 읽으니 이해 가네요. :) )

안녕하세요 2012/11/19 글에 이렇게 질문 하더 더 달아 봅니다.
Ubuntu 14.04.1 LTS Server AMD64 사용 중입니다.
콘솔에서 단순이 한글만 출력 되게 할려고 설치 실행을 해보았습니다

[code:1ehql7s3]
user> $ sudo apt-get install fbterm
user> $ fbterm
cant open frame buffer device!
mmap /dev/zero: Operation not permitted
Using VESA requires root privilege
user> $ sudo fbterm
root> #
[/code:1ehql7s3]
root 로 계정이 자동 변경이 됩니다 혹시 제가 잘못 한게 있는게 있나 싶어서 댓들 달아 봅니다.