우연히 윈도우10 OS 의 한/영, 한자 키 가 KeyDown 이벤트만 잡히고 KeyUp 이벤트가 잡히지 않는것을 알게되었습니다.
구글링을 해보니 정말 그렇더군요.
제가 궁금한것은 이 KeyUp이벤트가 Keyboard 에서 아예 발생이 하질 않는건지, 윈도우 OS 에서 버리는 건지 를 확실히 모르겠습니다.
혹시 리눅스에서는 이 키들의 key up (release) 이벤트가 확인되나요?
우연히 윈도우10 OS 의 한/영, 한자 키 가 KeyDown 이벤트만 잡히고 KeyUp 이벤트가 잡히지 않는것을 알게되었습니다.
구글링을 해보니 정말 그렇더군요.
제가 궁금한것은 이 KeyUp이벤트가 Keyboard 에서 아예 발생이 하질 않는건지, 윈도우 OS 에서 버리는 건지 를 확실히 모르겠습니다.
혹시 리눅스에서는 이 키들의 key up (release) 이벤트가 확인되나요?
==========
KeyPress event, serial 37, synthetic NO, window 0x6400001,
root 0x1a2, subw 0x0, time 278001, (459,-30), root:(512,713),
state 0x0, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
XKeysymToKeycode returns keycode: 92
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic NO, window 0x6400001,
root 0x1a2, subw 0x0, time 278145, (459,-30), root:(512,713),
state 0x80, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
XKeysymToKeycode returns keycode: 92
XLookupString gives 0 bytes:
XFilterEvent returns: False
근데 답변을 받고 보니 제가 질문을 잘못했군요..
그냥 한/영, 한자키가 아니라, 우측 Alt, Ctrl가 있으면서 한/영, 한자키도 있는.. (데스크탑용 풀사이즈 키보드) 그런 키보드에서의 한영,한자키에 대한 질문이었습니다..
다시한번 답변감사드립니다.
발생하는것같습니다.
감사합니다.
정말 궁금했고, 필요했던 정보인데 ... 저로 빨리 리눅스 설치해서 확인해봐야 겠습니다.
윈도우 10에서 한글, 한자 키가 있는 키보드의 한글, 한자 키보드에서 KeyDown 이벤트가 OS 레벨에서 발생하지 않고, KeyUp 이벤트만 발생시키는것 같습니다.
해서 윈도우에 X11 서버 환경 구성해서 dante2k과 같이 xev로 확인하면 위에 설명한 문제 (KeyDown 이벤트가 발생하지 않는) 때문에 한글, 한자키의 이벤트가 정상적으로 잡히질 않습니다.
* 제대로 확인하려면 실제 리눅스를 사용하고있는 하드웨어에 직접 한영, 한자키를 가지고있는 키보드 꽂고 확인해보는것밖에 없는데.
dante2k님같은 키보드는 윈도우와 리눅스 두 OS 모두에서 정상적으로 이벤트가 잡힐것이므로 lihz님의 질문에는 답이 안되겠네요.
윈도우에서 발생하는 키보드 이벤트는 https://github.com/cajhin/capsicain 이걸 사용해서 확인했구요.
윈도우 10에서 정상적으로 Down Up 발생시키려면 드라이버 또는 커널레벨에서 변경되것 같다는 예상이라서..
capsicain githun isuue 페이지에 keyup만 발생하는 키를 down + up 이벤트로 에뮬레이팅 할 수 있는지 물어봐놓은 상태입니다.
혹시 이 문제 관련해서 해결하셨거나 유용한 정보 알게되셨다면 조언좀 부탁드리겠습니다!!
* 추가1 : capsicain (한글, 한자키 추가 커스텀 빌드)으로 다른키를 한글이나 한자키로 맵핑한 후 xev에서 확인해보니 결과가 잘 나오는걸로 봐서 윈도우10 OS에서 keyDown 이벤트를 버려버리고, keyUp만 발생시키는것이 확실해 보입니다.
* 추가2: capsicain 개발자의 답변이 좀 늦어서 일부코드 수정해서 다시 빌드 후 한글키, 한자키의 Up Event가 들어올때 Down Event를 먼저 발생시킨 후 Up Event 발생시키도록한 후 테스트 해보니 윈도우 10 X11 서버 환경 > xev에서 한영키 잘 동작하네요.
두서없는, 장황한 글이 될듯하여 미리 걱정입니다.
먼저 말씀드리고 싶은것은,
capsicain 에서 KeyUp이벤트만 발생한다는것은 capsicain에서 잘못 출력되는것으로 보입니다. (이는 capsicain github의 issue 페이지 https://github.com/cajhin/capsicain/issues/4 의 내용을 보시면 제작자의 답변이 나와있습니다.)
결론적으로, KeyDown만 있는것은 있어도 (대표적으로 한영/한자 키) KeyUp만 발생하는 키는 없습니다.
문제의 핵심은 이 한영/한자키가 KeyUp 이벤트가 없기때문에, 다른키로 Mapping하여 사용할 수 없는것이 문제인데,
이는 윈도우 드라이버 파일을 HxD 같은 HexEditor로 수정하여 다른 키의 scancode로 변경하면 사용할수 있습니다. (제가 한동안 이렇게 사용했습니다.)
근데, 이 방법의 문제점은...이렇게 파일을 수정하게 되면, 파일에 포함된 자체 서명(digital signature)이 어긋나게되고, 이게 틀어지면 정상적인 부팅이 안됩니다.
해결책은 드라이버 서명확인을 건너뛰도록 옵션을 주고 부팅하면 되는데, 이러면 이 파일뿐만 아니라 다른 모든 드라이버들의 디지털 서명 검증을 패스하게되면서 .. OS보안에 문제가 생길수 있고,
또 화면 우하단에 "Test Mode"라는 워터마크가 항상 보이게 됩니다.
여러 우여곡절 끝에 한영/한자키를 다른키로 매핑하여 사용하는 방법을 알아내긴했지만..
저는 일단 지금은 위에서 언급한 문제륻 때문에 사용하고 있지는 않습니다.
추가1 ) 이거 쓰고나서 보니, 리눅서 당에서 윈도우 드라이버 내용을 잔뜩 열거했네요.. (뻘쭘...ㅠㅠㅠㅠ)
추가2) 리눅스에서는 한영/한자키가 정상적으로 down/up 이벤트가 올라옵니다.