Linux: Apple Wireless A1314 Fn 키가 등록되지 않았습니다. 소프트웨어 버그처럼 보입니다.

Linux: Apple Wireless A1314 Fn 키가 등록되지 않았습니다. 소프트웨어 버그처럼 보입니다.

Kubuntu 시스템을 사용하여 Apple 무선 키보드를 설정하려고 합니다. 이들은 각각 Intel Atom과 Intel i5로 구동되는 PC 하드웨어입니다. 키보드는 미국식 키보드 레이아웃을 사용하며 뒷면에 모델 번호 A1314가 적혀 있습니다. AA 배터리 2개가 필요합니다. A1314 모델이 여러 종류가 있는 것 같아서 이렇게 말씀드립니다.

나는 10.04, 11.04, 11.10 및 12.04 시스템에서 이것을 시도했지만 성공하지 못했습니다. 블루투스 어댑터와 KDE 블루투스 알림 트레이 애플릿을 사용하여 키보드를 매번 연결할 수 있습니다. 두 경우 모두 "Apple Wireless Keyboard"로 나타납니다.

거의 모든 것이 예상대로 작동합니다. 사실 지금 이 글을 쓰고 있습니다. 하지만 그렇지 않은 것이 하나 있습니다: Fn 키입니다. Fn + 아래쪽 화살표를 PgDn/Page Down으로 사용하고 싶습니다. 이것이 Apple 키보드의 기본 동작이라는 것을 알고 있습니다. 물론 Page Up, Home, End도 똑같이 할 수 있었으면 좋겠습니다. 내 예에서는 Page Down을 계속 사용하겠습니다.

xev 도구를 사용하여 시스템이 어떤 키코드를 수신하는지 확인하고 Fn을 누르면 아무 일도 일어나지 않고 아무 것도 등록되지 않습니다. Fn + 아래쪽 화살표를 누르면 xev는 아래쪽 화살표만 기록합니다. 설명하기 위한 11.04 시스템의 출력은 다음과 같습니다.

Fn 키만 누르기: 출력 없음

아래쪽 화살표 키 누르기: KeyPress 이벤트, 시퀀스 36, 구성 NO, 창 0x4400001, 루트 0x15d, 하위 0x4400002, 시간 2699773, (44,45), 루트: (1352,298), 상태 0x10, 키코드 116 (keysym 0xff54, down), same_screen YES, XLookupString은 0바이트를 제공합니다. XmbLookupString은 0바이트를 제공합니다. XFilterEvent는 다음을 반환합니다. False

KeyRelease event, serial 36, synthetic NO, window 0x4400001,
    root 0x15d, subw 0x4400002, time 2699860, (44,45), root:(1352,298),
    state 0x10, keycode 116 (keysym 0xff54, Down), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Fn+아래쪽 화살표 키를 동시에 누르십시오.

KeyPress event, serial 36, synthetic NO, window 0x4400001,
    root 0x15d, subw 0x4400002, time 2701548, (44,45), root:(1352,298),
    state 0x10, keycode 116 (keysym 0xff54, Down), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 36, synthetic NO, window 0x4400001,
    root 0x15d, subw 0x4400002, time 2701623, (44,45), root:(1352,298),
    state 0x10, keycode 116 (keysym 0xff54, Down), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

나는 이 포럼과 다른 Linux 관련 포럼을 몇 시간 동안 검색했지만 여전히 해결책을 찾지 못했습니다. 실제 Apple 노트북이나 데스크탑을 사용할 때 이 문제를 해결하는 방법에 대한 제안을 대부분 찾았지만 그런 제안이 없습니다. 다음을 시도해 보라고 하더군요

echo 2 > /sys/module/hid_apple/ ...하지만 내 시스템에는 hid_apple 디렉토리가 없으므로 먼저 이를 수행해야 합니다 modprobe hid_apple. 그것도 도움이 되지 않습니다.

필요한 경우 일부 구성 파일을 변경하거나 패치된 커널을 직접 컴파일하고 싶습니다.

현재 테스트에 사용할 수 있는 10.04 및 12.04 시스템이 있습니다.

Windows 7에 연결할 때도 동일한 문제가 발생합니다. Fn 키는 단독으로 또는 다른 키와 함께 작동하지 않습니다. AutoHotkey를 약간 조정하여 키가 눌린 것으로 등록되었지만 기본적으로 무시된다는 것을 확인할 수 있었습니다. 사용자 정의 AutoHotkey 스크립트를 사용하면 이 문제를 해결할 수 있습니다. 하지만 AutoHotkey는 Windows에서만 작동하므로 Linux에서 문제를 해결하고 싶습니다.

iPad 2에 연결하면 F1-F12 키로만 작동합니다. 화살표 키로는 안됩니다. 아이패드 화면이 꺼진 상태에서 Fn 키만 누르면 화면이 켜지기 때문에 키 자체가 눌린 것으로 등록됩니다.

내 질문을 요약하면: 현재 등록되지 않은 Fn 키를 사용해야 할 때 이 키보드에서 Page Up, Page Down, Home 및 End를 사용할 수 있도록 도와줄 수 있는 사람이 있습니까?

2012년 7월 4일에 편집됨: 아직 운이 좋지 않습니다. KDE가 무언가를 방해하고 있다고 생각했지만 XFCE에서는 문제가 지속됩니다.

