SlideShare a Scribd company logo
๋ฆฌ๋ˆ…์Šค ๋ฐ์Šคํฌํ†ฑ์˜
ํ•œ๊ตญ์–ด ์ž…๋ ฅ ๊ฐœ์š”
2018.05.19
Changwoo Ryu <cwryu@debian.org>
โ— ๋‹จ์ˆœํ™”ํ•ด์„œ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค
ํ•˜๋“œ์›จ์–ด
โ— Intel 8042 (AT ์ดํ›„, โ€œPS/2โ€ ํ‚ค๋ณด๋“œ ์ปจํŠธ๋กค๋Ÿฌ)
โ—‹ ์š”์ฆ˜์€ one-chip์œผ๋กœ ๋ฉ”์ธ ๋ณด๋“œ ์นฉ์…‹์— ๋‚ด์žฅ
โ— USB HID (Human Interface Device) class
โ— Bluetooth HID (Human Interface Device) profile
โ— ๊ฐ ํ‘œ์ค€์—์„œ ์ •ํ•œ ํ•˜๋“œ์›จ์–ด ํ‚ค ์ฝ”๋“œ๊ฐ€ (๋˜๋Š” โ€œhardware scancodeโ€) ์ž…๋ ฅ๋จ.
OS
โ— Linux โ€œinputโ€ subsystem ํ‚ค์ฝ”๋“œ๋กœ ๋ณ€ํ™˜
โ— Documentation/input/event-codes.txt
โ— /usr/include/linux/input-event-codes.h
โ— ๋ฆฌ๋ˆ…์Šค ๋“œ๋ผ์ด๋ฒ„์—์„œ ํ•˜๋“œ์›จ์–ด ์ฝ”๋“œ๋ฅผ ๋ฆฌ๋ˆ…์Šค ์ด๋ฒคํŠธ ์ฝ”๋“œ (โ€œevent codeโ€) ๋ณ€ํ™˜
โ— "evdev" ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์œ ์ €๋žœ๋“œ์—์„œ ์ ‘๊ทผ (/dev/input/event0)
GUI server (xorg / wayland compositor)
โ— (libinput - ํ‚ค๋ณด๋“œ ํฌํ•จ ๊ฐ์ข… ์ž…๋ ฅ ์ฒ˜๋ฆฌ)
โ— XKB - ์ž…๋ ฅ๋œ HW/OS ์˜์กด ํ‚ค ์ฝ”๋“œ๋ฅผ ๋…ผ๋ฆฌ์  ์ฝ”๋“œ๋กœ (โ€œkey symbolโ€) ๋ณ€ํ™˜
โ—‹ ์‚ฌ์šฉ์ž ์„ค์ •์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง. ์˜ˆ: Dvorak ์‚ฌ์šฉ, ๋…์ผ์–ด AZERTY ๋ ˆ์ด์•„์›ƒ ์‚ฌ์šฉ
โ—‹ /usr/include/xkbcommon/xkbcommon-keysyms.h
โ—‹ ์ด๋ฆ„์ฒ˜๋Ÿผ xorg์šฉ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ์ง€๋งŒ wayland์—์„œ๋„ ๊ณ„์† ์‚ฌ์šฉ
โ—‹ ํ•œ๊ตญ์–ด์šฉ ์„ค์ •๋„ ์žˆ์Œ - ์˜ค๋ฅธ์ชฝ Alt/Ctrl๋ฅผ ํ•œ์˜์ „ํ™˜/ํ•œ์ž ํ‚ค๋กœ ๋ฐ”๊พธ๊ธฐ
โ— ํ•œ๊ธ€?
โ—‹ XKB_KEY_Hangul_Kiyeog ๋“ฑ ํ•œ๊ธ€ ์‹ฌ๋ณผ ์ •์˜๊ฐ€ ๋“ค์–ด ์žˆ์Œ (?!)
โ—‹ ํ•˜์ง€๋งŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ•œ๊ธ€ ์ž…๋ ฅํ•  ๋•Œ๋„ ์•ŒํŒŒ๋ฒณ ์‚ฌ์šฉ. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ํ•œ์˜ ์ „ํ™˜, ๋‘๋ฒŒ์‹ ์„ธ๋ฒŒ์‹
์„ค์ • ๋“ฑ์„ GUI server์—์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š”๋ฐ ์–ด๋ ค์›€
โ— ์ด ํ‚ค ์ด๋ฒคํŠธ๊ฐ€ ํฌ์ปค์Šค๊ฐ€ ์žˆ๋Š” app์œผ๋กœ ์ „๋‹ฌ๋˜๋Š”๋ฐ..
GUI client
โ— ์ด key event๋ฅผ ๋ฐ›์•„์„œ ์•„๋ฌด ์ƒ๊ฐ ์—†์ด symbol์„ ๋ฟŒ๋ฆฌ๋ฉด ์„œ์–‘ ์ „์šฉ GUI๊ฐ€ ๋จ
โ— ํ…์ŠคํŠธ ์ž…๋ ฅ ์ƒํ™ฉ์ผ ๊ฒฝ์šฐ, ์ด event๋ฅผ โ€œ์ž…๋ ฅ๊ธฐโ€์— ์˜๋ขฐ๋ฅผ ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฌผ ํ…์ŠคํŠธ๋ฅผ
๋ฐ›์•„์˜ด
์ž…๋ ฅ๊ธฐ ์šฉ์–ด
โ— ์ž…๋ ฅ๊ธฐ (input method)
โ—‹ server - ibus ๋“ฑ์˜ ์ž…๋ ฅ๊ธฐ
โ—‹ client - ๊ฐ GUI app, ๋ณดํ†ต GTK+๊ฐ™์€ GUI toolkit์—์„œ ์ฒ˜๋ฆฌ
โ— ๋™์ž‘
โ—‹ preedit - ์ž…๋ ฅ ์ค‘์ธ ๊ธ€์ž
โ–  root - ๋””์Šคํ”Œ๋ ˆ์ด์˜ ๊ตฌ์„์— ํ‘œ์‹œ - ์‚ฌ์šฉ์ž ์‹œ์„  ๋ถ„์‚ฐ์œผ๋กœ ๋ถˆํŽธ
โ–  off-the-spot - ํ•ด๋‹น ์ž…๋ ฅ ์ฐฝ์˜ ํ•œ ๊ตฌ์„์— ํ‘œ์‹œ - ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ถˆํŽธ
โ–  over-the-spot - ์ž…๋ ฅ ์œ„์น˜ ์œ„์— ๊ฒน์ณ์„œ ์“ฐ๊ธฐ - font๋‚˜ style ๋ถˆ์ผ์น˜ ๋“ฑ์˜ ๋ฌธ์ œ ํ”ํžˆ ๋ฐœ์ƒ
โ–  on-the-spot - client๊ฐ€ ์ง์ ‘ ์“ฐ๊ธฐ - ๊ฐ€์žฅ ์ด์ƒ์ ์ด์ง€๋งŒ GUI toolkit๋งˆ๋‹ค ๊ณ ๋ คํ•ด์•ผ ํ•จ
โ—‹ candidate - ์‚ฌ์ „ ์„ ํƒ, ์ผ๋ณธ์–ด/์ค‘๊ตญ์–ด์˜ ๊ฒฝ์šฐ์—๋Š” ๊ณ ๋ คํ•  ๊ฒŒ ๋งŽ์Œ
โ—‹ commit - ํ™•์ •๋œ ์ž…๋ ฅ ํ…์ŠคํŠธ
XIM
โ— X Input Method
โ— 1993-1994, ์•„์ง๋„ ์ตœํ›„์˜ ๋Œ€์•ˆ์ธ ๋ ˆ๊ฐ€์‹œ
โ— ์‹คํŒจ ์ด์œ 
โ—‹ ๋‹ค๋ฅธ X11 ๋ช…์„ธ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ spec์ด ๋„ˆ๋ฌด ์ผ๋ฐ˜์ 
โ–  root, off-the-spot, over-the-spot, on-the-spot ํด๋ผ์ด์–ธํŠธ๋ณ„๋กœ ๋‹ค๋ฅธ ๋ฐฉ์‹์„ ๋ชจ๋‘ ์ง€์›ํ•˜์ž
๋‹ˆ ์œ„์น˜ ์ •๋ณด ์ „๋‹ฌ, ํฐํŠธ ์ •๋ณด ์ „๋‹ฌ ๋“ฑ ๊ฑธ๋ฆผ๋Œ์ด ๋งŽ์Œ
โ–  ibus, uim๋„ over-the-spot, on-the-spot ์ •๋„๋งŒ ๊ตฌํ˜„
โ—‹ reference ์ฝ”๋“œ๊ฐ€ (IMdkit) ์™„์ „ํ•˜์ง€ ์•Š์•˜๊ณ  ๋ฒ„๊ทธ ๋งŽ์•˜์Œ
โ—‹ GUI toolkit์ธ Motif์˜ ๊ตฌํ˜„๋„ ๋ฒ„๊ทธ ๋งŽ์•˜๊ณ  closed-source๋ผ ๊ณ ์น  ์ˆ˜ ์—†์—ˆ์Œ
์‹œ๋‚˜๋ฆฌ์˜ค - XIM
X server App XIM server
Event Event
Preedit,
Commit
IBus, UIM, FCITX ๋“ฑ ์ž…๋ ฅ๊ธฐ ํ”„๋ ˆ์ž„์›Œํฌ
โ— ๋‹ค๊ตญ์–ด ์ž…๋ ฅ ๋“ฑ ํŽธ๋ฆฌ
โ— GUI toolkit๋งˆ๋‹ค ์ž…๋ ฅ๊ธฐ ํ”Œ๋Ÿฌ๊ทธ์ธ(โ€œimmoduleโ€)์„ ๋ถ™์ผ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉด์„œ ์šฉ์ดํ•ด์ง
โ—‹ gtk 2 ์ดํ›„, qt 3 ์ดํ›„
โ— ์žฅ์ : ๊ฐ๊ฐ์˜ ๋ชจ๋“ˆ์€ ๊ฐ์ž ์—ญํ• ์— ์ง‘์ค‘ํ•˜๋ฉด ๋จ. ํ†ต์‹ , ํˆดํ‚ท, UI ๋“ฑ์— ์‹ ๊ฒฝ ์“ธ ํ•„
์š”๊ฐ€ ์ ์Œ.
โ— ๋‹จ์ : ๋ชจ๋“  ์ž…๋ ฅ๊ธฐ๊ฐ€ ๊ฐ GUI toolkit๋งˆ๋‹ค ํŠน์ • ์ž…๋ ฅ๊ธฐ์— ๋Œ€ํ•œ ๊ณ ๋ ค๋ฅผ ํ•˜๋Š” ์ƒํ™ฉ
IBus
IBus
daemon
engine
(hangul โ€ฆ)
ibus client
(gtk, qt)
XIM
compat
XIM client
ibus server
candidate
UI,
settings, ...
์‹œ๋‚˜๋ฆฌ์˜ค - IBus
X /
Wayland
App IBus server
Event Event
Preedit,
Commit
GUI ์„œ๋ฒ„์—์„œ ์ž…๋ ฅ๊ธฐ ์ฒ˜๋ฆฌ
โ— wayland ํ”„๋กœํ† ์ฝœ๋กœ ์ด๋Ÿฐ ๊ฒŒ ์žˆ์œผ๋‚˜.. wl_input_method, wl_input_panel,
wl_text_model
โ—‹ http://mirrors.ustc.edu.cn/kde-
application/akademy/2012/slides/Wayland_Choosing_a_Better_Input_Method_Architecture_-
_Michael_Hasselmann.pdf
โ—‹ ibus-wayland
โ—‹ weston์—๋งŒ ๊ตฌํ˜„
โ— mutter/gnome-shell 3.30 / 3.28.1 ๋ถ€ํ„ฐ โ€œgtk-text-inputโ€ ํ”„๋กœํ† ์ฝœ ์ถ”๊ฐ€
โ— ์ง์ ‘ ibus์— ์—ฐ๊ฒฐํ•ด์„œ ๋ฐ›์€ ๊ฒฐ๊ณผ๋ฌผ์„ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ
โ— gtk์— ibus immodule ํ•„์š”์—†์–ด์ง€๊ณ  wayland โ€œgtk-text-inputโ€ ์ง€์› ํ•„์š”
โ— ์žฅ์ : GUI toolkit์—์„œ ์ž…๋ ฅ๊ธฐ ์˜์กด ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š” ์—†์Œ. ์Šคํฌ๋ฆฐ ํ‚ค๋ณด๋“œ, ํ•„๊ธฐ ์ž…๋ ฅ,
์Œ์„ฑ ์ž…๋ ฅ ๋“ฑ ๋ฐ์Šคํฌํ†ฑ ์—ฐ๋™์ด ์‰ฌ์›€.
โ— ๋‹จ์ : ํ‘œ์ค€ํ™”๊ฐ€ ์‰ฝ์ง€ ์•Š์Œ. gtk-text-input์€ gtk/gnome ์ „์šฉ
์‹œ๋‚˜๋ฆฌ์˜ค - IBus from GUI server
gnome-shell /
mutter
App
IBus server
Event
Preedit,
Commit
Preedit,
Commit
๋ณด๋„ˆ์Šค: libhangul
โ— โ€œํ•œ๊ธ€ ์˜คํ† ๋งˆํƒ€โ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„
โ— ํ‚ค๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๊ทธ ์ƒํƒœ์˜ commit๊ณผ preedit string ์ƒํƒœ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
โ— ํ•œ์ž ์‚ฌ์ „ ๊ฒ€์ƒ‰
HangulInputContext* hangul_ic_new(const char* keyboard);
void hangul_ic_delete(HangulInputContext *hic);
bool hangul_ic_process(HangulInputContext *hic, int ascii);
const ucschar* hangul_ic_get_preedit_string(HangulInputContext *hic);
const ucschar* hangul_ic_get_commit_string(HangulInputContext *hic);
#include <hangul.h>
#include <glib.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
HangulInputContext *ic = hangul_ic_new("2");
for (char* k = &argv[1][0]; *k; k++)
hangul_ic_process(ic, *k);
const ucschar* preedit = hangul_ic_get_preedit_string(ic);
const ucschar* commit = hangul_ic_get_commit_string(ic);
// encoding conversion and print
char *str;
str = g_ucs4_to_utf8(commit, hangul_syllable_len(commit, -1), NULL, NULL, NULL);
printf("commit: %sn", str); g_free(str);
str = g_ucs4_to_utf8(preedit, hangul_syllable_len(preedit, -1), NULL, NULL, NULL);
printf("preedit: %sn", str); g_free(str);
hangul_ic_delete(ic);
}
$ ./a.out rmsh
commit: ๊ทธ
preedit: ๋…ธ
$
์ •๋ฆฌ
โ— ์•ž์œผ๋กœ๋Š”?
โ—‹ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ํ˜ธํ™˜์„ฑ ์œ ์ง€๋˜๋ฉด์„œ ๋ณ€ํ™”
โ—‹ XIM์€ ์—†์–ด์ง€๊ฒ ์ง€โ€ฆ
โ—‹ ๋งˆ์ง€๋ง‰ GUI server ์ชฝ์—์„œ ์ž…๋ ฅ๊ธฐ์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ์‹์ด ๋” ๋ฐœ์ „์ 
โ— ์ž…๋ ฅ ๋ฌธ์ œ๋Š” ์ž…๋ ฅ๊ธฐ ํƒ“๋งŒ ํ•˜๊ธฐ์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์—ฎ์ธ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋งŽ๋‹ค
โ—‹ ๊ด€๋ จ๋œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐ์Šคํฌํ†ฑ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ด์Šˆ์™€ ๊ฐœ๋ฐœ ๋ฐฉํ–ฅ์— ๊ด€์‹ฌ์ด ํ•„์š”

