I tasti funzione della tastiera attivano sempre le scorciatoie multimediali, indipendentemente dal fatto che Fn sia tenuto premuto

Aug 17 2020

Di recente ho acquistato una tastiera meccanica Varmilo VA109M . Funziona bene su Windows, ma sembra confondere la mia installazione di Ubuntu in quanto i tasti funzione F1-F12 sembrano sempre attivare le scorciatoie multimediali, indipendentemente dal fatto che io abbia tenuto o meno il tasto modificatore Fn dedicato. Ad esempio, F12 aumenterà il volume del mio sistema se lo premo da solo e farà lo stesso se premo Fn + F12; non c'è modo di farlo funzionare come un normale tasto F12. Questo mi sta causando problemi perché faccio molta programmazione e molte scorciatoie IDE si basano sui tasti funzione standard.

Ho provato a ripristinare le impostazioni interne della tastiera tenendo premuti Fn + Esc, ma questo non ha aiutato. La mia installazione di Windows sulla stessa macchina funziona perfettamente con questa tastiera. C'è qualcosa che posso fare per provare a diagnosticare esattamente ciò su cui Ubuntu si sta confondendo?

EDIT: lsusbemette quanto segue:

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

Risposte

2 modwizcode Nov 07 2020 at 23:49

Questo è risolvibile!

Quindi ho fatto delle ricerche su questo io stesso di recente e mentre Jd3eBP ha ragione sulla tastiera che finge di essere una tastiera Apple, in realtà è probabilmente un problema con il lampeggiamento di Varmilo in fabbrica.

Vendono una versione Mac della tastiera che penso differisca solo per firmware ed etichettatura, per impostazione predefinita penso che supporti il ​​layout Mac, dovrebbe anche essere in grado di passare alla "modalità Windows" che probabilmente cambia l'ordine dei tasti in quello che ti aspetteresti, si identifica come una tastiera Apple per convincere i Mac a trattarla correttamente.

Tuttavia sembra che forse abbiano accidentalmente fatto lampeggiare quel firmware su ogni tastiera anziché solo su quelle Mac, il che non è evidente su Windows poiché ignora l'id, ma su Linux attiverà il driver hid_apple.

Soluzione:

Passiamo alla risposta. Ci sono due grandi opzioni per risolvere questo problema, le ho testate entrambe e ho finito per trovare la seconda molto meglio.

  1. Cambia hid_apple in una modalità in cui tratta normalmente i tasti funzione, afaik questo risolverà sostanzialmente il problema. Puoi trovare le istruzioni qui su come farlo, funzionerà anche su Ubuntu.https://wiki.archlinux.org/index.php/Apple_Keyboard#Function_keys_do_not_work.

  2. Reflash della tastiera con l'ID del prodotto e del fornitore in modo tale che non venga rilevato. Questa è probabilmente la risposta giusta, ma un po' più rischiosa. È possibile ottenere i file del firmware dal sito del produttore qui,https://en.varmilo.com/keyboardproscenium/Driverdownload, utilizzando il download VA87M. Lo stesso programma di aggiornamento non ha funzionato (penso di aver bisogno della localizzazione cinese installata), quindi puoi utilizzare il programma di aggiornamento che è stato fornito a qualcuno quihttps://www.reddit.com/r/Varmilo/comments/g4sabk/fn_lock_on_va87m/, utilizzando il file del firmware ufficiale di per buona misura. Se non ti fidi, ho sentito che se invii un'e-mail a Varmilo in merito al problema, ti forniranno i file richiesti.

Quel programma di aggiornamento ha funzionato sotto wine per me dopo aver installato wine dal sito ufficiale. Questo riflette solo il fornitore e l'ID prodotto per non apparire come una tastiera Apple, rimuove anche la funzionalità "passa alla modalità Windows/Mac" che era inutilizzata nella versione solo per Windows. Probabilmente potresti eseguire il flashing del firmware del Mac per ripristinare il vecchio comportamento, se lo desideri, ma non l'ho testato.

3 JdeBP Aug 21 2020 at 15:23

Varmilo non funziona bene con l'USB. Evitare.

In giro per il WWW si può notare che le sue tastiere riportano variamente falsamente i loro produttori come Apple (vendor ID 05ac come affermato dal Varmilo VS109M e dal Varmilo VA88M), Cypress (vendor ID 04b4 come affermato dal Varmilo Z104M ), ROF Electronics ( ID fornitore ffff, come affermato da un Varmilo VA87M ), Nordic Semiconductor (ID fornitore 1915 come affermato da un Varmilo VB87M ), Holtek e altro.

Questo è chiaramente errato e altamente problematico.

Se il proprio dispositivo hardware identifica il suo produttore (nell'enumerazione dei dispositivi di bus PCI, USB, ecc.) come Apple e il suo prodotto come una specifica tastiera Apple, allora è perfettamente legittimo che i sistemi operativi lo trattino come quella tastiera Apple . ID fornitore 05AC L'ID prodotto 024F è la tastiera Apple in alluminio (USA).

Il problema qui è che il VA109M non è quella tastiera .

La tastiera Apple ha una semantica speciale e insolita per il Fntasto, che differisce dalla maggior parte delle tastiere. Il driver del dispositivo Linux che viene collegato alle tastiere Apple è hid_applee che sa gestire la Fnchiave speciale di Apple con il suo "utilizzo" HID USB privato.

Il VA109M non è una tastiera Apple. È una tastiera Varmilo. Non funziona come una tastiera Apple. Non emette l'"utilizzo" HID USB speciale di Apple per i file Fn. Come la maggior parte delle tastiere, non è affatto visibileFn tramite USB .

Quindi guidarlo come la tastiera Apple che dice che lo è, non funziona .

  • Una soluzione scadente, che è anche non banale da attuare, è disabilitare o rimuovere il hid_appledriver da Linux.
  • Una soluzione scadente consiste nell'utilizzare l' fnmode=2opzione del hid_appledriver per invertire il suo Fnstato di cambio. Questo almeno passa alla semantica di quei tasti che sono tasti funzione piuttosto che tasti di controllo multimediale/dispositivo.
  • La soluzione giusta è acquistare tastiere da un produttore che sa come impostare correttamente gli ID fornitore, piuttosto che da Varmilo.

Ulteriori letture

  • Vroomfondel (2020-06-17). udev: Tastiera rilevata erroneamente come Apple . Errore Debian n. 963002.
1 RoubenTchakhmakhtchian Aug 18 2020 at 03:59

Secondo il produttore:https://en.varmilo.com/keyboardproscenium/subject_product_detailed?subjectid=221

Solo sistema operativo Windows, macOS non supporta i tasti di scelta rapida. Se questo si riferisce al tasto funzione, allora questa potrebbe essere la risposta. Forse il loro supporto per macOS è imprevedibile quanto il loro supporto per Linux.