피로곰's 모두의 프린터

반응형

모두의 리모트를 완전히 Go언어로 다시 만들고 기존 구조랑 전혀 다르게 수정을 하면서 기존 모두의 리모트를 1년 넘게 사용해오면서 가장 불편하게 느낀 점이 한영키가 먹지 않는다는 점입니다. 모두의 리모트에서 사용중인 TightVNC뿐 아니라 대부분의 VNC계열의 RDP 프로그램들에서 발생하는 문제이긴 한데요..

 

TightVNC 2.8.59-gpl 버전 소스코드를 받아서 한영키 관련된 부분을 수정하고 아무래도 멀티플랫폼에 맞춰 개발된 프로그램이라 소스코드들이 UTF-8인코딩으로 되어 있어서 Visual Studio 에서 윈도용으로 컴파일시에 뜨는 이런저런 Warning 과 몇가지 define 관련 충돌나는 부분들과 함께 한영키 처리에 대한 부분을 수정하였습니다.

 

이미 한글에 대한 여러가지 부분이 적용이 되어 있음에도 정작 공식 사이트에서 배포하는 바이너리 실행파일에는 관련 부분들이 제외되어 있는점과 한글과 관련된 define 이나 각종 이런저런 것들이 Japanese .. 라는 주석 밑에 달려 있는게 심히 부울편 하긴 하군요 ..

 

 

우선 바이너리 파일들 입니다..

 

tightvnc_2.8.59-gpl-한영키패치.zip
1.19MB

위와 같이 3개 파일이구요.. 기본적인 동작 코드들은 전혀 손댄바 없습니다. VirusTotal 검사 상으로 

 

이놈을 제외한 

대부분의 바이러스 백신에서는 특별히 오진되는 부분은 없네요.. ( 모프는 왜!!! 상늠 시키들아!! )

 

아래는 GPL 라이선스에 따라 수정된 소스코드를 업로드 합니다. 어짜피 모두의 리모트 새버전을 올리면 수정된 코드는 공개를 해야 하니까 미리 해둡니다.

 

tightvnc-2.8.59-gpl-opensource.zip
2.68MB

수정된 파일은 Util 프로젝트의 Keymap.cpp , rfb 프로젝트의 RfbKeySym.cpp 2개의 파일입니다.

Keymap.cpp 의 include 단에 #define XK_KOREAN 을 추가 하였구요

#include "Keymap.h"

#include "util/winhdr.h"
#include "win-system/InputInjector.h"
#include "win-system/Keyboard.h"
#include <crtdbg.h>

#define XK_KOREAN		// pirogom
#define XK_MISCELLANY
#define XK_CYRILLIC

Keymap.cpp 파일의 상단에 const KS2VKEntry 상수 테이블의 맨 마지막에 //pirogom 주석 참고하시구요

const VK2KSEntry 에도 맨 아래에 한글키 관련 처리를 추가 하였습니다.

// Table for translating X11 keysyms to auxiliary windows virtual key codes.
// FIXME: maybe place this into file as binary? such definitions make my eyes wet.
const KS2VKEntry SERVER_AUXILIARY_TRANSLATE_TABLE[] = {
  { XK_Shift_L,   VK_LSHIFT },
  { XK_Shift_R,   VK_RSHIFT },
  { XK_Shift_L,   VK_SHIFT },
  ...
  ...
  { XK_Menu, VK_APPS },
  { XK_Hangul, VK_HANGUL }		// pirogom
};


const VK2KSEntry VIEWER_AUXILIARY_TRANSLATE_TABLE[] = {
  { VK_LSHIFT,    XK_Shift_L },
  { VK_RSHIFT,    XK_Shift_R },
  { VK_SHIFT,     XK_Shift_L },
  { VK_LCONTROL,  XK_Control_L },

  ...
  ...

  { VK_RWIN,      XK_Super_R },
  { VK_APPS,      XK_Menu },
  { VK_HANGUL,    XK_Hangul }	// pirogom
};

rfb 폴더 안의 RfbKeySym.cpp 파일에서 RfbJKeySym::processKeyEvent 을 찾으시고 함수의 상단에 

	if (virtKey == 229) {
		virtKey = 21;
	}

라고 추가 하였습니다.

다른 버전의 tightvnc 소스에 한글패치를 하시려는 경우 위 내용을 참고하시면 되겠습니다.

압축 해제하시면 sln 파일이 2개 나오는데요 .. 괜히 VS 2017 이나 VS 2019 에서 솔루션 파일 업그레이드 시켜서 어케 해보시려 하지 마시구요. Visual Studio 2015 설치 하시고 tightvnc2015.sln 파일을 사용해서 컴파일 하십시요. XP 관련 코드들이 다수 포함되어 있어서 .. 최신 Visual Studio 에서 컴파일 하시려면 SDK 부터 시작해서 머리 터집니다.

 

시간 좀 걸리더라도 Visual Studio 2015 버전을 설치해서 컴파일 하시기 바랍니다.

 

한영키 처리 관련 부분만 수정을 본 부분이고 관련 처리부분은 이전부터 수집해둔 자료를 근간하구요 한영키 관련 패치법은 구글링만 해도 이미 작성해두신 블로거들이 계십니다. tightvnc 소스와 관련해서는 질문받지 않습니다.

이상입니다.

p.s 깃헙도 파 뒀습니다.

https://github.com/pirogom/tightvnc_kor_patch

 

GitHub - pirogom/tightvnc_kor_patch

Contribute to pirogom/tightvnc_kor_patch development by creating an account on GitHub.

github.com

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band