Klawisze funkcyjne klawiatury zawsze wyzwalają skróty multimedialne, niezależnie od tego, czy klawisz Fn jest wciśnięty

Aug 17 2020

Niedawno kupiłem klawiaturę mechaniczną Varmilo VA109M . Działa dobrze w systemie Windows, ale wydaje się mylić moją instalację Ubuntu, ponieważ klawisze funkcyjne F1-F12 pojawiają się zawsze, aby aktywować skróty multimedialne, niezależnie od tego, czy trzymałem dedykowany klawisz modyfikujący Fn, czy nie. Na przykład F12 zwiększy głośność mojego systemu, jeśli naciśnę go sam, i zrobi to samo, jeśli naciśnę Fn + F12; nie ma sposobu, aby działał jak zwykły klawisz F12. Powoduje to problemy, ponieważ dużo programuję, a wiele skrótów IDE polega na standardowych klawiszach funkcyjnych.

Próbowałem zresetować wewnętrzne ustawienia klawiatury, przytrzymując Fn + Esc, ale to nie pomogło. Moja instalacja systemu Windows na tym samym komputerze działa doskonale z tą klawiaturą. Czy jest coś, co mogę zrobić, aby spróbować dokładnie zdiagnozować, w czym Ubuntu jest zdezorientowany?

EDYCJA: lsusbwyświetla następujące informacje:

Bus 001 Device 003: ID 05ac:024f Apple, Inc. Varmilo Keyboard
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x05ac Apple, Inc.
  idProduct          0x024f 
  bcdDevice            1.00
  iManufacturer           1 
  iProduct                2 
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x005b
    bNumInterfaces          3
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              350mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      1 Keyboard
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.10
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      75
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.10
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      85
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0010  1x 16 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.10
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      33
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0020  1x 32 bytes
        bInterval               4
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x04  EP 4 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0020  1x 32 bytes
        bInterval               4

Odpowiedzi

2 modwizcode Nov 07 2020 at 23:49

To jest możliwe do rozwiązania!

Niedawno przeprowadziłem kilka badań w tej sprawie i chociaż Jd3eBP ma rację co do klawiatury udającej klawiaturę Apple, prawdopodobnie jest to problem z flashowaniem Varmilo w fabryce.

Sprzedają klawiaturę w wersji dla Maca, która moim zdaniem różni się tylko oprogramowaniem i etykietami, domyślnie myślę, że obsługuje układ Maca, ma też być w stanie przełączyć się w "tryb Windows", który prawdopodobnie zmienia kolejność klawiszy na czego można się spodziewać, identyfikuje się jako klawiatura Apple, aby komputery Mac mogły ją prawidłowo traktować.

Wygląda jednak na to, że może przypadkowo sflashowali to oprogramowanie na każdą klawiaturę zamiast tylko na komputery Mac, co nie jest zauważalne w systemie Windows, ponieważ ignoruje identyfikator, ale w systemie Linux aktywuje sterownik hid_apple.

Rozwiązanie:

Przejdźmy do części dotyczącej odpowiedzi. Istnieją dwie duże możliwości rozwiązania tego problemu, przetestowałem obie i ostatecznie znalazłem drugą znacznie lepiej.

  1. Zmień hid_apple w tryb, w którym normalnie traktuje klawisze funkcyjne, afaik to w zasadzie rozwiąże problem. Możesz znaleźć instrukcje, jak to zrobić, będzie to działać również na Ubuntu.https://wiki.archlinux.org/index.php/Apple_Keyboard#Function_keys_do_not_work.

  2. Ponownie przepłucz klawiaturę identyfikatorem produktu i dostawcy, aby nie zostały wykryte. To prawdopodobnie właściwa odpowiedź, ale trochę bardziej ryzykowna. Pliki oprogramowania można pobrać ze strony producenta tutaj,https://en.varmilo.com/keyboardproscenium/Driverdownload, korzystając z pobranego pliku VA87M. Sam aktualizator nie działał (myślę, że potrzebowałem zainstalowanej chińskiej lokalizacji), więc możesz skorzystać z aktualizatora, który został dostarczony tutaj komuśhttps://www.reddit.com/r/Varmilo/comments/g4sabk/fn_lock_on_va87m/, używając oficjalnego pliku oprogramowania układowego z dobrego środka. Jeśli nie ufasz temu, słyszę, że jeśli napiszesz do Varmilo o problemie, dostarczy wymagane pliki.

