F1~F12 키가 작동하지 않습니다

F1~F12 키가 작동하지 않습니다

컴팩트 키보드를 구입했습니다. F1 = Fn + 1 및 F2 = Fn + 2 ... 여기에 이미지 설명을 입력하세요. 하지만 F1-F12 키는 Ubuntu 16.04에서 작동하지 않습니다. 예를 들어, F1은 밝기를 증가시킬 수 있습니다. F1~F12 키의 키코드를 확인했는데 유효하지 않습니다. 따라서 F1은 키 코드 232(67 대신)를 반환합니다.

다음을 사용하여 문제를 해결하려고 시도했지만 xmodmap -e "keycode 232 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1"도움이 되지 않았습니다. F1은 여전히 ​​밝기를 변경합니다. 결과가 없는 다른 F1-F12 키를 다시 매핑해 보았습니다. Xmodmap은 기능 키가 아닌 경우에만 작동합니다.

F1~F12 키 수정이 가능한가요? (키코드를 교환하나요?)

Xmodmap이 올바르게 구성되었지만 F1은 여전히 ​​밝기를 변경합니다.:

$ xmodmap -e "keycode 232 = F1 F1 F1 XF86Switch_VT_1" # IT DON'T HELP!!

$ xmodmap -pke # everything is OK!
keycode  67 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1 F1 F1 XF86Switch_VT_1
keycode 232 = F1 F1 F1 XF86Switch_VT_1

$xev # take a look: XKeysymToKeycode = 67... F1... everything is OK again...
KeyRelease event, serial 40, synthetic NO, window 0x5000001,
    root 0xf5, subw 0x0, time 921326, (236,-87), root:(236,403),
    state 0x0, keycode 232 (keysym 0xffbe, F1), same_screen YES,
    XKeysymToKeycode returns keycode: 67
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False
$sudo evtest 
Event: time 1497517949.369064, -------------- SYN_REPORT ------------
Event: time 1497517949.458895, type 1 (EV_KEY), code 224 (KEY_BRIGHTNESSDOWN), value 0

$ setxkbmap -print
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete+ledscroll(group_lock)"    };
    xkb_symbols   { include "pc+us+inet(evdev)+capslock(swapescape)"    };
    xkb_geometry  { include "pc(pc105)" };
};

PS F1-F12는 Windows에서도 잘 작동합니다.

고쳐 쓰다:

@dirkt님 감사합니다. 세부 사항을 살펴보십시오:

  1. 우분투 16.04.1 LTS를 사용하고 있습니다맞잡다
  2. /dev/input/event11: RK61 Bluetooth keyboard
  3. sudo lsof /dev/input/event11산출:,Xorg
  4. evtest --grab /dev/input/eventX결과: 당신 말이 맞습니다. 왜냐하면 노트북 화면 밝기 때문입니다.그대로 유지(저는 Fn + 1 => F1을 눌렀습니다)!

죽이려고 해프로세스:

  1. sudo kill 757// 죽이다프로세스
  2. sudo lsof /dev/input/event11출력: Xorg // OK acpid가 죽었습니다.
  3. F1을 누르세요 -> 밝기가 변경됩니다! // 실패하다

이것은 내 rdesc 파일입니다.https://pastebin.com/vxDvwMwr

16진수 덤프는 다음과 같습니다: https://pastebin.com/eT9mNnGV

또한 키코드를 변경해 보았지만 xkbcomp도움이 되지 않았습니다.

어떤 생각이라도 적어주세요. 감사합니다!

답변1

여기서 해결책을 찾았습니다.https://forums.gentoo.org/viewtopic-t-1063898-start-0.html

change behaviour on the fly 
# echo 2 > /sys/module/hid_apple/parameters/fnmode 

or modify it in config 
[/etc/conf.d/modules] 
module_hid_apple_args="fnmode=2 iso_layout=0"

답변2

부분 답변: xmodmap실제로 매핑이 제대로 작동합니다. 그림 xev에 표시된 대로 당신이 얻는 keysym 0xffbe것은 F1정확히 있어야 하는 것과 같습니다.

따라서 질문은 (1) 여전히 밝기가 변경되는 이유와 (2) KEY_BRIGHTNESSDOWNF1 키(67)의 키 코드 대신 키 코드 232(의 경우)를 반환하는 이유입니다.

(1)의 경우 Ubuntu는 기본적으로 /dev/input키를 처리하는 X 이벤트를 처리하는 대신 직접 읽는 것을 실행하는 것으로 의심됩니다 xmodmap. 어떤 데스크탑 환경(Gnome?)을 실행하고 있는지 밝히지 않았습니다. lsof소스 코드를 직접 읽는 프로세스를 찾을 수 있습니다 /dev/input/eventX(여기에서 숫자 X 를 얻습니다 evtest. 숫자는 다른 부팅에서 변경될 수 있습니다). 다음을 실행하여 이 이론을 테스트할 수도 있습니다 evtest --grab /dev/input/eventX. 이렇게 하면 전용 프로그램이 이벤트를 처리할 수 있으므로 evtestFn+F1을 누르면 계속 표시되지만 KEY_BRIGHTNESSDOWNPC/노트북 화면의 밝기는 동일하게 유지되어야 합니다.

(2)의 경우 Google에서 브랜드명을 검색하면 블루투스 키보드인 것으로 나옵니다. 즉, HID 장치일 가능성이 높습니다. 장치 파일과 dmesg장치를 식별 하는 Bluetooth 식별자를 확인하여 디버깅 할 수 있습니다 . hidraw그럼 해

mount -t debugfs none /sys/kernel/debug

올바른 장치를 루트로 봅니다 sys/kernel/debug/hid/*/rdesc(사용 가능한 하위 디렉터리 참조). 이해가 되지 않는다면 붙여넣기 상자에 넣고 링크가 포함된 질문을 수정하세요. 또는 원시 HID 이벤트를 덤프하려면 hexdump -C /dev/hidrawXFn과 F1, F2 등을 여러 번 누르십시오. 이를 통해 커널이 왜 그런 방식으로 변환하는지에 대한 아이디어를 얻을 수 있습니다.

편집하다

hidraw 덤프를 보면 키보드는 HID 설명자에 설명된 대로 기능 키에 대한 스캔 코드 등을 올바르게 생성합니다 3a.3b

따라서 문제는 HID-입력 변환 레이어에 있는 것임에 틀림없습니다.

ioctl을 통해 이 레이어를 조사할 수 있습니다. 내가 아는 한, 사용 가능한 공개 도구는 없지만 완료되면 github에 공개할 수 있습니다.

이 매핑을 설정하는 방법에 대해 내가 아는 유일한 방법은 hwdb아래 설명된 대로 udev 데이터베이스를 이용하는 것입니다.여기.

그래서 F1을 밝기 제어에 매핑하는 데이터베이스 항목을 제공하고 이에 직접 모니터링하여 이에 반응하는 프로그램을 제공하는 패키지를 누가 설치했는지 추측합니다 /dev/input/event*. 시스템에서 찾을 수 있는지 확인해보세요. lsof도움이 될 수도 있습니다.

관련 정보