
Kubuntu 시스템에 Apple Wireless Keyboard를 설정하려고 합니다. 이들은 각각 Intel Atom과 Intel i5로 구동되는 PC 하드웨어입니다. 키보드는 US 키보드 레이아웃을 갖고 있으며 뒷면에 모델 번호 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, 아래쪽) ), same_screen 예, 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/
전체 패치를 적용하지 않고 ID 0x0255를 참조하는 행만 적용했습니다 USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ANSI
. 이 ID가 제가 얻은 커널 소스에 없기 때문입니다. 이전에 syslog에서 숫자 0255를 발견했기 때문에 이것을 시도했습니다.generic-bluetooth 0005:05AC:0255.0006: input,hi...
제가 어떻게 했는지 완전히 이해하지는 못하지만 작동합니다!
다음은 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을 재미있게 할 수 있는 별도의 키로 등록되어 있지 않지만 몇 개의 키를 다시 매핑하여 사과 키보드를 해피해킹과 같은 키보드로 바꾸는 내 목표에는 이것으로 충분합니다.
이것은 모두 알려진 버그인 것 같습니다.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) },