Ten aktualizator działał dla mnie pod winem po zainstalowaniu wina z oficjalnej strony. To tylko odzwierciedla identyfikator dostawcy i produktu, aby nie pojawiały się jako klawiatura Apple, a także usuwa funkcję „przełączania na tryb Windows / Mac”, która nie była używana w wersji tylko dla systemu Windows. Prawdopodobnie możesz sflashować oprogramowanie układowe Maca, aby powrócić do starego zachowania, jeśli chcesz, jednak tego nie testowałem.

3 JdeBP Aug 21 2020 at 15:23

Varmilo nie robi dobrze USB. Uniknąć.

W sieci WWW można zauważyć, że jego klawiatury różnie fałszywie zgłaszają swoich producentów jako Apple (identyfikator sprzedawcy 05ac, jak twierdzi Varmilo VS109M i Varmilo VA88M), Cypress (identyfikator sprzedawcy 04b4, jak twierdzi Varmilo Z104M ), ROF Electronics ( identyfikator sprzedawcy ffff, jak twierdzi Varmilo VA87M ), Nordic Semiconductor (identyfikator sprzedawcy 1915, jak twierdzi Varmilo VB87M ), Holtek i nie tylko.

Jest to oczywiście błędne i bardzo problematyczne.

Jeśli urządzenie sprzętowe identyfikuje swojego producenta (w wyliczaniu magistrali PCI, USB i innych) jako Apple, a jego produkt jako konkretną klawiaturę Apple, to jest całkowicie uzasadnione, aby systemy operacyjne traktowały je jako tę klawiaturę Apple . Identyfikator dostawcy 05AC Identyfikator produktu 024F to aluminiowa klawiatura Apple (USA).

Problem w tym, że VA109M to nie ta klawiatura .

Klawiatura Apple ma specjalną i nietypową semantykę Fnklawisza, która różni się od większości klawiatur. Sterownik Linuksa, który jest dołączany do klawiatur Apple, jest hid_applei wie, jak obsługiwać specjalny Fnklucz Apple z jego prywatnym „użyciem” USB HID.

VA109M nie jest klawiaturą Apple. To klawiatura Varmilo. Nie działa jak klawiatura Apple. Nie emituje specjalnego „użycia” USB HID firmy Apple dla Fn. Podobnie jak większość klawiatur, to nie ma Fnwidoczne poprzez USB w ogóle .

Więc prowadzenie go jak klawiatury Apple, który mówi, że tak, nie działa .

  • Słabą poprawką, która jest również nietrywialna do wprowadzenia, jest wyłączenie lub usunięcie hid_applesterownika z Linuksa.
  • Słabym rozwiązaniem jest użycie fnmode=2opcji dla hid_applesterownika, aby odwrócić Fnstan zmiany biegów. To przynajmniej przełącza się na semantykę tych klawiszy, które są klawiszami funkcyjnymi, a nie klawiszami sterowania mediami / urządzeniami.
  • Właściwym rozwiązaniem jest kupowanie klawiatur od producenta, który wie, jak prawidłowo ustawić identyfikatory dostawców, a nie od Varmilo.

Dalsza lektura

  • Vroomfondel (17.06.2020). udev: klawiatura błędnie wykryta jako Apple . Błąd Debiana nr 963002.
1 RoubenTchakhmakhtchian Aug 18 2020 at 03:59

Według producenta: https://en.varmilo.com/keyboardproscenium/subject_product_detailed?subjectid=221

Tylko system operacyjny Windows, macOS nie obsługuje klawiszy skrótów. Jeśli odnosi się to do klawisza funkcyjnego, może to być odpowiedź dlaczego. Być może ich obsługa macOS jest tak samo nierówna, jak obsługa Linuksa.