KR101446870B1 - 정보보안용 스마트 단말기 - Google Patents

정보보안용 스마트 단말기 Download PDF

Info

Publication number
KR101446870B1
KR101446870B1 KR1020130050559A KR20130050559A KR101446870B1 KR 101446870 B1 KR101446870 B1 KR 101446870B1 KR 1020130050559 A KR1020130050559 A KR 1020130050559A KR 20130050559 A KR20130050559 A KR 20130050559A KR 101446870 B1 KR101446870 B1 KR 101446870B1
Authority
KR
South Korea
Prior art keywords
event
code
keycode
mouse
key
Prior art date
Application number
KR1020130050559A
Other languages
English (en)
Inventor
이경복
홍성호
Original Assignee
(주) 퓨전데이타
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by (주) 퓨전데이타 filed Critical (주) 퓨전데이타
Priority to KR1020130050559A priority Critical patent/KR101446870B1/ko
Application granted granted Critical
Publication of KR101446870B1 publication Critical patent/KR101446870B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/82Protecting input, output or interconnection devices
    • G06F21/83Protecting input, output or interconnection devices input devices, e.g. keyboards, mice or controllers thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/03Arrangements for converting the position or the displacement of a member into a coded form
    • G06F3/033Pointing devices displaced or positioned by the user, e.g. mice, trackballs, pens or joysticks; Accessories therefor
    • G06F3/0354Pointing devices displaced or positioned by the user, e.g. mice, trackballs, pens or joysticks; Accessories therefor with detection of 2D relative movements between the device, or an operating part thereof, and a plane or surface, e.g. 2D mice, trackballs, pens or pucks
    • G06F3/03543Mice or pucks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Human Computer Interaction (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

본 발명은 클라이언트에서 데이터를 입력받아 서버에서 데이터를 처리하여 처리된 결과 화면을 상기 클라이언트에 전송하는 서버-클라이언트 시스템을 구성하는 클라이언트용 단말기에 있어서,
입력장치에서 발생한 이벤트를 감시하고, 수신한 이벤트로부터 키코드를 생성하는 이벤트 포터; 상기 키코드와 변환대상인 스캔코드의 매핑테이블이 저장된 코드맵 저장부; 상기 코드맵 저장부에 저장된 매핑테이블을 참조하여 상기 키코드와 매핑되는 스캔코드를 생성하는 스캔코드 변환부; 및 상기 스캔코드를 서버에 전송하는 통신인터페이스부를 포함하는 정보보안용 스마트 단말기를 제공한다.

Description

정보보안용 스마트 단말기{SMART TERMINAL FOR INFORMATION SECURITY}
본 발명은 정보보안용 스마트 단말기에 관한 것으로, 보다 상세하게는 내부 직원으로부터의 정보 유출 및 네트워크 해킹을 통한 자료 유출을 방지할 수 있는 정보보안용 스마트 단말기에 관한 것이다.
국내 IT 인프라 환경 속에서 많은 변화를 거쳐 이제는 좀 더 역동적이고 접근성이 향상된 형태로 정보를 좀 더 빠르게 습득하고 수집하고 분석하는 기술에 따라 남들 보다 한 발 빠르게 대처하고 투자할 수 있는 기반이 조성되었다.
이러한 환경에서 최근 들어 발생한 사건들을 보면 기업의 정보 유출 또는 개인정보 유출 사건들이 정보를 다루고 있는 시스템에 대한 해킹 또는 그 시스템에 직접 접근하여 이동식 디스크를 통해 유출하는 방법을 비롯한 다양한 위협들이 발생하고 있다.
이렇게 유출된 정보를 통해 개인정보가 악용되어지고 있으며, 또한, 기업 내부 정보 유출의 경우에는 그 기업의 노하우가 담긴 핵심기술을 경쟁 업체로 유출하거나 외국으로 빼돌려 기업입장에서는 엄청난 금액의 손실을 입힐 수 있으며, 국가적으로는 국내 핵심 기술의 해외 유출로 인하여 국가 경쟁력에 막대한 영향을 끼칠 수도 있다.
이러한 정보유출 사고들을 보면 개인정보 유출부터 산업정보 유출까지 다양하게 발생하고 있으며, 이러한 사고 발생 배경을 보면 USB 이동식 저장 장치를 비롯한 다양한 매체와 네트워크를 이용한 것을 알 수 있다. 특히 USB와 같은 저장매체는 사용상의 편리함과 저렴한 가격으로 인해 어디서든 쉽게 찾아 볼 수 있는 장비로서 그 사용량이 갈수록 늘어나고 있다.
이 같은 보안 사고는 80% 이상이 외부인이 아닌 전, 현직 내부 직원에 의한 것이며, 유출방법은 이동식 저장매체나 CD복사, 이메일, 웹하드 들을 이용해 유출한 것으로 밝혀지면서 기업들은 더욱더 내부정보 유출방지 및 데이터 보안에 촉각을 곤두세우고 있다. 또한 이동식 저장매체는 데이터 용량이 커지고 크기가 경량화 됨에 따라 분실 위험에 노출되어 보안상에 이슈로 대두되고 있다.
또한 무선 인터넷의 특성상 공간 및 경계의 제약이 사라지고 있으며, 이동성까지 향상되어 언제 어디서나 외부 인터넷에 접속 가능하며, 이러한 정보는 “워드라이빙(WarDriving)” 도구를 이용하면 쉽게 무선 AP의 중요 정보 수집 및 패킷을 수집 할 수 있어 내부 기업정보 유출 또는 개인정보들이 대량으로 유출 가능성이 존재한다.
본 발명은 상기한 바와 같은 종래기술이 가지는 문제를 해결하기 위해 안출된 것으로, 그 목적은 정보 유출 사례가 증가함에 따라 자원을 사용자 PC에 관리하는 방식에서 벗어나 모든 자원들을 서버에 두어 관리함으로써 불법 유출을 막고, 일관된 보안패치 관리를 통해 특정 바이러스의 위협에 효과적으로 대응하는 SBC(Server Based Computing) 및 VDI(Virtual Desktop Infrastructure) 기술과 제로클라이언트(Zero Client) 방식을 결합하여 보안상의 80%에 해당하는 현, 전직 내부 직원으로부터의 정보 유출 및 네트워크 해킹을 통한 자료 유출을 방지할 수 있는 정보보안용 스마트 단말기를 제공함에 있다.
상기한 바와 같은 본 발명의 기술적 과제는 다음과 같은 수단에 의해 달성되어진다.
(1) 클라이언트에서 데이터를 입력받아 서버에서 데이터를 처리하여 처리된 결과 화면을 상기 클라이언트에 전송하는 서버-클라이언트 시스템을 구성하는 클라이언트용 단말기에 있어서,
입력장치에서 발생한 이벤트를 감시하고, 수신한 이벤트로부터 키코드를 생성하는 이벤트 포터; 상기 키코드와 변환대상인 스캔코드의 매핑테이블이 저장된 코드맵 저장부; 상기 코드맵 저장부에 저장된 매핑테이블을 참조하여 상기 키코드와 매핑되는 스캔코드를 생성하는 스캔코드 변환부; 및 상기 스캔코드를 서버에 전송하는 통신인터페이스부를 포함하는 정보보안용 스마트 단말기.
(2) 제 1항에 있어서,
상기 입력장치는 키보드 혹은 마우스인 것을 특징으로 하는 정보보안용 스마트 단말기.
(3) 제 1항에 있어서,
상기 키보드는 안드로이드 OS용 키코드이고, 상기 스캔코드는 윈도우 OS용 스캔코드인 것을 특징으로 하는 정보보안용 스마트 단말기.
(4) 제 1항에 있어서,
마우스 이벤트가 발생하면 마우스 이벤트 수신부는 키보드 이벤트 수신부에 전달된 키보드 이벤트를 체크하고 이벤트가 발생된 경우에는 상기 키보드 이벤트를 마우스 이벤트 수신부에 전달하여 키보드 이벤트와 마우스 이벤트를 조합하여 처리하는 것을 특징으로 하는 정보보안용 스마트 단말기.
(5) 제 1항에 있어서,
입력장치에서 발생한 이벤트는 큐(Queue)로 대기처리되어지는 것을 특징으로 하는 정보보안용 스마트 단말기.
(6) 제 1항에 있어서,
쉬프트(Shift), 컨트롤(Ctrl), 또는 알트(Alt)키 이벤트가 발생한 경우 마우스 이벤트 수신부에 상기 각 키 이벤트를 전달하는 것을 특징으로 하는 정보보안용 스마트 단말기.
(7) 제 1항에 있어서,
상기 통신인테페이스는 RDP 가상채널을 통해 스캔코드를 전송하는 것을 특징으로 하는 정보보안용 스마트 단말기.
상기와 같은 본 발명에 따르면, 내부 직원으로부터의 정보 유출 및 네트워크 해킹을 통한 자료 유출을 방지할 수 있다.
도 1은 본 발명에 따른 정보보안용 스마트 단말기의 구성도이다.
일종의 제로 클라이언트(Zero Client)에 해당하는 본 발명 스마트 단말기를 이용하여 서버기반컴퓨팅(SBC) 기술을 연동하기 위해서는 외부 입력 장치의 지원을 통해 마치 PC를 사용하는 것과 같은 인터페이스를 제공해야 한다.
이를 위해 본 발명에 따른 정보보안용 스마트 단말기(100)는 도 1에 도시한 바와 같이, 입력장치(10,20)에서 발생한 이벤트를 감시하고, 수신한 이벤트로부터 키코드를 생성하는 이벤트 포터(30,40); 상기 키코드와 변환대상인 스캔코드의 매핑테이블이 저장된 코드맵 저장부(50); 상기 코드맵 저장부에 저장된 매핑테이블을 참조하여 상기 키코드와 매핑되는 스캔코드를 생성하는 스캔코드 변환부(60); 및 상기 스캔코드를 서버에 전송하는 통신인터페이스부(70)를 포함한다.
이하, 본 발명의 실시예로써, 입력장치가 키보드(10)인 경우와 마우스(20)인 경우로 구분하여 예들 들어 설명하기로 한다.
1. 키보드 인터페이스
키보드(10)의 각 키들은 스위치와 같은 것으로 스위치 중 하나를 누르면 프레스(Press) 이벤트가 활성화되고 누른 키를 떼면 릴리즈(Release) 이벤트가 활성화된다. 이러한 방식으로 키보드는 활성화에 대한 노트를 작성하고, 키보드 내의 작은 버퍼에 저장한 후 RDP를 통해 버퍼에 기록된 Note들은 키보드에 연결된 컴퓨터에 전달하여 전달 받은 키에 대한 적절한 액션(Action)을 취하게 된다.
키보드(10)의 각 키들은 프레스 되거나 릴리즈될 때 고유의 코드를 가지는 데 이 코드를 키코드(Key Code)라 한다. 릴리즈 키코드는 프레스 키코드에 128(80 Hex)을 더한 키코드를 가지게 된다. 이러한 키코드는 각 입력장치의 이벤트 포터(30,40)에서 이벤트를 감시하여, 프레스 혹은 릴리즈된 키에 대응되는 키코드를 생성한다.
본 발명에서는 리눅스 오에스(Linux OS)를 사용하는 안드로이드(Android) 기반의 어플리케이션이 SBC 서버의 윈도우(Window)와 연동하는 프로세스로 리눅스 OS 기반의 키보드의 스캔코드와 윈도우 기반의 스캔코드가 다르기 때문에 먼저 리눅스 OS 기반의 안드로이드에서 키보드를 인식하고 스캔코드를 생성하는 인터페이스 부분을 먼저 살펴보기로 한다.
안드로이드는 특별한 기능 키보드(volume and power), QWERTY 키보드, PC-스타일의 외부 키보드 등 다양한 키보드를 지원하고 있다. 안드로이드는 입력장치를 키보드로 인식하게 되면, 시스템은 입력 장치 설정파일(input device configuration file)과 키보드에 대한 키보드 레이아웃(Keyboard Layout)을 로딩하고 장치에 대한 부가적인 특징들을 결정하게 되는데 요약하면 아래와 같이 장치를 인식하게 된다.
예를 들어,·입력장치가 KEYCODE_Q와 매핑되는 키를 가지고 있다면 연결된 장치는 알파벳 키보드로 인식하게 되고, 입력장치가 KEYCODE_DPAD_UP, KEYCODE_DPAD_DOWN, KEYCODE_DPAD_LEFT, KEYCODE_DPAD_RIGHT, KEYCODE_DPAD_CENTER로 매핑되는 키를 가지고 있다면 연결된 장치는 방향키(Directional Keypad)로 인식하게 되며, 입력장치가 KEYCODE_BUTTON_A 또는 게임 패드로 매핑되는 키를 가지고 있다면 게임패드로 인식하게 된다.
아래 표 1은 리눅스 OS에서 키보드 이벤트를 받아서 안드로이드의 뷰(View)에 이벤트를 전달하기까지의 이벤트 흐름을 설명하고 있다. 즉, 리눅스 OS는 키보드로부터 각 키에 대한 키코드를 받아 이에 키보드의 코드맵을 사용하여 안드로이드의 키코드(Key Code)로 변환되는 과정을 설명하고 있다.
순서 리눅스 OS에서 키보드 인식 및 처리 순서
1 EventHub는 evdev 드라이버로부터 이벤트를 받고 Linux 키 코드(Scan Code)를 키보드의 키 레이아웃 맵(keyboard's key layout map)을 사용하는 키 코드(Key Code)로 매핑 한다.
2 InputReader는 Row Event를 처리하고 Meta Key을 상태를 갱신한다. 예를 들어 Sheft 키가 눌러지거나 해제되면 InputReader는 META_SHIFT_LEFT_ON 과 META_SHIFT_ON 비트를 상태에 맞게 설정하거나 해제한다.
3 InputReader는 키 이벤트에 대한 관한 사항을 InputDispatcher에 전달한다.
4 nputDispatcher는 WindowManagerPolicy.interceptKeyBeforeQueueing을 호출하여 키 이벤트로 무엇을 해야 하는지를 WindowManagerPolicy에게 요청한다.
5 만약 InputFilter가 현재 사용 중이면, InputDispatcher는 발생된 이벤트 키를 재 처리하거나 전송할 수 있게 한다.
6 InputDispatcher는 Dispatch 스레드에서 처리할 수 있도록 키를 큐에 저장한다.
7 InputDispatcher가 키를 큐에서 가져올 때, inputDispatcher는 WindowManagerPolicy.interceptKeyBeforeDispatching을 호출하여 WindowManagerPolicy에게 키 이벤트를 인터프리터하기 위해 두 번째 기회를 제공한다. 이 메소드는 시스템 단축키 또는 다른 기능들을 처리한다.
8 InputDispatcher는 키 이벤트 타겟을 식별하고 타겟이 사용가능할 때 까지 기다리게 된다. InputDispatcher는 이벤트 키를 어플리케이션에 전달한다.
9 프로그램 내부적으로, 키 이벤트는 pre-IME key 전달을 목적으로 View 계층에서 포커스된 뷰로 전달된다.
10 키 이벤트가 pre-IME dispatch에서 처리되지 않고 IME에서 사용 된다면, 키 이벤트는 IME에 전달된다.
11 만약 IME에서 처리되지 않는다면, 키 이벤트는 standard key 전달을 목적으로 뷰 계층에서 포커스된 뷰로 전달된다.
12 어플리케이션은 키 이벤트가 처리 되었는지 대해서 InputDispatcher에 결과를 보고한다. 만약 이벤트가 소비되지 않는다면, InputDispatcher는 “fallback" behavior를 적용하기 위해 WindowManagerPolicy.dispatchUnhandleKeyKey를 호출한다. fallback action을 기반으로 event dispatch cycle은 다른 키 코드를 사용하여 다시 시작하게 된다.
위에서 기술한 키코드는 안드로이드에서 사용하는 키코드이므로 본 발명의 단말기가 연결하려고 하는 윈도우 OS 기반의 SBC 시스템과 연결하기 위해서는 상기 키 코드를 바로 사용할 수 없고, 윈도우에서 인식할 수 있는 윈도우의 스캔코드(Scan Code)로 변환해서 SBC 시스템에 전달해야 한다.
안드로이드 키코드에 대한 스캔코드 변환
위에서 언급한 것과 같이 리눅스에서 인식하는 키보드의 스캔코드와 윈도우에서 인식하는 키보드의 스캔코드가 다르므로 본 발명의 단말기에 연결된 키보드의 스캔코드 변환을 처리하기 위해 키코드 변환 클래스인 스캔코드 변환부(60)를 구성한다.
아래 표 2는 키보드의 키를 리눅스에서 인식하는 키코드와 윈도우에서 인식하는 스캔코드를 비교한 것이다.
리눅스와 윈도우의 스캔코드 비교
키보드 키 안드로이드 키코드 리눅스 윈도우
A KEYCODE_A 0X30 0X1E
B KEYCODE_B 0X48 0X30
C KEYCODE_C 0X46 0X2E
F1 KEYCODE_F1 0X59 0X3B
F2 KEYCODE_F2 0X60 0X3C
Shift KEYCODE_SHIFT_LEFT 0X42 0X56
CTRL KEYCODE_CTRL_LEFT 0X29 0X1D
ALT KEYCODE_ALT_LEFT 0X56 0X38
Enter KEYCODE_ENTER 0X20 0X1C
상기 표 2에 나타낸 바와 같이, 안드로이드에서 인식하는 키코드와 윈도우에서 인식하는 스캔코드가 상이하므로, 이러한 문제를 해결하기 위해 리눅스에서 인식하는 키보드의 키를 매핑하는 코드맵 파일을 코드맵 저장부(50)에 구성하고 시스템에서 활용하여야 한다.
코드맵의 예시
번호 F 키 코드 윈도우
스캔코드
안드로이드
키코드
1 1 4 0X10 0 KEYCODE_ESC
2 1 131 0x3B 0 KEYCODE_F1
3 1 132 0X3C 0 KEYCODE_F2
4 1 133 0X3D 0 KEYCODE_F3
5 1 134 0X3E 0 KEYCODE_F4
6 1 135 0X3F 0 KEYCODE_F5
7 1 136 0X40 0 KEYCODE_F6
8 1 137 0X41 0 KEYCODE_F7
9 1 138 0X42 0 KEYCODE_F8
10 1 139 0X43 0 KEYCODE_F9
11 1 140 0X44 0 KEYCODE_F10
12 1 141 0X57 0 KEYCODE_F11
13 1 142 0X58 0 KEYCODE_F12
14 1 120 0X37 0 KEYCODE_PRTSC
15 1 116 0X46 0 KEYCODE_SCROLL_LOCK
16 1 121 0X45 0 KEYCODE_PAUS
17 1 68 0x29 0 KEYCODE_GRAVE
18 1 8 0x02 0 KEYCODE_1
19 1 9 0x03 0 KEYCODE_2
20 1 10 0X04 0 KEYCODE_3
21 1 11 0X05 0 KEYCODE_4
22 1 12 0X06 0 KEYCODE_5
23 1 13 0X07 0 KEYCODE_6
24 1 14 0X08 0 KEYCODE_7
25 1 15 0X09 0 KEYCODE_8
26 1 16 0XA0 0 KEYCODE_9
27 1 7 0XB0 0 KEYCODE_0
28 1 69 0X0C 0 KEYCODE_MINUS
29 1 70 0X0D 0 KEYCODE_EQUALS
30 1 73 0X2B 0 KEYCODE_BACKSLASH
31 1 67 0X0E 0 KEYCODE_DEL
32 1 61 0X0F 0 KEYCODE_TAB
33 1 45 0X10 0 KEYCODE_Q
34 1 51 0X11 0 KEYCODE_W
35 1 33 0X12 0 KEYCODE_E
36 1 46 0X13 0 KEYCODE_R
37 1 48 0X14 0 KEYCODE_T
38 1 53 0X15 0 KEYCODE_Y
39 1 49 0X16 0 KEYCODE_U
40 1 37 0X17 0 KEYCODE_I
41 1 43 0X18 0 KEYCODE_O
42 1 44 0X19 0 KEYCODE_P
43 1 71 0X1A 0 KEYCODE_LEFT_BRACKET
44 1 72 0X1B 0 KEYCODE_RIGHT_BRACKET
45 1 115 0X3A 0 KEYCODE_CAPS_LOCK
46 1 29 0X1E 0 KEYCODE_A
47 1 47 0X1F 0 KEYCODE_S
48 1 32 0X20 0 KEYCODE_D
49 1 34 0X21 0 KEYCODE_F
50 1 35 0X22 0 KEYCODE_G
51 1 36 0X23 0 KEYCODE_H
52 1 38 0X24 0 KEYCODE_J
53 1 39 0X25 0 KEYCODE_K
54 1 40 0X26 0 KEYCODE_L
55 1 74 0X27 0 KEYCODE_SEMICOLON
56 1 75 0X28 0 KEYCODE_APOSTROPHE
57 1 66 0X1C 0 KEYCODE_ENTER
58 1 59 0X2A 0 KEYCODE_SHIFT_LEFT
59 1 54 0X2C 0 KEYCODE_Z
60 1 52 0X2D 0 KEYCODE_X
61 1 31 0X2E 0 KEYCODE_C
62 1 50 0X2F 0 KEYCODE_V
63 1 30 0X30 0 KEYCODE_B
64 1 42 0x31 0 KEYCODE_N
65 1 41 0x32 0 KEYCODE_M
66 1 55 0x33 0 KEYCODE_COMMA
67 1 56 0X34 0 KEYCODE_PERIOD
68 1 76 0X35 0 KEYCODE_SLASH
69 1 60 0X36 0 KEYCODE_SHIFT_RIGHT
70 1 113 0X1D 0 KEYCODE_CTRL_LEFT
71 1 117 0X5B 0 KEYCODE_META_LEFT
72 1 57 0X38 0 KEYCODE_ALT_LEFT
73 1 62 0X39 0 KEYCODE_SPACE
74 1 58 0X38 0 KEYCODE_ALT_RIGHT
75 1 118 0X5C 0 KEYCODE_META_RIGHT
76 1 82 0X5D 0 KEYCODE_MENU
77 1 114 0X1D 0 KEYCODE_CTRL_RIGHT
78 1 124 0X52 0 KEYCODE_INSERT
79 1 122 0X53 0 KEYCODE_MOVE_HOME
80 1 92 0X49 0 KEYCODE_PAGE_UP
81 1 112 0X53 0 KEYCODE_FORWARD_DEL
82 1 123 0X4F 0 KEYCODE_MOVE_END
83 1 93 0X51 0 KEYCODE_PAGE_DOWN
84 1 19 0X48 0 KEYCODE_DPAD_UP
85 1 21 0X4B 0 KEYCODE_DPAD_LEFT
86 1 20 0X50 0 KEYCODE_DPAD_DOWN
87 1 22 0X4D 0 KEYCODE_DPAD_RIGHT
88 1 143 0X45 0 KEYCODE_NUM_LOCK
89 1 154 0X35 0 KEYCODE_NUMPAD_DIVIDE
90 1 155 0X37 0 KEYCODE_NUMPAD_MULTIPLY
91 1 156 0X4A 0 KEYCODE_NUMPAD_SUBTRACT
92 1 151 0X47 0 KEYCODE_NUMPAD_HOME
93 1 151 0X08 9 KEYCODE_NUMPAD_7
94 1 152 0X48 0 KEYCODE_NUMPAD_UP
95 1 152 0X09 9 KEYCODE_NUMPAD_8
96 1 153 0X49 0 KEYCODE_NUMPAD_PGUP
97 1 153 0X0A 9 KEYCODE_NUMPAD_9
98 1 148 0X4B 0 KEYCODE_NUMPAD_LEFT
99 1 148 0X05 9 KEYCODE_NUMPAD_4
100 1 149 0X06 9 KEYCODE_NUMPAD_5
101 1 150 0X4D 0 KEYCODE_NUMPAD_RIGHT
102 1 150 0X07 9 KEYCODE_NUMPAD_6
103 1 145 0X4F 0 KEYCODE_NUMPAD_END
104 1 145 0X02 9 KEYCODE_NUMPAD_1
105 1 146 0X50 0 KEYCODE_NUMPAD_DN
106 1 146 0X03 9 KEYCODE_NUMPAD_2
107 1 147 0X51 0 KEYCODE_NUMPAD_PGDN
108 1 147 0X04 9 KEYCODE_NUMPAD_3
109 1 144 0X52 0 KEYCODE_NUMPAD_INS
110 1 144 0X0B 9 KEYCODE_NUMPAD_0
112 1 158 0X53 0 KEYCODE_NUMPAD_DEL
123 1 158 0X34 9 KEYCODE_NUMPAD_DOT
124 1 157 0X4E 0 KEYCODE_NUMPAD_ADD
125 1 160 0X1C 0 KEYCODE_NUMPAD_ENTER
키보드(10)로부터 발생한 이벤트는 “onKeyDown”함수로 이벤트가 전달되며 아래 코드와 같이 쉬프트(Shit), 컨트롤(Ctrl), 알트(Alt) 키를 제외한 다른 키들이 발생하면 이벤트 키 버퍼에 키 이벤트를 보관하게 된다. 이벤트 버퍼에 저장된 이벤트들은 서버에 전달된다.
이때, 키보드에서 입력하는 키의 속도와 서버로 전송하여 처리하는 속도가 크게 다르므로 키보드에 입력하는 키 이벤트들은 키 이벤트 큐에 데이터를 저장하고 순차적으로 이벤트를 처리하도록 한다.
쉬프트(Shit), 컨트롤(Ctrl), 알트(Alt) 키들을 이벤트 버퍼에 저장하지 않는 이유는 각 키보드의 키에 대한 정보를 가지고 있는 키이벤트(KeyEvent) 클래스에는 각 키 이벤트가 발생한 시점에 쉬프트(Shit), 컨트롤(Ctrl), 알트(Alt)에 프레스 및 릴리즈 정보가 포함되어 있기 때문에 별도로 조합키에 대한 정보를 보관할 필요가 없기 때문이다. 예를 들어 쉬프트 키에 대한 상태 정보는 키이벤트(keyEvent) 클래스의 isShiftPressed() 함수를 호출하면 True/False 정보를 반환하는데 True이면 쉬프트키가 눌려졌다는 것을 의미하고, False를 반환 하면 해제되었다는 것을 의미하기 때문에 그때 당시의 조합키 상태정보를 알 수 있다. 컨트롤 및 알트 키에 대한 정보도 동일하게 적용할 수 있다.
실제 키보드 인터페이스의 경우 이벤트의 처리과정은 다음과 같은 과정을 통해 구현할 수 있다.
(가) 키 이벤트 큐(Key Event Queue)에서 맨 앞에 등록된 이벤트를 가져온다.
(나) 코드맵을 이용하여 상기 이벤트의 키코드에 매핑하는 스캔코드를 구한다.
(다) 조합키(쉬프트, 컨트롤, 알트키)에 대한 키 상태를 점검하여 눌려진 상태 이면 조합키에 대한 눌림 상태 코드를 서버에 전달한다.
(라) 상기 키 코드에 대한 스캔코드를 서버에 전달한다.
(마) 조합키(쉬프트, 컨트롤, 알트키)에 대한 키 상태를 점검하여 눌린상태이면 조합키에 대한 눌린 상태 코드를 서버에 전달한다.
(바) (가)의 처리 순서로 이동하여 데이터를 처리한다.
상기와 같은 프로세스를 기반으로 키 이벤트 큐에 저장된 자료를 처리할 수 있고, 위와 같이 변환된 스캔코드는 통신인터페이스부(70)을 이용하여 RDP(Remote Desktop Protocol) 가상채널을 통해 서버(200)에 전달되어 키보드의 이벤트에 대한 액션을 처리하게 된다.
상기와 같이, 키보드(10)에서 키 이벤트가 발생하여 키보드 이벤트 포터(30)로 이벤트가 전달되어 발생된 당해 키이벤트의 키코드에 매핑되는 코드맵에 등록된 스캔코드를 구한 후, 서버(200)에 전달하게 된다. 이 때 전술한 바와 같이 조합키(쉬프트, 컨트롤, 알트)는 마우스와 연동이 될 수 있는 키이기 때문에 마우스이벤트 수신부에 이벤트를 전달하여야 한다.
본 발명에 따른 단말기(100)는 로컬자원을 사용하는 시스템이 아니라 원격지의 서버자원을 사용하기 때문에 로컬에서 발생하는 이벤트를 서버(200)에 보내는 과정에서 병목현상(Bottle neck)이 발생할 수 있으므로 키보드에 전달된 키 이벤트 들은 발생 즉시 RDP 가상채널을 통해 서버에 전송하지 않고 일단 큐(Queue)에 임시 저장한 후 통신인터페이스부(70)에 의해 RDP 가상채널을 통해 서버(200)에 전달되어진다.
2. 마우스 인터페이스
안드로이드에서 마우스 이벤트를 처리하는 클래스는 “모션이벤트(MotionEvent)”로 마우스, 펜, 핑거, 트랙볼과 같은 장치의 움직임을 처리하는데 사용된다. 이러한 모션이벤트 클래스는 각 장치의 타입에 따라 절대적인 또는 상대적인 움직임과 다른 데이터 정보를 포함하고, 액션코드(Action Code)와 축의 값 형태로 움직임을 처리하게 된다.
액션코드는 마우스 포인터로서 마우스(20)가 아래로 이동하거나 위로 이동하는 것과 같은 이벤트가 발생할 때 상태의 변경사항을 기술하고 축의 값은 X축과 Y축의 위치와 다른 움직임의 속성들을 기술하게 된다.
예를 들어 사용자가 화면을 터치할 때, 시스템 드라이버는 “ACTION_DOWN” 이라는 액션코드와 터치된 X, Y 좌표와 접촉된 영역의 크기, 방향 및 압력에 대한 정보를 포함하는 축 값의 집합을 터치이벤트(Touch Event)에 전달하게 된다.
각 포인터들은 첫 번째 행동(ACTION_DOWN, ACTION_POINTER_DOWN)을 할 때 할당된 ID값을 가지게 되고, 이 값은 행동을 종료(ACTION_UP, ACTION_POINTER_UP)하거나 취소(ACTION_CANCEL)되었을 때까지 값을 유지하게 된다. 마우스와 스타일러스 버튼은 getButtonState() 함수를 이용하여 버튼의 상태를 알 수 있다.
안드로이드에서 외부 인터페이스인 마우스(20)는 안드로이드의 터치이벤트와 같은 방식으로 처리된다. 하지만 마우스의 일부기능은 터치이벤트의 방식으로 처리할 수가 없어 “제네릭모션이벤트(Generic Motion Event)”를 사용하여 터치이벤트의 단점을 보완하여 본 발명에 적용할 수 있다.
본 발명에서는 마우스 이벤트를 처리하기 위해 아래 표 4와 같이 터치이벤트와 제네릭모션이벤트에서 처리하는 기능을 분리하여 정의할 수 있다.
마우스 버튼별 처리 이벤트
터치이벤트 제네릭모션이벤트
마우스다운 좌측 버튼 우측 버튼
마우스업 좌측 버튼
마우스이동 드레그 앤 드랍 커스이동
스크롤 스크롤
마우스 이벤트를 처리하기 위해서 터치이벤트와 제네릭모션이벤트로 분리하여 처리하는 이유는 터치이벤트는 안드로이드에서 제공하는 기본 입력 장치로서 마우스를 제공하지 않기 때문에 터치이벤트를 사용하고, 터치이벤트가 제공하지 않는 마우스 우측 버튼의 클릭과 같은 이벤트들은 안드로이드가 외부 장치를 지원하기 위해 제공하는 제네릭모션이벤트를 결합하여 상호 보완적으로 사용하는 것에 있다.
온터치이벤트 ( onTouchEvent ) 처리
안드로이드에서 제공하는 기본 입력 장치인 스크린터치에 터치이벤트가 뷰(View)에 전달될 때 호출되는 함수로, 이벤트가 뷰에 전달되기 전에 처리할 수 있는 기능을 제공하는 함수로서 아래 표 5와 같은 프로토타입(Prototype)을 제공한다.
온터치 함수 프로토타입
Android.View.
Syntax
public boolean onTouch(View view, MotioneEvent event)
Parameter
View
MotionEvent
Mouse, Pen, Finger, Trackball 이벤트 움직임에 대한 정보
Return
이 함수에서 처리하는 이벤트는 위에서 언급한 것과 같이 마우스 좌측 버튼 다운 및 업, 드레그 앤 드랍과 같은 이벤트를 처리하게 된다.
(1) 마우스 좌측 클릭 및 더블클릭 이벤트
마우스 인터페이스에서 가장 많이 사용하는 이벤트로 아래 표 6 및 표 7과 같은 알고리즘에 의해 처리되며, 좌측 클릭과 더블클릭으로 구분된다.
좌측 클릭 이벤트 처리 알고리즘

@override
public boolean onTouch(View v, MotionEvent event)
switch(event.getAction() & MotionEvent.ACTION_MASK)
case MotionEvent.ACTION_DOWN:

// 마우스 왼쪽버튼 처리
break;
:
:
:
default:
break;
//end switch
//end function
더블 클릭 이벤트 처리 알고리즘

private long lastTouchTime = -1;
@override
public boolean onTouch(View v, MotionEvent event)
switch(event.getAction() & MotionEvent.ACTION_MASK)
case MotionEvent.ACTION_DOWN:

long thisTime = System.currentTimeMills();
:
:
if(thisTime - lastTouchTime < 250)

// 마우스 더블클릭에 대한 처리
lsstTouchTime = -1;

else

lastTouchTime = thisTime;

//end if
break;
:
:
default:
break;
//end switch
//end function
마우스 더블클릭은 인터페이스에서 제공하지 않는 이벤트로 클릭은 연속적으로 두 번 클릭했을 때 각 클릭의 시간차를 구하여 일정한 시간차가 발생하는 경우에는 더블클릭으로 처리한다.
마우스 클릭 이벤트는 액션다운(Action Down)과 업(Up)을 모두 처리 하도록 처리된다. 예를 들어, 바탕화면의 아이콘을 선택하는 경우는 마우스 다운과 업 이벤트를 모두 필요로 하는 이벤트이므로 액션다운이 발생하고 바로 액션업 이벤트로 보내 아이콘을 선택하는 효과를 가지도록 할 수 있다.
(2) 마우스 업 이벤트
마우스 버튼이 업(릴리즈)될 때 발생하는 이벤트로 마우스 클릭 이벤트 완료와 같은 효과를 가지게 한다. 드레드 앤 드랍 같은 경우에는 액션 다운 이벤트, 액션무브 이벤트가 순차적으로 발생하고 마지막에 마우스 버튼이 릴리즈 되는 경우에 이전의 이벤트 완료와 같은 기능을 제공한다(표 8).
마우스 업 이벤트 처리 알고리즘

@override
public boolean onTouch(View v, MotionEvent event)
switch(event.getAction() & MotionEvent.ACTION_MASK)
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:

// 마우스 Action 완료 처리...
break;
:
:
:
default:
break;
//end switch
//end function
(3) 드레그 앤 드랍 이벤트
화면을 이동하거나 범위를 설정할 때 지원하는 기능으로 마우스 액션다운, 액션무브, 액션업 이벤트를 조합해서 처리하는 기능이다. 액션다운 이벤트가 발생하면 마우스 눌림 정보를 설정하고, 액션업 이벤트가 발생하면 액션다운 이벤트 눌림 정보를 해제한다. 액션무브 이벤트가 발생하면 액션다운 눌림 정보를 체크하여 눌림이 설정된 상태이면 드레그 앤 드랍을 처리한다(표 9).
드레그 앤 드랍 이벤트 처리 알고리즘
@override
public boolean onTouch(View v, MotionEvent event)
switch(event.getAction() & MotionEvent.ACTION_MASK)
case MotionEvent.ACTION_DOWN:

// 마우스 눌림 설정
m_IsLeftMouseOn = true;
m_isBeingMove = false;
:
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
// 마우스 눌림 해제
m_IsLeftMouseOn = false;
m_isBeingMove = false;.
break;
case MotionEvent.ACTION_MOVE:
if(m_IsMouseOn)
// 마우스 드래그 액션 설정
// 마우스 포인터 이동
// 마우스 이동 메시지 전달..
//end if
default:
break;
//end switch
//end function
온제네릭모션 ( onGenericMotion ) 처리
안드로이드의 기본 입력 장치는 터치이기 때문에 마우스의 기본적인 이벤트 처리는 온터치(onTouch) 이벤트 함수에서는 처리를 하지 못하므로 외부장치를 처리 수 있도록 지원하는 함수로 아래와 같은 프로토타입(Prototype)을 제공한다(표 10).
온제네릭모션 함수 프로토타입
Android.Views.View.OnGenericMotionEvent Method
Syntax
public virtual bool OnGenericMotionEvent(MotionEvent e)
Parameters
e The generic motion event being processed
returns
true if the event was handled, false otherwise
Remarks
Implements this method to handle generic motion events.
Example:
public boolean onGenericMotionEvent(MotionEvent event)
if((event.getSource() & InputDevice.SOURCE_CLASS_JOYSTIC) != 0)
if(event.getAction() == MotionEvent.ACTION_MOVE)
// process the joystic movement...
return true;
//end if
//end if

if((event.getSource() & InputDevice.SOURCE_MOUSE) != 0)
if(event.getButtonState() == InputDevice.SOURCE_CLASS_POSITION)
// process the Right Button Click ..
return true;
//end if
//end if
//end function
온제네릭모션(onGenericMotion) 이벤트 함수는 터치 이벤트 함수에서 지원하지 못하는 마우스 우측 클릭, 마우스 이동, 마우스 스크롤과 같은 기능을 제공할 수 있는 이벤트 함수로 외부장치의 기본적인 이벤트 정보를 제공한다.
안드로이드는 외부장치로 마우스 외에 펜, 핑거, 트랙볼, 조이스틱과 같은 장치를 제공하기 때문에 이벤트를 발생한 장치가 마우스인지를 검사해야 한다. 마우스 같은 경우 모션이벤트 클래스의 getSource() 함수를 통해 발생한 이벤트가 마우스 인지를 검사하게 된다(표 11).
@override
public boolean onGenericMotion(View v, MotionEvent event)
if(event.getSource == InputDevice.SOURCE_MOUSE)

// 이벤트가 마우스로부터 발생한 경우
//end if
//end function
(1) 마우스 우측 클릭
마우스 우측에 대한 이벤트는 모션이벤트 클래스의 getButtonState() 함수를 사용하여 이벤트를 처리 할 수 있으며, 마우스 우측 버튼 클릭 처리 후 반환 값을 true로 처리하여 하위 클래스로 이벤트를 전달하지 않는다(표 12).
@override
public boolean onGenericMotion(View v, MotionEvent event)
if(event.getSource == InputDevice.SOURCE_MOUSE)
switch(event.getButtonState())
case InputDevice.SOURCE_CLASS_POSITION:
// 오른쪽 버튼클릭에 대한 처리
return true;
default:
break;
//end switch

//end if

return false;

//end function
(2) 마우스 이동
외부 장치인 마우스가 이동하면 서버 화면에서도 마우스도 같이 이동하도록 처리해야 하는데 안드로이드의 기본 입력 장치인 터치 이벤트는 화면의 터치를 이용하여 터치 이벤트로 처리하기 때문에 처리가 불가능하고 오제네릭모션(onGenericMotion) 이벤트 함수의 모션이벤트 클래스의 getAction() 함수를 통해 이벤트를 처리할 수 있다(표 13).
@override
public boolean onGenericMotion(View v, MotionEvent event)
if(event.getSource == InputDevice.SOURCE_MOUSE)
switch(event.getAction())
case MotionEvent.ACTION_HOVER_MOVE:
// 마우스 좌표 및 action code를 처리한다.
return true;
default:
break;
//end switch

//end if

return false;

//end function
(3) 마우스 스크롤
화면의 스크롤바를 상하로 움직이는 기능으로 모션이벤트 클래스의 getAction 함수를 사용하여 마우스 스크롤을 감지할 수 있다. 스크롤은 스크롤다운과 스크롤업을 구분해야 한다(표 14).
@override
public boolean onGenericMotion(View v, MotionEvent event)
if(event.getSource == InputDevice.SOURCE_MOUSE)
switch(event.getAction())
case MotionEvent.ACTION_SCROLL:
if(event.getAxisValue(MotionEvent.AXIS_VSCROLL) < 0.0f)
// Scroll Down
else
// Scroll UP
//end if
return true;
default:
break;
//end switch

//end if

return false;

//end function
3. 스캔코드 변환부
스캔코드 변환부(60)는 리눅스 OS에서 발생한 키 이벤트를 윈도우 OS가 인식할 수 있는 스캔코드로 변환해 주는 역할을 하는 “KeyboardMaper” 클래스로 구현되며, 표 3에서 정의한 코드맵 테이블의 자료를 활용하게 된다.
먼저, 키보드의 각 키들은 “keyboardDef” 클래스의 타입으로 키보드 매퍼(KeyboardMaper) 클래스의 하쉬테이블(Hashtable) 타입의 “m_keyboardInfo” 변수에 보관하게 된다.
“m_keyboardInfo” 변수를 하쉬테이블 타입으로 구성한 이유는 115개의 각 코드에 대한 코드 값을 빠르게 찾기 위해서 키 값으로 안드로이드 키코드+Modifier(0, 9)를 조합하여 키 값으로 구성하게 하여 중복을 피하면서 빠르게 검색할 수 있도록 한다.
안드로이드 키보드의 키코드와 윈도우의 스캔코드에 대한 매핑 정보를 정의한 코드맵 파일은 아래 표와 같이 각 코드별로 4개의 정보로 구성되어 있다.
항목 설명
Flag 1(사용), 0(미사용) 1 0
Key Code 키보드에 대한 안드로이드 키 코드 151 151
Scan Code Window 키에 대한 스캔코드 0x47 0X08
Modifier 0(일반코드), 9 (Number Key Pad) 0 9
Character 코드에 대한 설명 KEYCODE_NUMPAD_HOE KEYCODE_NUMPAD_7
위와 같은 포맷으로 구성된 코드맵 파일은 “KeyboardMapper” 클래스를 사용하여 자료를 구성하게 된다.
상기와 같이, 마우스(20)에서 이벤트가 발생하면 마우스 이벤트 포터(40)는 키보드 이벤트 포터(30)에 전달된 키보드 이벤트 정보를 체크하고 이벤트가 발생되어 있는 경우에는 키보드 이벤트와 마우스 이벤트를 조합하여 처리하게 된다. 예를 들어 윈도우에서 화면 확대 하는 방법으로 키보드에서는 컨트롤키와 +(플러스) 키를 사용하여 처리할 수도 있지만, 마우스로 처리하는 경우에는 컨트롤(CTRL) 키와 마우스 스크롤 업(UP)을 조합하여 처리할 수 있다. 이러한 키보드 이벤트가 발생하는 경우에 마우스 이벤트 포터(40)로 키 이벤트를 전달하여야 하는 것이다.
4. 통신인터페이스부
이상과 같이, 본 발명의 단말기는 외부입력장치(10,20)를 이용하여 입력된 정보를 서버(200)에 전송하기 위해 RDP 가상채널을 이용한다.
이를 위해 본 발명의 단말기에서 통신인터페이스부(70)는 키보드의 이벤트를 처리하는 sendKeyEvent() 인터페이스와 마우스 이벤트를 처리하는 sendControlAction() 인터페이스를 지원할 수 있도록 한다.
예를 들어, 키보드의 좌측 쉬프트 키보드를 처리하는 경우, 표 16에 나타낸 바와 같이 이벤트를 서버(200)에 전달할 수 있다. 또, 마우스 이벤트 처리(DOWN, DRAG, UP, RIGHT CLICK)는 표 17 내지 표 21에 나타낸 바와 같이 sendControlAction() 인터페이스를 이용하여 처리할 수 있다.

public static final int SCANCODE_CHAR_LSHIFT = 0x2a;
// 키보드 왼쪽 쉬프트 키 누름 이벤트
sendKeyEvent(KeyboardMapper.SCANCODE_CHAR_LSHIFT, true);

// 키보드 왼쪽 쉬프트 키 띰 이벤트
sendKeyEvent(KeyboardMapper.SCANCODE_CHAR_LSHIFT, false);

public static final int MOUSE_FLAG_DOWN = 0x8000;
public static final int MOUSE_FLAG_MOVE = 0x0800
public static final int MOUSE_FLAG_BUTTON1 = 0x1000
public static final int MOUSE_FLAG_BUTTON2 = 0x2000
마우스 좌측 버튼 클릭다운

public void sendContrlAction(int actionType, MotionEvent e)
switch(actionType)
case KeyDefinition.MOUSE_CONTROL_DOWN:
rdp.sendInput(getTime(),
KeyDefinition.RDP_INPUT_MOUSE,
KeyDefinition.MOUSE_FLAG_BUTTON1
|| KeyDefinition.MOUSE_FLAG_DOWN,
getX(mouseX),
getY(mouseY));
break;
default:
break;
//end switch
//end function
마우스 버튼 클릭 업

public void sendContrlAction(int actionType, MotionEvent e)
switch(actionType)
case KeyDefinition.MOUSE_CONTROL_UP:
rdp.sendInput(getTime(),
KeyDefinition.RDP_INPUT_MOUSE,
KeyDefinition.MOUSE_FLAG_BUTTON1,
getX(mouseX),
getY(mouseY));
break;
default:
break;
//end switch
//end function
마우스 드레그 앤 드랍

public void sendContrlAction(int actionType, MotionEvent e)
switch(actionType)
case KeyDefinition.MOUSE_CONTROL_UP:
rdp.sendInput(getTime(),
KeyDefinition.RDP_INPUT_MOUSE,
KeyDefinition.MOUSE_FLAG_MOVE,
getX(mouseX),
getY(mouseY));
break;
default:
break;
//end switch
//end function
마우스 우측 버튼 클릭

public void sendContrlAction(int actionType, MotionEvent e)
switch(actionType)
case KeyDefinition.MOUSE_CONTROL_UP:
rdp.sendInput(getTime(),
KeyDefinition.RDP_INPUT_MOUSE,
KeyDefinition.MOUSE_FLAG_BUTTON2
|| KeyDefinition.MOUSE_FLAG_DOWN,
getX(mouseX),
getY(mouseY));

rdp.sendInput(getTime(),
KeyDefinition.RDP_INPUT_MOUSE,
KeyDefinition.MOUSE_FLAG_BUTTON2,
getX(mouseX),
getY(mouseY));
break;
default:
break;
//end switch
//end function
상기와 같은 코드변환 및 데이터 처리과정을 통해 서버(200)에서 수신하여 서버자원을 이용하여 프로세싱된 결과는 네트워크를 통해 디스플레이장치(300)에 전송되어 사용자에게 표시된다.
상기와 같이, 본 발명의 바람직한 실시 예를 참조하여 설명하였지만 해당 기술 분야의 숙련된 당업자라면 하기의 특허청구범위에 기재된 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시킬 수 있음을 이해할 수 있을 것이다.
10: 키보드
20: 마우스
30: 키보드 이벤트 포터
40: 마우스 이벤트 포터
50: 코드맵 저장부
60: 스캔코드변환부
70: 통신인터페이스부
100: 스마트 단말기(클라이언트)
200: 서버
300: 디스플레이장치

Claims (7)

  1. 클라이언트에서 데이터를 입력받아 서버에서 데이터를 처리하여 처리된 결과 화면을 상기 클라이언트에 전송하는 서버-클라이언트 시스템을 구성하는 클라이언트용 단말기에 있어서,
    입력장치로써 키보드 혹은 마우스에서 발생한 이벤트를 감시하고, 수신한 이벤트로부터 키코드를 생성하는 이벤트 포터; 상기 키코드와 변환대상인 스캔코드의 매핑테이블이 저장된 코드맵 저장부; 상기 코드맵 저장부에 저장된 매핑테이블을 참조하여 상기 키코드와 매핑되는 스캔코드를 생성하는 스캔코드 변환부; 및 상기 스캔코드를 서버에 전송하는 통신인터페이스부를 포함하되,
    마우스 이벤트가 발생하면 마우스 이벤트 수신부는 키보드 이벤트 수신부에 전달된 키보드 이벤트를 체크하고 이벤트가 발생된 경우에는 상기 키보드 이벤트를 마우스 이벤트 수신부에 전달하여 키보드 이벤트와 마우스 이벤트를 조합하여 처리하는 것을 특징으로 하는 정보보안용 스마트 단말기.
  2. 삭제
  3. 제 1항에 있어서,
    상기 키코드는 안드로이드 OS용 키코드이고, 상기 스캔코드는 윈도우 OS용 스캔코드인 것을 특징으로 하는 정보보안용 스마트 단말기.
  4. 삭제
  5. 제 1항에 있어서,
    입력장치에서 발생한 이벤트는 큐(Queue)로 대기처리되어지는 것을 특징으로 하는 정보보안용 스마트 단말기.
  6. 제 1항에 있어서,
    쉬프트(Shift), 컨트롤(Ctrl), 또는 알트(Alt)키 이벤트가 발생한 경우 마우스 이벤트 수신부에 상기 각 키 이벤트를 전달하는 것을 특징으로 하는 정보보안용 스마트 단말기.
  7. 제 1항에 있어서,
    상기 통신인터페이스부는 RDP 가상채널을 통해 스캔코드를 전송하는 것을 특징으로 하는 정보보안용 스마트 단말기.
KR1020130050559A 2013-05-06 2013-05-06 정보보안용 스마트 단말기 KR101446870B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020130050559A KR101446870B1 (ko) 2013-05-06 2013-05-06 정보보안용 스마트 단말기

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020130050559A KR101446870B1 (ko) 2013-05-06 2013-05-06 정보보안용 스마트 단말기

Publications (1)

Publication Number Publication Date
KR101446870B1 true KR101446870B1 (ko) 2014-10-06

Family

ID=51996405

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130050559A KR101446870B1 (ko) 2013-05-06 2013-05-06 정보보안용 스마트 단말기

Country Status (1)

Country Link
KR (1) KR101446870B1 (ko)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19980014924A (ko) * 1996-08-17 1998-05-25 김광호 음성출력 키보드 시스템
KR20090097239A (ko) * 2008-03-11 2009-09-16 나중열 Os(pc오퍼레이팅시스템) 비의존 화상키보드 터치모니터
JP2012079084A (ja) 2010-10-01 2012-04-19 Nomura Research Institute Ltd リモートデスクトップシステムおよび業務アプリケーション移行システム
KR20120038629A (ko) * 2010-10-14 2012-04-24 삼성전자주식회사 디스플레이장치용 리모컨 및 그 제어방법

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19980014924A (ko) * 1996-08-17 1998-05-25 김광호 음성출력 키보드 시스템
KR20090097239A (ko) * 2008-03-11 2009-09-16 나중열 Os(pc오퍼레이팅시스템) 비의존 화상키보드 터치모니터
JP2012079084A (ja) 2010-10-01 2012-04-19 Nomura Research Institute Ltd リモートデスクトップシステムおよび業務アプリケーション移行システム
KR20120038629A (ko) * 2010-10-14 2012-04-24 삼성전자주식회사 디스플레이장치용 리모컨 및 그 제어방법

Similar Documents

Publication Publication Date Title
US8566923B2 (en) Enhanced organization and automatic navigation of display screens facilitating automation control
EP2859429B1 (en) Remote session control using multi-touch inputs
US9965151B2 (en) Systems and methods for graphical user interface interaction with cloud-based applications
US9003298B2 (en) Web page application controls
US20120192078A1 (en) Method and system of mobile virtual desktop and virtual trackball therefor
US9606629B2 (en) Systems and methods for gesture interaction with cloud-based applications
US9043731B2 (en) 3D mobile user interface with configurable workspace management
US10067667B2 (en) Method and apparatus for touch gestures
EP1987412B1 (en) Graphic user interface device and method of displaying graphic objects
US9015235B2 (en) Server aggregated application streaming
US9886189B2 (en) Systems and methods for object-based interaction with cloud-based applications
US20180329605A1 (en) Arranging graphic elements within a user interface for single handed user touch selections
US9124551B2 (en) Multi-touch multi-user interactive control system using mobile devices
US9323451B2 (en) Method and apparatus for controlling display of item
US11372542B2 (en) Method and system for providing a specialized computer input device
EP2825947A1 (en) Web page application controls
KR101446870B1 (ko) 정보보안용 스마트 단말기
CN103412704A (zh) 用于通过姿势或触摸控制用户界面的优化方案
EP2372500A1 (en) Computing arrangement
US10162602B2 (en) Method for handling user-level events for programming an application
CN105323615B (zh) 应用的操作方法和用于机顶盒或电视机的处理装置
Ren et al. Intelligent user interface in cloud manufacturing
WO2014064535A2 (en) Systems and methods for object-based interaction with cloud-based applications
CN112738567B (zh) 平台内容处理方法、装置、电子设备和存储介质
US20150007087A1 (en) Rotation and translation of graphical scenes using virtual track ball

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20181025

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20190725

Year of fee payment: 6