More Related Content

Similar to Korean input overview in the linux desktop

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ F1๋จธ์‹  C++์„ ํƒ€๊ณ  Windows 10 UWP ์•ฑ ๊ฐœ๋ฐœ์˜ ์„ธ๊ณ„๋กœ~
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ F1๋จธ์‹  C++์„ ํƒ€๊ณ  Windows 10 UWP ์•ฑ ๊ฐœ๋ฐœ์˜ ์„ธ๊ณ„๋กœ~ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ F1๋จธ์‹  C++์„ ํƒ€๊ณ  Windows 10 UWP ์•ฑ ๊ฐœ๋ฐœ์˜ ์„ธ๊ณ„๋กœ~
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ F1๋จธ์‹  C++์„ ํƒ€๊ณ  Windows 10 UWP ์•ฑ ๊ฐœ๋ฐœ์˜ ์„ธ๊ณ„๋กœ~
YEONG-CHEON YOU
ย 
Ch09
Ch09Ch09
Ch09
Hankyo
ย 
์˜คํ”ˆ์†Œ์Šค ๋ฒˆ์—ญ ๊ธฐ์—ฌํ•˜๊ธฐ v3
์˜คํ”ˆ์†Œ์Šค ๋ฒˆ์—ญ ๊ธฐ์—ฌํ•˜๊ธฐ v3์˜คํ”ˆ์†Œ์Šค ๋ฒˆ์—ญ ๊ธฐ์—ฌํ•˜๊ธฐ v3
์˜คํ”ˆ์†Œ์Šค ๋ฒˆ์—ญ ๊ธฐ์—ฌํ•˜๊ธฐ v3
Changwoo Ryu
ย 
์˜คํ”ˆ์†Œ์Šค ๋ฒˆ์—ญ ๊ธฐ์—ฌํ•˜๊ธฐ v2
์˜คํ”ˆ์†Œ์Šค ๋ฒˆ์—ญ ๊ธฐ์—ฌํ•˜๊ธฐ v2์˜คํ”ˆ์†Œ์Šค ๋ฒˆ์—ญ ๊ธฐ์—ฌํ•˜๊ธฐ v2
์˜คํ”ˆ์†Œ์Šค ๋ฒˆ์—ญ ๊ธฐ์—ฌํ•˜๊ธฐ v2
Changwoo Ryu
ย 
[IGC2017] Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ
[IGC2017] Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ[IGC2017] Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ
[IGC2017] Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ
Young Soo Kim
ย 
[IGC 2017] ๋„ฅ์ŠคํŠธํ”Œ๋กœ์–ด ๊น€์˜์ˆ˜ - Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ
[IGC 2017] ๋„ฅ์ŠคํŠธํ”Œ๋กœ์–ด ๊น€์˜์ˆ˜ - Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ[IGC 2017] ๋„ฅ์ŠคํŠธํ”Œ๋กœ์–ด ๊น€์˜์ˆ˜ - Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ
[IGC 2017] ๋„ฅ์ŠคํŠธํ”Œ๋กœ์–ด ๊น€์˜์ˆ˜ - Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ
๊ฐ• ๋ฏผ์šฐ
ย 
[์•„์ดํŽ€ํŒฉํ† ๋ฆฌ]2017 NDC ๊ฐ•์—ฐ ์ž๋ฃŒ_์•„์ดํŽ€ ์—”์ง„ ๊ฐœ๋ฐœ ๋…ธํŠธ
[์•„์ดํŽ€ํŒฉํ† ๋ฆฌ]2017 NDC ๊ฐ•์—ฐ ์ž๋ฃŒ_์•„์ดํŽ€ ์—”์ง„ ๊ฐœ๋ฐœ ๋…ธํŠธ[์•„์ดํŽ€ํŒฉํ† ๋ฆฌ]2017 NDC ๊ฐ•์—ฐ ์ž๋ฃŒ_์•„์ดํŽ€ ์—”์ง„ ๊ฐœ๋ฐœ ๋…ธํŠธ
[์•„์ดํŽ€ํŒฉํ† ๋ฆฌ]2017 NDC ๊ฐ•์—ฐ ์ž๋ฃŒ_์•„์ดํŽ€ ์—”์ง„ ๊ฐœ๋ฐœ ๋…ธํŠธ
iFunFactory Inc.
ย 
[NDC17] Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ
[NDC17] Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ[NDC17] Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ
[NDC17] Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ
Young Soo Kim
ย 
๊ฐ•์ขŒ 05 ํ†ต์‹ ์šฉ PC ํ”„๋กœ๊ทธ๋ž˜๋ฐ
๊ฐ•์ขŒ 05 ํ†ต์‹ ์šฉ PC ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ฐ•์ขŒ 05 ํ†ต์‹ ์šฉ PC ํ”„๋กœ๊ทธ๋ž˜๋ฐ
๊ฐ•์ขŒ 05 ํ†ต์‹ ์šฉ PC ํ”„๋กœ๊ทธ๋ž˜๋ฐ
chcbaram
ย 
์ตœ๋ฏผํ˜ธ - ๊ตญ๋‚ด ํฌํ„ธ์—์„œ์˜ ์šฐ๋ถ„ํˆฌ (2012Y03M31D)
์ตœ๋ฏผํ˜ธ - ๊ตญ๋‚ด ํฌํ„ธ์—์„œ์˜ ์šฐ๋ถ„ํˆฌ (2012Y03M31D)์ตœ๋ฏผํ˜ธ - ๊ตญ๋‚ด ํฌํ„ธ์—์„œ์˜ ์šฐ๋ถ„ํˆฌ (2012Y03M31D)
์ตœ๋ฏผํ˜ธ - ๊ตญ๋‚ด ํฌํ„ธ์—์„œ์˜ ์šฐ๋ถ„ํˆฌ (2012Y03M31D)
Ubuntu Korea Community
ย 
2016317 ํŒŒ์ด์ฌ๊ธฐ์ดˆ_ํŒŒ์ด์ฌ_๋‹ค์ค‘์„ค์น˜๋ถ€ํ„ฐ_Jupyter๋ฅผ์ด์šฉํ•œํ”„๋กœ๊ทธ๋ž˜๋ฐ_์ดํƒœ์˜
2016317 ํŒŒ์ด์ฌ๊ธฐ์ดˆ_ํŒŒ์ด์ฌ_๋‹ค์ค‘์„ค์น˜๋ถ€ํ„ฐ_Jupyter๋ฅผ์ด์šฉํ•œํ”„๋กœ๊ทธ๋ž˜๋ฐ_์ดํƒœ์˜2016317 ํŒŒ์ด์ฌ๊ธฐ์ดˆ_ํŒŒ์ด์ฌ_๋‹ค์ค‘์„ค์น˜๋ถ€ํ„ฐ_Jupyter๋ฅผ์ด์šฉํ•œํ”„๋กœ๊ทธ๋ž˜๋ฐ_์ดํƒœ์˜
2016317 ํŒŒ์ด์ฌ๊ธฐ์ดˆ_ํŒŒ์ด์ฌ_๋‹ค์ค‘์„ค์น˜๋ถ€ํ„ฐ_Jupyter๋ฅผ์ด์šฉํ•œํ”„๋กœ๊ทธ๋ž˜๋ฐ_์ดํƒœ์˜
Tae Young Lee
ย 
Manage book project
Manage book projectManage book project
Manage book project
Ann Byung Hyun
ย 
Manage book project
Manage book projectManage book project
Manage book project
Ann Byung Hyun
ย 
OSS SW Basics Lecture 14: Open source hardware
OSS SW Basics Lecture 14: Open source hardwareOSS SW Basics Lecture 14: Open source hardware
OSS SW Basics Lecture 14: Open source hardware
Jeongkyu Shin
ย 
C++ GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์†Œ๊ฐœ: Qt & Nana
C++ GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์†Œ๊ฐœ: Qt & NanaC++ GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์†Œ๊ฐœ: Qt & Nana
C++ GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์†Œ๊ฐœ: Qt & Nana
Lazy Ahasil
ย 
07_์Šค์ผ€์ผํผ ์†Œ๊ฐœ
07_์Šค์ผ€์ผํผ ์†Œ๊ฐœ07_์Šค์ผ€์ผํผ ์†Œ๊ฐœ
07_์Šค์ผ€์ผํผ ์†Œ๊ฐœnoerror
ย 
์†Œ์…œ๊ฒŒ์ž„ ์„œ๋ฒ„ ๊ฐœ๋ฐœ ๊ด€์ ์—์„œ ๋ณธ Node.js์˜ ์žฅ๋‹จ์ ๊ณผ ๋Œ€์•ˆ
์†Œ์…œ๊ฒŒ์ž„ ์„œ๋ฒ„ ๊ฐœ๋ฐœ ๊ด€์ ์—์„œ ๋ณธ Node.js์˜ ์žฅ๋‹จ์ ๊ณผ ๋Œ€์•ˆ์†Œ์…œ๊ฒŒ์ž„ ์„œ๋ฒ„ ๊ฐœ๋ฐœ ๊ด€์ ์—์„œ ๋ณธ Node.js์˜ ์žฅ๋‹จ์ ๊ณผ ๋Œ€์•ˆ
์†Œ์…œ๊ฒŒ์ž„ ์„œ๋ฒ„ ๊ฐœ๋ฐœ ๊ด€์ ์—์„œ ๋ณธ Node.js์˜ ์žฅ๋‹จ์ ๊ณผ ๋Œ€์•ˆ
Jeongsang Baek
ย 
NDC14 ๋ฒ”์šฉ ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ ๋””์ž์ธ ๋ฐ ํ…Œํฌ๋‹‰
NDC14 ๋ฒ”์šฉ ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ ๋””์ž์ธ ๋ฐ ํ…Œํฌ๋‹‰NDC14 ๋ฒ”์šฉ ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ ๋””์ž์ธ ๋ฐ ํ…Œํฌ๋‹‰
NDC14 ๋ฒ”์šฉ ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ ๋””์ž์ธ ๋ฐ ํ…Œํฌ๋‹‰
iFunFactory Inc.
ย 
์˜จ๋ผ์ธ ๊ฒŒ์ž„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋™์ ์–ธ์–ด๋กœ ๋งŒ๋“ค๊ธฐ
์˜จ๋ผ์ธ ๊ฒŒ์ž„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋™์ ์–ธ์–ด๋กœ ๋งŒ๋“ค๊ธฐ์˜จ๋ผ์ธ ๊ฒŒ์ž„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋™์ ์–ธ์–ด๋กœ ๋งŒ๋“ค๊ธฐ
์˜จ๋ผ์ธ ๊ฒŒ์ž„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋™์ ์–ธ์–ด๋กœ ๋งŒ๋“ค๊ธฐSeungjae Lee
ย 
Introduction to Golang v2
Introduction to Golang v2Introduction to Golang v2
Introduction to Golang v2
Hyejong
ย 

