rdesktop에서 한영키 인식시키기..

ganadist의 이미지

회사내에서 구전으로 떠돌아 다니던 rdesktop 한영키 패치입니다.

http://ftp.mizi.com/~ganadist/rdesktop-1.3.1-hangulkey.patch

이걸 적용 시킨다음 rdesktop -k ko hostname 으로 들어가면 한영토글키가 먹습니다.

File attachments: 
첨부파일 크기
파일 rdesktop_strtol_overflow.diff1.42 KB
파일 rdesktop_strtol_overflow.diff2.27 KB
Image icon E0200412.png14.87 KB
Image icon 00000412.png14.34 KB
Forums: 
jaeswith의 이미지

Debian 유저를 위해서 풀어서 설명드립니다.

(grdestop은 rdesktop의 gnome wrapper이므로 rdesktop의 설정을 그대로 바꾸면 됩니다.)
현재 sid에는 ko 키맵이 포함되어 있지 않기 때문에,
cd /usr/share/rdeskop/keymap
cp en-us ko
ko에서 아래 두 줄을 추가합니다.
Hangul 0xf2
Hangul_Hanja 0xf1

From http://bsdforum.or.kr/viewtopic.php?=175&highlight=rdesktop

그리고 grdesktop의 경우에는 Resource tab에 보면, keymap 박스에 젤 아래에 ko가 나옵니다. ko를 사용하니, 제대로 나오는 군요.
(저 같은 경우에는 따로 패치를 한 적은 없습니다. - 패치의 내용도 안 봤군요. -_-)

as simple as possible
Jae-wan Jang
http://camars.kaist.ac.kr/~jwjang

wkpark의 이미지

jaeswith wrote:
Debian 유저를 위해서 풀어서 설명드립니다.

(grdestop은 rdesktop의 gnome wrapper이므로 rdesktop의 설정을 그대로 바꾸면 됩니다.)
현재 sid에는 ko 키맵이 포함되어 있지 않기 때문에,
cd /usr/share/rdeskop/keymap
cp en-us ko
ko에서 아래 두 줄을 추가합니다.
Hangul 0xf2
Hangul_Hanja 0xf1

From http://bsdforum.or.kr/viewtopic.php?=175&highlight=rdesktop

그리고 grdesktop의 경우에는 Resource tab에 보면, keymap 박스에 젤 아래에 ko가 나옵니다. ko를 사용하니, 제대로 나오는 군요.
(저 같은 경우에는 따로 패치를 한 적은 없습니다. - 패치의 내용도 안 봤군요. -_-)


위의 패치를 보니 키맵도 같이 있군요.

키맵 부분을 뽑아서 en-us와 다른 점을 비교해보니 다음과 같습니다.

--- en-us       2004-07-09 11:18:06.000000000 +0900
+++ ko  2004-11-24 16:00:37.509819496 +0900
@@ -1,6 +1,6 @@
-# generated from XKB map us
+# generated from XKB map ko
 include common
-map 0x409
+map 0x412
 exclam 0x02 shift
 at 0x03 shift
 numbersign 0x04 shift
@@ -33,3 +33,5 @@
 greater 0x34 shift
 slash 0x35
 question 0x35 shift
+Hangul 0xf2
+Hangul_Hanja 0xf1

다른 부분은 map 0x412군요. 그런데 또 다른 패치 조각을 보면
--- rdesktop-1.3.1/xkeymap.c~	2004-02-27 18:53:59.380070848 +0900
+++ rdesktop-1.3.1/xkeymap.c	2004-02-27 18:54:52.811947968 +0900
@@ -138,6 +138,8 @@
 		if (strncmp(line, "map ", 4) == 0)
 		{
 			keylayout = strtol(line + 4, NULL, 16);
+			if (keylayout == 0x0412)
+				keylayout |= 0xe0010000; /* M$ hangul IME */
 			DEBUG_KBD(("Keylayout 0x%x\n", keylayout));
 			continue;
 		}

이 키맵 부분이군요. japanese 키맵에는 map 0x411 로 되어있는 것을 보면 map이 0x412로 되어야 맞는것 같군요.