다음은 Syslog의 일부 출력입니다.

Jul  4 13:15:31 comp kernel: [ 1561.377849] usb 1-1.4: new full-speed USB device number 8 using ehci_hcd
Jul  4 13:15:31 comp kernel: [ 1561.449864] usb 1-1.4: device descriptor read/64, error -32
Jul  4 13:15:31 comp kernel: [ 1561.629402] usb 1-1.4: device descriptor read/64, error -32
Jul  4 13:15:32 comp kernel: [ 1561.805100] usb 1-1.4: new full-speed USB device number 9 using ehci_hcd
Jul  4 13:15:32 comp bluetoothd[911]: HCI dev 0 registered
Jul  4 13:15:32 comp bluetoothd[911]: Listening for HCI events on hci0
Jul  4 13:15:33 comp bluetoothd[911]: HCI dev 0 up
Jul  4 13:15:33 comp bluetoothd[911]: Adapter /org/bluez/911/hci0 has been enabled
Jul  4 13:15:44 comp kernel: [ 1573.712323] input: Apple Wireless Keyboard as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4/1-1.4:1.0/bluetooth/hci0/hci0:42/input8
Jul  4 13:15:44 comp kernel: [ 1573.712569] generic-bluetooth 0005:05AC:0255.0006: input,hidraw3: BLUETOOTH HID v0.50 Keyboard [Apple Wireless Keyboard] on 00:09:DD:50:75:A1

답변1

드디어 fn키를 사용할 수 있게 되었습니다! 이를 위해서는 내 자신의 커널 모듈을 컴파일해야 했습니다. 더 간단한 방법으로 해결할 수 있을 것 같지만 제가 한 일은 다음과 같습니다.

이 오류를 발견했습니다:https://bugs.launchpad.net/ubuntu/+source/linux/+bug/942184

이 페이지에 게시된 첫 번째 패치에는 내 솔루션이 있습니다.https://bugs.launchpad.net/ubuntu/+source/linux/+bug/942184/+attachment/2788714/+files/alu2011.patch

그런 다음 기사에 따라 계속해서 모듈을 수정하고 수정했으며 먼저 댓글을 달았습니다. http://www.codewhirl.com/2012/04/how-to-compile-a-single-module-in-ubuntu-linux/

전체 패치를 적용하지 않고 USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ANSIID 0x0255 줄만 적용했습니다. 해당 ID가 제가 얻은 커널 소스에서 누락되었기 때문입니다. 이전에 시스템 로그에서 숫자 0255를 발견했기 때문에 이것을 시도했습니다.generic-bluetooth 0005:05AC:0255.0006: input,hi...

내가 어떻게 했는지는 잘 모르겠지만 작동합니다!

다음은 왼쪽 화살표 키를 누른 후 fn 키를 누른 다음 fn 키를 누르지 않은 일부 Xev 출력입니다.

KeyPress event, serial 34, synthetic NO, window 0x3000001,
    root 0x15d, subw 0x3000002, time 1502136, (40,28), root:(1235,427),
    state 0x0, keycode 110 (keysym 0xff50, Home), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x3000001,
    root 0x15d, subw 0x3000002, time 1502635, (40,28), root:(1235,427),
    state 0x0, keycode 110 (keysym 0xff50, Home), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x3000001,
    root 0x15d, subw 0x3000002, time 1504023, (40,28), root:(1235,427),
    state 0x0, keycode 113 (keysym 0xff51, Left), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x3000001,
    root 0x15d, subw 0x3000002, time 1504235, (40,28), root:(1235,427),
    state 0x0, keycode 113 (keysym 0xff51, Left), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Fn 키는 별도의 키로 등록되지 않으며 xmodmapping을 사용하여 흥미로운 작업을 수행할 수 있지만 몇 개의 키를 다시 매핑하여 Apple 키보드를 행복한 해커의 키보드로 바꾸는 것만으로도 충분합니다.

이것은 모두 알려진 버그인 것 같습니다.https://bugs.launchpad.net/ubuntu/+source/linux/+bug/911064

답변2

내 키보드도 똑같습니다. 이것은 "fn" 키가 작동하도록 Linux 커널 3.4용으로 만든 패치입니다.

diff -aur linux-3.4.pristine/drivers/hid/hid-apple.c linux-3.4.new/drivers/hid/hid-apple.c
--- linux-3.4.pristine/drivers/hid/hid-apple.c  2012-07-15 04:45:54.489209371 -0300
+++ linux-3.4.new/drivers/hid/hid-apple.c   2012-07-15 04:41:46.986193078 -0300
@@ -455,6 +455,8 @@
    { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ISO),
        .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
            APPLE_ISO_KEYBOARD },
+   { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ANSI),
+       .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN },
    { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ISO),
        .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN |
            APPLE_ISO_KEYBOARD },
diff -aur linux-3.4.pristine/drivers/hid/hid-core.c linux-3.4.new/drivers/hid/hid-core.c
--- linux-3.4.pristine/drivers/hid/hid-core.c   2012-07-15 04:45:54.489209371 -0300
+++ linux-3.4.new/drivers/hid/hid-core.c    2012-07-15 04:41:46.986193078 -0300
@@ -1382,6 +1382,7 @@
    { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) },
    { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) },
    { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) },
+   { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ANSI) },
    { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ISO) },
    { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
    { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },

관련 정보