Similar to Korean input overview in the linux desktop (20)

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ F1๋จธ์‹  C++์„ ํƒ€๊ณ  Windows 10 UWP ์•ฑ ๊ฐœ๋ฐœ์˜ ์„ธ๊ณ„๋กœ~
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ F1๋จธ์‹  C++์„ ํƒ€๊ณ  Windows 10 UWP ์•ฑ ๊ฐœ๋ฐœ์˜ ์„ธ๊ณ„๋กœ~ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ F1๋จธ์‹  C++์„ ํƒ€๊ณ  Windows 10 UWP ์•ฑ ๊ฐœ๋ฐœ์˜ ์„ธ๊ณ„๋กœ~
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ F1๋จธ์‹  C++์„ ํƒ€๊ณ  Windows 10 UWP ์•ฑ ๊ฐœ๋ฐœ์˜ ์„ธ๊ณ„๋กœ~
ย 
Ch09
Ch09Ch09
Ch09
ย 
์˜คํ”ˆ์†Œ์Šค ๋ฒˆ์—ญ ๊ธฐ์—ฌํ•˜๊ธฐ v3
์˜คํ”ˆ์†Œ์Šค ๋ฒˆ์—ญ ๊ธฐ์—ฌํ•˜๊ธฐ v3์˜คํ”ˆ์†Œ์Šค ๋ฒˆ์—ญ ๊ธฐ์—ฌํ•˜๊ธฐ v3
์˜คํ”ˆ์†Œ์Šค ๋ฒˆ์—ญ ๊ธฐ์—ฌํ•˜๊ธฐ v3
ย 
์˜คํ”ˆ์†Œ์Šค ๋ฒˆ์—ญ ๊ธฐ์—ฌํ•˜๊ธฐ v2
์˜คํ”ˆ์†Œ์Šค ๋ฒˆ์—ญ ๊ธฐ์—ฌํ•˜๊ธฐ v2์˜คํ”ˆ์†Œ์Šค ๋ฒˆ์—ญ ๊ธฐ์—ฌํ•˜๊ธฐ v2
์˜คํ”ˆ์†Œ์Šค ๋ฒˆ์—ญ ๊ธฐ์—ฌํ•˜๊ธฐ v2
ย 
[IGC2017] Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ
[IGC2017] Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ[IGC2017] Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ
[IGC2017] Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ
ย 
[IGC 2017] ๋„ฅ์ŠคํŠธํ”Œ๋กœ์–ด ๊น€์˜์ˆ˜ - Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ
[IGC 2017] ๋„ฅ์ŠคํŠธํ”Œ๋กœ์–ด ๊น€์˜์ˆ˜ - Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ[IGC 2017] ๋„ฅ์ŠคํŠธํ”Œ๋กœ์–ด ๊น€์˜์ˆ˜ - Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ
[IGC 2017] ๋„ฅ์ŠคํŠธํ”Œ๋กœ์–ด ๊น€์˜์ˆ˜ - Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ
ย 
[์•„์ดํŽ€ํŒฉํ† ๋ฆฌ]2017 NDC ๊ฐ•์—ฐ ์ž๋ฃŒ_์•„์ดํŽ€ ์—”์ง„ ๊ฐœ๋ฐœ ๋…ธํŠธ
[์•„์ดํŽ€ํŒฉํ† ๋ฆฌ]2017 NDC ๊ฐ•์—ฐ ์ž๋ฃŒ_์•„์ดํŽ€ ์—”์ง„ ๊ฐœ๋ฐœ ๋…ธํŠธ[์•„์ดํŽ€ํŒฉํ† ๋ฆฌ]2017 NDC ๊ฐ•์—ฐ ์ž๋ฃŒ_์•„์ดํŽ€ ์—”์ง„ ๊ฐœ๋ฐœ ๋…ธํŠธ
[์•„์ดํŽ€ํŒฉํ† ๋ฆฌ]2017 NDC ๊ฐ•์—ฐ ์ž๋ฃŒ_์•„์ดํŽ€ ์—”์ง„ ๊ฐœ๋ฐœ ๋…ธํŠธ
ย 
[NDC17] Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ
[NDC17] Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ[NDC17] Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ
[NDC17] Protocol:hyperspace Diver ๊ฐœ๋ฐœ ํฌ์ŠคํŠธ๋ชจํ…œ
ย 
๊ฐ•์ขŒ 05 ํ†ต์‹ ์šฉ PC ํ”„๋กœ๊ทธ๋ž˜๋ฐ
๊ฐ•์ขŒ 05 ํ†ต์‹ ์šฉ PC ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ฐ•์ขŒ 05 ํ†ต์‹ ์šฉ PC ํ”„๋กœ๊ทธ๋ž˜๋ฐ
๊ฐ•์ขŒ 05 ํ†ต์‹ ์šฉ PC ํ”„๋กœ๊ทธ๋ž˜๋ฐ
ย 
์ตœ๋ฏผํ˜ธ - ๊ตญ๋‚ด ํฌํ„ธ์—์„œ์˜ ์šฐ๋ถ„ํˆฌ (2012Y03M31D)
์ตœ๋ฏผํ˜ธ - ๊ตญ๋‚ด ํฌํ„ธ์—์„œ์˜ ์šฐ๋ถ„ํˆฌ (2012Y03M31D)์ตœ๋ฏผํ˜ธ - ๊ตญ๋‚ด ํฌํ„ธ์—์„œ์˜ ์šฐ๋ถ„ํˆฌ (2012Y03M31D)
์ตœ๋ฏผํ˜ธ - ๊ตญ๋‚ด ํฌํ„ธ์—์„œ์˜ ์šฐ๋ถ„ํˆฌ (2012Y03M31D)
ย 
2016317 ํŒŒ์ด์ฌ๊ธฐ์ดˆ_ํŒŒ์ด์ฌ_๋‹ค์ค‘์„ค์น˜๋ถ€ํ„ฐ_Jupyter๋ฅผ์ด์šฉํ•œํ”„๋กœ๊ทธ๋ž˜๋ฐ_์ดํƒœ์˜
2016317 ํŒŒ์ด์ฌ๊ธฐ์ดˆ_ํŒŒ์ด์ฌ_๋‹ค์ค‘์„ค์น˜๋ถ€ํ„ฐ_Jupyter๋ฅผ์ด์šฉํ•œํ”„๋กœ๊ทธ๋ž˜๋ฐ_์ดํƒœ์˜2016317 ํŒŒ์ด์ฌ๊ธฐ์ดˆ_ํŒŒ์ด์ฌ_๋‹ค์ค‘์„ค์น˜๋ถ€ํ„ฐ_Jupyter๋ฅผ์ด์šฉํ•œํ”„๋กœ๊ทธ๋ž˜๋ฐ_์ดํƒœ์˜
2016317 ํŒŒ์ด์ฌ๊ธฐ์ดˆ_ํŒŒ์ด์ฌ_๋‹ค์ค‘์„ค์น˜๋ถ€ํ„ฐ_Jupyter๋ฅผ์ด์šฉํ•œํ”„๋กœ๊ทธ๋ž˜๋ฐ_์ดํƒœ์˜
ย 
Manage book project
Manage book projectManage book project
Manage book project
ย 
Manage book project
Manage book projectManage book project
Manage book project
ย 
OSS SW Basics Lecture 14: Open source hardware
OSS SW Basics Lecture 14: Open source hardwareOSS SW Basics Lecture 14: Open source hardware
OSS SW Basics Lecture 14: Open source hardware
ย 
C++ GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์†Œ๊ฐœ: Qt & Nana
C++ GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์†Œ๊ฐœ: Qt & NanaC++ GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์†Œ๊ฐœ: Qt & Nana
C++ GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์†Œ๊ฐœ: Qt & Nana
ย 
07_์Šค์ผ€์ผํผ ์†Œ๊ฐœ
07_์Šค์ผ€์ผํผ ์†Œ๊ฐœ07_์Šค์ผ€์ผํผ ์†Œ๊ฐœ
07_์Šค์ผ€์ผํผ ์†Œ๊ฐœ
ย 
์†Œ์…œ๊ฒŒ์ž„ ์„œ๋ฒ„ ๊ฐœ๋ฐœ ๊ด€์ ์—์„œ ๋ณธ Node.js์˜ ์žฅ๋‹จ์ ๊ณผ ๋Œ€์•ˆ
์†Œ์…œ๊ฒŒ์ž„ ์„œ๋ฒ„ ๊ฐœ๋ฐœ ๊ด€์ ์—์„œ ๋ณธ Node.js์˜ ์žฅ๋‹จ์ ๊ณผ ๋Œ€์•ˆ์†Œ์…œ๊ฒŒ์ž„ ์„œ๋ฒ„ ๊ฐœ๋ฐœ ๊ด€์ ์—์„œ ๋ณธ Node.js์˜ ์žฅ๋‹จ์ ๊ณผ ๋Œ€์•ˆ
์†Œ์…œ๊ฒŒ์ž„ ์„œ๋ฒ„ ๊ฐœ๋ฐœ ๊ด€์ ์—์„œ ๋ณธ Node.js์˜ ์žฅ๋‹จ์ ๊ณผ ๋Œ€์•ˆ
ย 
NDC14 ๋ฒ”์šฉ ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ ๋””์ž์ธ ๋ฐ ํ…Œํฌ๋‹‰
NDC14 ๋ฒ”์šฉ ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ ๋””์ž์ธ ๋ฐ ํ…Œํฌ๋‹‰NDC14 ๋ฒ”์šฉ ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ ๋””์ž์ธ ๋ฐ ํ…Œํฌ๋‹‰
NDC14 ๋ฒ”์šฉ ๊ฒŒ์ž„ ์„œ๋ฒ„ ํ”„๋ ˆ์ž„์›Œํฌ ๋””์ž์ธ ๋ฐ ํ…Œํฌ๋‹‰
ย 
์˜จ๋ผ์ธ ๊ฒŒ์ž„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋™์ ์–ธ์–ด๋กœ ๋งŒ๋“ค๊ธฐ
์˜จ๋ผ์ธ ๊ฒŒ์ž„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋™์ ์–ธ์–ด๋กœ ๋งŒ๋“ค๊ธฐ์˜จ๋ผ์ธ ๊ฒŒ์ž„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋™์ ์–ธ์–ด๋กœ ๋งŒ๋“ค๊ธฐ
์˜จ๋ผ์ธ ๊ฒŒ์ž„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋™์ ์–ธ์–ด๋กœ ๋งŒ๋“ค๊ธฐ
ย 
Introduction to Golang v2
Introduction to Golang v2Introduction to Golang v2
Introduction to Golang v2
ย 