그런데, keylayout이 0x412이면 0xe0010412로 바꿔주는 것 같은데
이것은 한글IME2002에 해당하는 keylayout으로 바꿔주는 것 같군요.

이 패치를 넣지 않으면 무슨 문제가 생기나요?

온갖 참된 삶은 만남이다 --Martin Buber

juicy의 이미지

패치 적용 어떻게 하는건가요? 한번도 안해봐서....

thisrule의 이미지

rdesktop 1.4.0 이 나왔는데 설치해보니 한영키 패치하지 않아도 잘 되더군요.
http://bbs.kldp.org/viewtopic.php?t=52770&highlight=

ftfuture의 이미지

저는 노트북이 일본어 자판인데요..
키가 한글자판보다더 많네요..
근데 1.4를 깔아서
rdesktop -k ko ip 로 실행해도 한영 전환키가 없네요.
직접 키코드를 찾아서 등록하려면 어떻게 해야 하나요?

익명 사용자의 이미지

rdesktop-1.4.1.tar.gz를 받아서 쓰려다보니.. 오른쪽 Alt키를 이용해서는 한영전환이 되는데.. Shift-Space로는 한영전환이 안되서.. 검색 실패로.. 결국 수정하였습니다..-_-; 보시면 아시겠지만 Shift-Space가 눌려지면 오른쪽 Alt키가 눌려진 것처럼 동작하도록 만든 것입니다..

keylayout 바꾸는 것은 기존에 다른 분이 만드셨던 부분에 있던 건데.. 다시 접속할때 마다 영문 키보드가 원래는 생기는데.. 그걸 생기지 않게 해주는 것 같아서 같이 남깁니다..~~

이제 편하게 rdesktop을 이용해서 한영전환을 할 수 있어서 무지 기쁘네요..~~

by PiRaNha

diff -ruN rdesktop-1.4.1/xkeymap.c rdesktop-1.4.1-shift-space/xkeymap.c
--- rdesktop-1.4.1/xkeymap.c 2005-04-28 18:41:57.000000000 +0900
+++ rdesktop-1.4.1-shift-space/xkeymap.c 2005-11-24 21:01:21.000000000 +0900
@@ -138,6 +138,8 @@
if (strncmp(line, "map ", 4) == 0)
{
g_keylayout = strtol(line + 4, NULL, 16);
+ if (g_keylayout == 0x0412)
+ g_keylayout |= 0xe0010000;
DEBUG_KBD(("Keylayout 0x%x\n", g_keylayout));
continue;
}
@@ -371,6 +373,14 @@
if (g_win_button_size
&& (get_key_state(state, XK_Alt_L) || get_key_state(state, XK_Alt_R)))
return True;
+ if (pressed && get_key_state(state, XK_Shift_L))
+ {
+ rdp_send_scancode(ev_time, RDP_KEYPRESS,
+ (SCANCODE_EXTENDED | 0xb8));
+ rdp_send_scancode(ev_time, RDP_KEYRELEASE,
+ (SCANCODE_EXTENDED | 0xb8));
+ return True;
+ }
break;
case XK_Num_Lock:
/* FIXME: We might want to do RDP_INPUT_SYNCHRONIZE here, if g_numlock_sync */

랜덤여신의 이미지

저도, 패치 적용 없이도, rdesktop -k ko hostname 만 하니까 바로 한영키 먹네요.
rdesktop 1.4.1 입니다.
좋은 팁 고맙습니다. :-)

익명 사용자의 이미지

wkpark wrote:
jaeswith wrote:
Debian 유저를 위해서 풀어서 설명드립니다.

(grdestop은 rdesktop의 gnome wrapper이므로 rdesktop의 설정을 그대로 바꾸면 됩니다.)
현재 sid에는 ko 키맵이 포함되어 있지 않기 때문에,
cd /usr/share/rdeskop/keymap
cp en-us ko
ko에서 아래 두 줄을 추가합니다.
Hangul 0xf2
Hangul_Hanja 0xf1

From http://bsdforum.or.kr/viewtopic.php?=175&highlight=rdesktop

