Linux:Apple Wireless A1314 Fnキーが登録されていません。ソフトウェアのバグのように見えます。

Linux:Apple Wireless A1314 Fnキーが登録されていません。ソフトウェアのバグのように見えます。

Kubuntuシステムを使用してAppleワイヤレスキーボードを設定しようとしています。これらは、それぞれIntel AtomとIntel i5で駆動されるPCハードウェアです。キーボードはアメリカのキーボードレイアウトを使用し、背面にモデル番号A1314が書かれています。単三電池2本が必要です。 A1314 モデルがいろいろな種類があるようで、こう申し上げます。

私は10.04、11.04、11.10、12.04システムでこれを試しましたが、成功しませんでした。 BluetoothアダプタとKDE Bluetooth通知トレイアプレットを使用して、キーボードを毎回接続できます。どちらの場合も、「Apple Wireless Keyboard」と表示されます。

ほとんどすべてが期待どおりに機能します。実際、今この記事を書いています。しかし、そうでないことが1つあります: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、ff 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キーでのみ機能します。矢印キーではありません。 iPad画面がオフの状態で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) },

関連情報