More from gnomekr

20180519 hangul processing
20180519 hangul processing20180519 hangul processing
20180519 hangul processing
gnomekr
ย 
The way of approaching to foss for nursing care business
The way of approaching to foss for nursing care businessThe way of approaching to foss for nursing care business
The way of approaching to foss for nursing care business
gnomekr
ย 
Chromium ui framework(shared)
Chromium ui framework(shared)Chromium ui framework(shared)
Chromium ui framework(shared)
gnomekr
ย 
๋’ท๋ถ์š”์ •์œผ๋กœ ์•Œ์•„๋ณด๋Š” ์‚ฌ์šฉ์ž ์š”๊ตฌ ๋ฐ˜์˜์˜ ๋‚˜์œ ์˜ˆ
๋’ท๋ถ์š”์ •์œผ๋กœ ์•Œ์•„๋ณด๋Š” ์‚ฌ์šฉ์ž ์š”๊ตฌ ๋ฐ˜์˜์˜ ๋‚˜์œ ์˜ˆ๋’ท๋ถ์š”์ •์œผ๋กœ ์•Œ์•„๋ณด๋Š” ์‚ฌ์šฉ์ž ์š”๊ตฌ ๋ฐ˜์˜์˜ ๋‚˜์œ ์˜ˆ
๋’ท๋ถ์š”์ •์œผ๋กœ ์•Œ์•„๋ณด๋Š” ์‚ฌ์šฉ์ž ์š”๊ตฌ ๋ฐ˜์˜์˜ ๋‚˜์œ ์˜ˆ
gnomekr
ย 
Gnome on wayland at a glance
Gnome on wayland at a glanceGnome on wayland at a glance
Gnome on wayland at a glance
gnomekr
ย 
My ubuntu life-dklee
My ubuntu life-dkleeMy ubuntu life-dklee
My ubuntu life-dklee
gnomekr
ย 
Vision and dream for youth startup company
Vision and dream for youth startup companyVision and dream for youth startup company
Vision and dream for youth startup company
gnomekr
ย 
Hw accelerated webkitgtk+ on raspberry pi
Hw accelerated webkitgtk+ on raspberry piHw accelerated webkitgtk+ on raspberry pi
Hw accelerated webkitgtk+ on raspberry pi
gnomekr
ย 
Gnome.asia.summit2013 report-pdf
Gnome.asia.summit2013 report-pdfGnome.asia.summit2013 report-pdf
Gnome.asia.summit2013 report-pdf
gnomekr
ย 
System hacking basics
System hacking basicsSystem hacking basics
System hacking basics
gnomekr
ย 