그리고 grdesktop의 경우에는 Resource tab에 보면, keymap 박스에 젤 아래에 ko가 나옵니다. ko를 사용하니, 제대로 나오는 군요.
(저 같은 경우에는 따로 패치를 한 적은 없습니다. - 패치의 내용도 안 봤군요. -_-)


위의 패치를 보니 키맵도 같이 있군요.

키맵 부분을 뽑아서 en-us와 다른 점을 비교해보니 다음과 같습니다.

--- en-us       2004-07-09 11:18:06.000000000 +0900
+++ ko  2004-11-24 16:00:37.509819496 +0900
@@ -1,6 +1,6 @@
-# generated from XKB map us
+# generated from XKB map ko
 include common
-map 0x409
+map 0x412
 exclam 0x02 shift
 at 0x03 shift
 numbersign 0x04 shift
@@ -33,3 +33,5 @@
 greater 0x34 shift
 slash 0x35
 question 0x35 shift
+Hangul 0xf2
+Hangul_Hanja 0xf1

다른 부분은 map 0x412군요. 그런데 또 다른 패치 조각을 보면
--- rdesktop-1.3.1/xkeymap.c~	2004-02-27 18:53:59.380070848 +0900
+++ rdesktop-1.3.1/xkeymap.c	2004-02-27 18:54:52.811947968 +0900
@@ -138,6 +138,8 @@
 		if (strncmp(line, "map ", 4) == 0)
 		{
 			keylayout = strtol(line + 4, NULL, 16);
+			if (keylayout == 0x0412)
+				keylayout |= 0xe0010000; /* M$ hangul IME */
 			DEBUG_KBD(("Keylayout 0x%x\n", keylayout));
 			continue;
 		}

이 키맵 부분이군요. japanese 키맵에는 map 0x411 로 되어있는 것을 보면 map이 0x412로 되어야 맞는것 같군요.

그런데, keylayout이 0x412이면 0xe0010412로 바꿔주는 것 같은데
이것은 한글IME2002에 해당하는 keylayout으로 바꿔주는 것 같군요.

이 패치를 넣지 않으면 무슨 문제가 생기나요?

IME2003 등의 입력기가 설치(오피스를 설치하면 깔리는 걸로 알고 있습니다.)되어 있을 경우에, 이 패치를 적용하지 않으면 "-k ko" 옵션을 주어도 기본 입력기로 IME2003이 선택되지 않습니다. 마우스로 클릭해서 바꾸어주던지 해야 합니다. 은근히 불편합니다.

rdesktop 1.4.1 버전을 보아도 ko 키맵만 포합되어 있을 뿐 지적하신 부분은 패치가 적용되어 있지 않더군요... 여기 잘 된다고 적으신 분들은 예전버전의 기본입력기를 사용하고들 계신 건가요... 아니면 저만 이상했던 걸까요???

그런데 패치를 잘 보면 0x412는 아예 적용지 않습니다. 항상0xe0010412가 적용되도록 되어 있지요 , 아예 ko 키맵파일에 map 0xe0010412 라고 적어주어도 될거같은데, 안되더군요. 확인해 보니까 위에서 keylayout = strtol(line + 4, NULL, 16); 한 부분에서 오버플로우가 나는거 같습니다. 대충

keylayout = strtoul(line + 4, NULL, 16);

로 하면 일단 오버플로우는 피할 수 있습니다. ko맵파일에 map 0xe0010412라고 적어주고, 이런식으로만 고치기만 하면 됩니다.

제 생각에는 이런식의 패치가 위의 패치보다는 더 낫지 않을까 생각합니다. ox412라는 거는 korean과 관계된 거고 이런 패치는 너무 지협적이어서 패치가 적용되기 어렵다고 생각합니다.

적당히 ko 에는 map 0x412로 하고, ko2에는 0xe0010412로 두고, strtoul을 쓰도록 하면 될거 같습니다. 한번들 테스트 해보시고, 잘들 되신다면, 누가 패치를 제출해 주시면 좋겠습니다.

익명 사용자의 이미지

rdesktop v1.4.1에 대한 patch file입니다.

