[Bug 265260] HANGEUL and HANJA on Korean keyboards do not work.

From: <bugzilla-noreply_at_freebsd.org>
Date: Sun, 17 Jul 2022 07:23:32 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=265260

            Bug ID: 265260
           Summary: HANGEUL and HANJA on Korean keyboards do not work.
           Product: Base System
           Version: 13.1-RELEASE
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: kern
          Assignee: bugs@FreeBSD.org
          Reporter: warioburn@yahoo.co.jp

Korean keyboard have Hanyoung key (sometimes called Hanguel key) witch toggle
Korean/English input mode and a Hanja key witch covert korean letter to chinese
letter.

Unlike before, x11's keycode conversion is done by evdev. That's why I'm
reporting here.
When tested with evtest, they are not recognized.


in /sys/dev/atkbdc/atkbd.c

There are several mode. Especially, K_CODE, K_RAW,K_ASCII, EVDEV.

Hanyoung and Hanja key is not recognized in all modes, but I will report mainly
EVDEV part because it's most relevant.

First, the Hanyoung key is 0xF1 and the Hanja key is 0xF2.
Hanyoung/Hanja keys are generally greater than 0x80, which is genarlly
considered a release key. And it does not repeat or generate a release key.

Reference:https://www.win.tue.nl/~aeb/linux/kbd/scancodes-9.html



#ifdef EVDEV_SUPPORT
/* push evdev event */

if (evdev_rcpt_mask & EVDEV_RCPT_HW_KBD && state->ks_evdev != NULL) {
keycode = evdev_scancode2key(&state->ks_evdev_state,
scancode);

if (keycode != KEY_RESERVED) {
        evdev_push_event(state->ks_evdev, EV_KEY,
        (uint16_t)keycode, scancode & 0x80 ? 0 : 1);
        evdev_sync(state->ks_evdev);
        }
}
#endif


After digging with atkbd driver source, it looks like this part is related.
There seems to be no problem that returning the keycode from evdev_scancode2key
and the definition is already in place with KEY_HANGEUL, KEY_HANJA.

evdev_push_event(state->ks_evdev, EV_KEY,
(uint16_t)keycode, scancode & 0x80 ? 0 : 1);

But here, if the scan code is greater than 0x80,
evdev_push_event -> evdev_send_event ->evdev_sparse_event
through these codes, EV_SKIP_EVENT is returned, it will be ignored.

So, wouldn't special processing for Hangul keys be necessary somewhere?







Notes on other parts.
K_CODE also has a similar problem, but even if it's not fixed, There is no big
problem. because, without ime, Hanyoung/Hanja key is meaningless. 
But it's pretty much the same problem, so it shouldn't be difficult to fix.

For previously used xorg-xf86-input-keyboard package(This is how it worked
before,), receives the scan code through K_RAW and converts it to an X11 key
code.
I guess adding Hanyoung keys in the wsXtMap of bsd_KbdMap.c table, make it 
work, but I can't make it sucess.

-- 
You are receiving this mail because:
You are the assignee for the bug.