More from gnomekr (10)

20180519 hangul processing
20180519 hangul processing20180519 hangul processing
20180519 hangul processing
ย 
The way of approaching to foss for nursing care business
The way of approaching to foss for nursing care businessThe way of approaching to foss for nursing care business
The way of approaching to foss for nursing care business
ย 
Chromium ui framework(shared)
Chromium ui framework(shared)Chromium ui framework(shared)
Chromium ui framework(shared)
ย 
๋’ท๋ถ์š”์ •์œผ๋กœ ์•Œ์•„๋ณด๋Š” ์‚ฌ์šฉ์ž ์š”๊ตฌ ๋ฐ˜์˜์˜ ๋‚˜์œ ์˜ˆ
๋’ท๋ถ์š”์ •์œผ๋กœ ์•Œ์•„๋ณด๋Š” ์‚ฌ์šฉ์ž ์š”๊ตฌ ๋ฐ˜์˜์˜ ๋‚˜์œ ์˜ˆ๋’ท๋ถ์š”์ •์œผ๋กœ ์•Œ์•„๋ณด๋Š” ์‚ฌ์šฉ์ž ์š”๊ตฌ ๋ฐ˜์˜์˜ ๋‚˜์œ ์˜ˆ
๋’ท๋ถ์š”์ •์œผ๋กœ ์•Œ์•„๋ณด๋Š” ์‚ฌ์šฉ์ž ์š”๊ตฌ ๋ฐ˜์˜์˜ ๋‚˜์œ ์˜ˆ
ย 
Gnome on wayland at a glance
Gnome on wayland at a glanceGnome on wayland at a glance
Gnome on wayland at a glance
ย 
My ubuntu life-dklee
My ubuntu life-dkleeMy ubuntu life-dklee
My ubuntu life-dklee
ย 
Vision and dream for youth startup company
Vision and dream for youth startup companyVision and dream for youth startup company
Vision and dream for youth startup company
ย 
Hw accelerated webkitgtk+ on raspberry pi
Hw accelerated webkitgtk+ on raspberry piHw accelerated webkitgtk+ on raspberry pi
Hw accelerated webkitgtk+ on raspberry pi
ย 
Gnome.asia.summit2013 report-pdf
Gnome.asia.summit2013 report-pdfGnome.asia.summit2013 report-pdf
Gnome.asia.summit2013 report-pdf
ย 
System hacking basics
System hacking basicsSystem hacking basics
System hacking basics
ย 