ko 키맵파일에서 map 0xe0010412로 바꾸었는데, 이게 예전 한글IME에서도 동작할지는 모르겠습니다. 원래 패치(mizi )를 보아서는 동작할 것 같습니다.

댓글 첨부 파일: 
첨부파일 크기
파일 0바이트
익명 사용자의 이미지

우연히 일본사람이 만든 패치를 찾았는데 위에 것처럼 strtol을 strtoul로 치환하고 있습니다.

http://tdiary.flowernet.gr.jp/jado/?date=20051007

댓글 첨부 파일: 
첨부파일 크기
파일 0바이트
익명 사용자의 이미지

위에서 적었던 strtol 오버플로우 문제에 대한 패치를 rdesktop 쪽에 보냈는데
아무 반응이 없다가
이번에 이 부분은 CVS에 적용이 되었습니다.

다만 이 패치에다가 "ko" 키맵파일에 "map 0x412" 를 "0xe0010412"로 바꾸는
부분도 포함시켜서 보냈는데, 이 부분에 대해서 궁금해 하는군요.
그러니까 현재의 "0x412"가 문제가 있느냐구 묻고 있습니다.

https://sourceforge.net/tracker/?func=detail&atid=381349&aid=1367109&group_id=24366

제 경우는 분명히 0x412로 하면 한영전환을 할 수 없습니다. 일일이 마우스로 찍어서 IME를 바꾸어
주어야만 한영전환이 가능합니다.

그런데, 여기 글을 올리신 분들 중에는 패치 없이도 현재 rdesktop 1.4.1만으로도 한영전한이
가능하다고 하시는 것 같은데, 이 부분이 어떻게 되는지 확인을 부탁드립니다.

0xe0010412 가 별로 문제가 안된다면 아예 "ko" 키맵파일에 기본값으로 들어갔으면
좋겠는데 답변해 주셨으면 감사하겠습니다.

댓글 첨부 파일: 
첨부파일 크기
Image icon 0바이트
Image icon 0바이트
bushi의 이미지

오래된 글이지만, 검색하다 흘러들어왔습니다.
의문에 대한 답은 안되겠지만... 몇 자 적겠습니다.

이 패치들은 아마도 제가 오래 전에 사내에 퍼뜨린 그것같은데,
당시의 rdesktop 은 RDP4 (windows NT 까지) 만 지원했었습니다.
여기저기 패치 긁어모으고 나름대로 수정도 좀 하고 해서 RDP5(windows 2000부터)에도 붙일 수 있게 되었는데,
한영키가 동작을 하지않더군요.

RDP 는 아시다시피 closed spec. 이라 문서를 보고 뭔가를 유추하는 것 자체가 불가능했습니다.
막연하게 IME 에 대한 정보가 꼬였다싶어서 windows 의 registry 를 싸그리 뒤졌습니다.
그래서 나온 값이 0xe0010412 입니다.
테스트삼아 저런 식으로 패치를 하고, map 파일을 작성한 다음 사내에 광고를 했습니다. RDP5 에도 드디어 붙을 수 있게됐다고.
(map 에 끼워넣은 한영키등의 키코드를 어떻게 알아냈는지에 대한 기억은 ... 떠오르지 않습니다.
IME 코드값 알아내는 것 보단 좀 더 단순무식했던 것 같은데... 아무튼 약간의 삽질이 있었습니다)

그 후론, 여러분이 지적하신 것 처럼 strtoul() 로 바꾸고 혼자 즐겼습니다.
이것마저도 서버계정이 짤리는 통에 수년전부터는 아예 관심을 껐고요.

도대체 문서를 찾아볼 수 없으니, 삽질을 통해 패치한 것들이 올바른 것인지 꽁수인지 알 수가 없었고,
설령 알았다해도, 당시의 rdesktop 은 개발중지상태였기에 어디 알려줄 곳도 없었습니다.

덧.
windows XP professional 엔 1 user 용의 RDP5 서버가 포함되어 있습니다.
service 목록 중에 terminal server 라고 표시되는 놈입니다.

OTL

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.