Korean input overview in the linux desktop

  • 3. ํ•˜๋“œ์›จ์–ด โ— Intel 8042 (AT ์ดํ›„, โ€œPS/2โ€ ํ‚ค๋ณด๋“œ ์ปจํŠธ๋กค๋Ÿฌ) โ—‹ ์š”์ฆ˜์€ one-chip์œผ๋กœ ๋ฉ”์ธ ๋ณด๋“œ ์นฉ์…‹์— ๋‚ด์žฅ โ— USB HID (Human Interface Device) class โ— Bluetooth HID (Human Interface Device) profile โ— ๊ฐ ํ‘œ์ค€์—์„œ ์ •ํ•œ ํ•˜๋“œ์›จ์–ด ํ‚ค ์ฝ”๋“œ๊ฐ€ (๋˜๋Š” โ€œhardware scancodeโ€) ์ž…๋ ฅ๋จ.
  • 4. OS โ— Linux โ€œinputโ€ subsystem ํ‚ค์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ โ— Documentation/input/event-codes.txt โ— /usr/include/linux/input-event-codes.h โ— ๋ฆฌ๋ˆ…์Šค ๋“œ๋ผ์ด๋ฒ„์—์„œ ํ•˜๋“œ์›จ์–ด ์ฝ”๋“œ๋ฅผ ๋ฆฌ๋ˆ…์Šค ์ด๋ฒคํŠธ ์ฝ”๋“œ (โ€œevent codeโ€) ๋ณ€ํ™˜ โ— "evdev" ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์œ ์ €๋žœ๋“œ์—์„œ ์ ‘๊ทผ (/dev/input/event0)
  • 5. GUI server (xorg / wayland compositor) โ— (libinput - ํ‚ค๋ณด๋“œ ํฌํ•จ ๊ฐ์ข… ์ž…๋ ฅ ์ฒ˜๋ฆฌ) โ— XKB - ์ž…๋ ฅ๋œ HW/OS ์˜์กด ํ‚ค ์ฝ”๋“œ๋ฅผ ๋…ผ๋ฆฌ์  ์ฝ”๋“œ๋กœ (โ€œkey symbolโ€) ๋ณ€ํ™˜ โ—‹ ์‚ฌ์šฉ์ž ์„ค์ •์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง. ์˜ˆ: Dvorak ์‚ฌ์šฉ, ๋…์ผ์–ด AZERTY ๋ ˆ์ด์•„์›ƒ ์‚ฌ์šฉ โ—‹ /usr/include/xkbcommon/xkbcommon-keysyms.h โ—‹ ์ด๋ฆ„์ฒ˜๋Ÿผ xorg์šฉ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ์ง€๋งŒ wayland์—์„œ๋„ ๊ณ„์† ์‚ฌ์šฉ โ—‹ ํ•œ๊ตญ์–ด์šฉ ์„ค์ •๋„ ์žˆ์Œ - ์˜ค๋ฅธ์ชฝ Alt/Ctrl๋ฅผ ํ•œ์˜์ „ํ™˜/ํ•œ์ž ํ‚ค๋กœ ๋ฐ”๊พธ๊ธฐ โ— ํ•œ๊ธ€? โ—‹ XKB_KEY_Hangul_Kiyeog ๋“ฑ ํ•œ๊ธ€ ์‹ฌ๋ณผ ์ •์˜๊ฐ€ ๋“ค์–ด ์žˆ์Œ (?!) โ—‹ ํ•˜์ง€๋งŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ•œ๊ธ€ ์ž…๋ ฅํ•  ๋•Œ๋„ ์•ŒํŒŒ๋ฒณ ์‚ฌ์šฉ. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ํ•œ์˜ ์ „ํ™˜, ๋‘๋ฒŒ์‹ ์„ธ๋ฒŒ์‹ ์„ค์ • ๋“ฑ์„ GUI server์—์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š”๋ฐ ์–ด๋ ค์›€ โ— ์ด ํ‚ค ์ด๋ฒคํŠธ๊ฐ€ ํฌ์ปค์Šค๊ฐ€ ์žˆ๋Š” app์œผ๋กœ ์ „๋‹ฌ๋˜๋Š”๋ฐ..
  • 6. GUI client โ— ์ด key event๋ฅผ ๋ฐ›์•„์„œ ์•„๋ฌด ์ƒ๊ฐ ์—†์ด symbol์„ ๋ฟŒ๋ฆฌ๋ฉด ์„œ์–‘ ์ „์šฉ GUI๊ฐ€ ๋จ โ— ํ…์ŠคํŠธ ์ž…๋ ฅ ์ƒํ™ฉ์ผ ๊ฒฝ์šฐ, ์ด event๋ฅผ โ€œ์ž…๋ ฅ๊ธฐโ€์— ์˜๋ขฐ๋ฅผ ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฌผ ํ…์ŠคํŠธ๋ฅผ ๋ฐ›์•„์˜ด
  • 7. ์ž…๋ ฅ๊ธฐ ์šฉ์–ด โ— ์ž…๋ ฅ๊ธฐ (input method) โ—‹ server - ibus ๋“ฑ์˜ ์ž…๋ ฅ๊ธฐ โ—‹ client - ๊ฐ GUI app, ๋ณดํ†ต GTK+๊ฐ™์€ GUI toolkit์—์„œ ์ฒ˜๋ฆฌ โ— ๋™์ž‘ โ—‹ preedit - ์ž…๋ ฅ ์ค‘์ธ ๊ธ€์ž โ–  root - ๋””์Šคํ”Œ๋ ˆ์ด์˜ ๊ตฌ์„์— ํ‘œ์‹œ - ์‚ฌ์šฉ์ž ์‹œ์„  ๋ถ„์‚ฐ์œผ๋กœ ๋ถˆํŽธ โ–  off-the-spot - ํ•ด๋‹น ์ž…๋ ฅ ์ฐฝ์˜ ํ•œ ๊ตฌ์„์— ํ‘œ์‹œ - ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ถˆํŽธ โ–  over-the-spot - ์ž…๋ ฅ ์œ„์น˜ ์œ„์— ๊ฒน์ณ์„œ ์“ฐ๊ธฐ - font๋‚˜ style ๋ถˆ์ผ์น˜ ๋“ฑ์˜ ๋ฌธ์ œ ํ”ํžˆ ๋ฐœ์ƒ โ–  on-the-spot - client๊ฐ€ ์ง์ ‘ ์“ฐ๊ธฐ - ๊ฐ€์žฅ ์ด์ƒ์ ์ด์ง€๋งŒ GUI toolkit๋งˆ๋‹ค ๊ณ ๋ คํ•ด์•ผ ํ•จ โ—‹ candidate - ์‚ฌ์ „ ์„ ํƒ, ์ผ๋ณธ์–ด/์ค‘๊ตญ์–ด์˜ ๊ฒฝ์šฐ์—๋Š” ๊ณ ๋ คํ•  ๊ฒŒ ๋งŽ์Œ โ—‹ commit - ํ™•์ •๋œ ์ž…๋ ฅ ํ…์ŠคํŠธ
  • 8. XIM โ— X Input Method โ— 1993-1994, ์•„์ง๋„ ์ตœํ›„์˜ ๋Œ€์•ˆ์ธ ๋ ˆ๊ฐ€์‹œ โ— ์‹คํŒจ ์ด์œ  โ—‹ ๋‹ค๋ฅธ X11 ๋ช…์„ธ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ spec์ด ๋„ˆ๋ฌด ์ผ๋ฐ˜์  โ–  root, off-the-spot, over-the-spot, on-the-spot ํด๋ผ์ด์–ธํŠธ๋ณ„๋กœ ๋‹ค๋ฅธ ๋ฐฉ์‹์„ ๋ชจ๋‘ ์ง€์›ํ•˜์ž ๋‹ˆ ์œ„์น˜ ์ •๋ณด ์ „๋‹ฌ, ํฐํŠธ ์ •๋ณด ์ „๋‹ฌ ๋“ฑ ๊ฑธ๋ฆผ๋Œ์ด ๋งŽ์Œ โ–  ibus, uim๋„ over-the-spot, on-the-spot ์ •๋„๋งŒ ๊ตฌํ˜„ โ—‹ reference ์ฝ”๋“œ๊ฐ€ (IMdkit) ์™„์ „ํ•˜์ง€ ์•Š์•˜๊ณ  ๋ฒ„๊ทธ ๋งŽ์•˜์Œ โ—‹ GUI toolkit์ธ Motif์˜ ๊ตฌํ˜„๋„ ๋ฒ„๊ทธ ๋งŽ์•˜๊ณ  closed-source๋ผ ๊ณ ์น  ์ˆ˜ ์—†์—ˆ์Œ
  • 9. ์‹œ๋‚˜๋ฆฌ์˜ค - XIM X server App XIM server Event Event Preedit, Commit
  • 10. IBus, UIM, FCITX ๋“ฑ ์ž…๋ ฅ๊ธฐ ํ”„๋ ˆ์ž„์›Œํฌ โ— ๋‹ค๊ตญ์–ด ์ž…๋ ฅ ๋“ฑ ํŽธ๋ฆฌ โ— GUI toolkit๋งˆ๋‹ค ์ž…๋ ฅ๊ธฐ ํ”Œ๋Ÿฌ๊ทธ์ธ(โ€œimmoduleโ€)์„ ๋ถ™์ผ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉด์„œ ์šฉ์ดํ•ด์ง โ—‹ gtk 2 ์ดํ›„, qt 3 ์ดํ›„ โ— ์žฅ์ : ๊ฐ๊ฐ์˜ ๋ชจ๋“ˆ์€ ๊ฐ์ž ์—ญํ• ์— ์ง‘์ค‘ํ•˜๋ฉด ๋จ. ํ†ต์‹ , ํˆดํ‚ท, UI ๋“ฑ์— ์‹ ๊ฒฝ ์“ธ ํ•„ ์š”๊ฐ€ ์ ์Œ. โ— ๋‹จ์ : ๋ชจ๋“  ์ž…๋ ฅ๊ธฐ๊ฐ€ ๊ฐ GUI toolkit๋งˆ๋‹ค ํŠน์ • ์ž…๋ ฅ๊ธฐ์— ๋Œ€ํ•œ ๊ณ ๋ ค๋ฅผ ํ•˜๋Š” ์ƒํ™ฉ
  • 11. IBus IBus daemon engine (hangul โ€ฆ) ibus client (gtk, qt) XIM compat XIM client ibus server candidate UI, settings, ...
  • 12. ์‹œ๋‚˜๋ฆฌ์˜ค - IBus X / Wayland App IBus server Event Event Preedit, Commit
  • 13. GUI ์„œ๋ฒ„์—์„œ ์ž…๋ ฅ๊ธฐ ์ฒ˜๋ฆฌ โ— wayland ํ”„๋กœํ† ์ฝœ๋กœ ์ด๋Ÿฐ ๊ฒŒ ์žˆ์œผ๋‚˜.. wl_input_method, wl_input_panel, wl_text_model โ—‹ http://mirrors.ustc.edu.cn/kde- application/akademy/2012/slides/Wayland_Choosing_a_Better_Input_Method_Architecture_- _Michael_Hasselmann.pdf โ—‹ ibus-wayland โ—‹ weston์—๋งŒ ๊ตฌํ˜„ โ— mutter/gnome-shell 3.30 / 3.28.1 ๋ถ€ํ„ฐ โ€œgtk-text-inputโ€ ํ”„๋กœํ† ์ฝœ ์ถ”๊ฐ€ โ— ์ง์ ‘ ibus์— ์—ฐ๊ฒฐํ•ด์„œ ๋ฐ›์€ ๊ฒฐ๊ณผ๋ฌผ์„ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ โ— gtk์— ibus immodule ํ•„์š”์—†์–ด์ง€๊ณ  wayland โ€œgtk-text-inputโ€ ์ง€์› ํ•„์š” โ— ์žฅ์ : GUI toolkit์—์„œ ์ž…๋ ฅ๊ธฐ ์˜์กด ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š” ์—†์Œ. ์Šคํฌ๋ฆฐ ํ‚ค๋ณด๋“œ, ํ•„๊ธฐ ์ž…๋ ฅ, ์Œ์„ฑ ์ž…๋ ฅ ๋“ฑ ๋ฐ์Šคํฌํ†ฑ ์—ฐ๋™์ด ์‰ฌ์›€. โ— ๋‹จ์ : ํ‘œ์ค€ํ™”๊ฐ€ ์‰ฝ์ง€ ์•Š์Œ. gtk-text-input์€ gtk/gnome ์ „์šฉ
  • 14. ์‹œ๋‚˜๋ฆฌ์˜ค - IBus from GUI server gnome-shell / mutter App IBus server Event Preedit, Commit Preedit, Commit
  • 15. ๋ณด๋„ˆ์Šค: libhangul โ— โ€œํ•œ๊ธ€ ์˜คํ† ๋งˆํƒ€โ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„ โ— ํ‚ค๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๊ทธ ์ƒํƒœ์˜ commit๊ณผ preedit string ์ƒํƒœ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. โ— ํ•œ์ž ์‚ฌ์ „ ๊ฒ€์ƒ‰ HangulInputContext* hangul_ic_new(const char* keyboard); void hangul_ic_delete(HangulInputContext *hic); bool hangul_ic_process(HangulInputContext *hic, int ascii); const ucschar* hangul_ic_get_preedit_string(HangulInputContext *hic); const ucschar* hangul_ic_get_commit_string(HangulInputContext *hic);
  • 16. #include <hangul.h> #include <glib.h> #include <stdio.h> int main(int argc, char *argv[]) { HangulInputContext *ic = hangul_ic_new("2"); for (char* k = &argv[1][0]; *k; k++) hangul_ic_process(ic, *k); const ucschar* preedit = hangul_ic_get_preedit_string(ic); const ucschar* commit = hangul_ic_get_commit_string(ic); // encoding conversion and print char *str; str = g_ucs4_to_utf8(commit, hangul_syllable_len(commit, -1), NULL, NULL, NULL); printf("commit: %sn", str); g_free(str); str = g_ucs4_to_utf8(preedit, hangul_syllable_len(preedit, -1), NULL, NULL, NULL); printf("preedit: %sn", str); g_free(str); hangul_ic_delete(ic); } $ ./a.out rmsh commit: ๊ทธ preedit: ๋…ธ $
  • 17. ์ •๋ฆฌ โ— ์•ž์œผ๋กœ๋Š”? โ—‹ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ํ˜ธํ™˜์„ฑ ์œ ์ง€๋˜๋ฉด์„œ ๋ณ€ํ™” โ—‹ XIM์€ ์—†์–ด์ง€๊ฒ ์ง€โ€ฆ โ—‹ ๋งˆ์ง€๋ง‰ GUI server ์ชฝ์—์„œ ์ž…๋ ฅ๊ธฐ์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ์‹์ด ๋” ๋ฐœ์ „์  โ— ์ž…๋ ฅ ๋ฌธ์ œ๋Š” ์ž…๋ ฅ๊ธฐ ํƒ“๋งŒ ํ•˜๊ธฐ์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์—ฎ์ธ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋งŽ๋‹ค โ—‹ ๊ด€๋ จ๋œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐ์Šคํฌํ†ฑ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ด์Šˆ์™€ ๊ฐœ๋ฐœ ๋ฐฉํ–ฅ์— ๊ด€์‹ฌ์ด ํ•„์š”