Les touches de fonction du clavier déclenchent toujours des raccourcis multimédias, que Fn soit enfoncé ou non

Aug 17 2020

J'ai récemment acheté un clavier mécanique Varmilo VA109M . Cela fonctionne bien sous Windows, mais semble confondre mon installation Ubuntu dans la mesure où les touches de fonction F1-F12 apparaissent toujours pour activer les raccourcis multimédias, que j'aie ou non maintenu la touche de modification Fn dédiée. Par exemple, F12 augmentera le volume de mon système si j'appuie dessus tout seul, et fera de même si j'appuie sur Fn+F12 ; il n'y a aucun moyen de le faire agir comme une touche F12 normale. Cela me pose des problèmes car je fais beaucoup de programmation et de nombreux raccourcis IDE reposent sur les touches de fonction standard.

J'ai essayé de réinitialiser les paramètres internes du clavier en maintenant Fn + Esc, mais cela n'a pas aidé. Mon installation Windows sur la même machine fonctionne parfaitement bien avec ce clavier. Y a-t-il quelque chose que je puisse faire pour essayer de diagnostiquer exactement ce qui confond Ubuntu?

EDIT : lsusbaffiche les éléments suivants :

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

Réponses

2 modwizcode Nov 07 2020 at 23:49

C'est résoluble !

J'ai donc fait des recherches moi-même récemment et bien que Jd3eBP ait raison sur le fait que le clavier prétend être un clavier Apple, c'est probablement un problème avec le clignotement de Varmilo à l'usine.

Ils vendent une version Mac du clavier qui, je pense, ne diffère que par le micrologiciel et l'étiquetage, par défaut, je pense qu'il prend en charge la disposition Mac, il est également censé pouvoir passer en "mode Windows" qui échange probablement l'ordre des touches à ce à quoi vous vous attendez, il s'identifie comme un clavier Apple pour que les Mac le traitent correctement.

Cependant, il semble qu'ils aient accidentellement flashé ce micrologiciel sur chaque clavier au lieu des seuls Mac, ce qui n'est pas perceptible sous Windows car il ignore l'identifiant, mais sous Linux, le pilote hid_apple sera activé.

La solution:

Passons à la partie réponse. Il y a deux grandes options pour résoudre ce problème, j'ai testé les deux et j'ai fini par trouver la seconde bien meilleure.

  1. Changez hid_apple dans un mode où il traite les touches de fonction normalement, autant que je sache, cela résoudra essentiellement le problème. Vous pouvez trouver des instructions ici pour savoir comment procéder, cela fonctionnera également sur Ubuntu.https://wiki.archlinux.org/index.php/Apple_Keyboard#Function_keys_do_not_work.

  2. Flashez le clavier avec l'ID du produit et du fournisseur afin qu'il ne soit pas détecté. C'est sans doute la bonne réponse mais un peu plus risquée. Vous pouvez obtenir les fichiers du firmware sur le site du fabricant ici,https://en.varmilo.com/keyboardproscenium/Driverdownload, en utilisant le téléchargement VA87M. Le programme de mise à jour lui-même n'a pas fonctionné (je pense que j'avais besoin d'installer la localisation chinoise), vous pouvez donc utiliser le programme de mise à jour qui a été fourni à quelqu'un icihttps://www.reddit.com/r/Varmilo/comments/g4sabk/fn_lock_on_va87m/, en utilisant le fichier de firmware officiel du pour faire bonne mesure. Si vous ne faites pas confiance à cela, j'entends que si vous envoyez un e-mail à Varmilo à propos du problème, ils vous fourniront les fichiers requis.

Ce programme de mise à jour a fonctionné sous wine pour moi après avoir installé wine à partir du site officiel. Cela reflashe simplement l'ID du fournisseur et du produit pour ne pas apparaître comme un clavier Apple, il supprime également la fonctionnalité "passer en mode Windows/Mac" qui n'était pas utilisée sur la version Windows uniquement. Vous pouvez probablement flasher le firmware du Mac pour revenir à l'ancien comportement si vous le souhaitez, je n'ai cependant pas testé cela.

3 JdeBP Aug 21 2020 at 15:23

Varmilo ne fait pas correctement l'USB. Éviter de.

Autour du WWW, on peut voir que ses claviers signalent faussement leurs fabricants comme Apple (ID de fournisseur 05ac comme revendiqué par le Varmilo VS109M et par le Varmilo VA88M), Cypress (ID de vendeur 04b4 comme revendiqué par le Varmilo Z104M ), ROF Electronics ( ID de fournisseur ffff, tel que revendiqué par un Varmilo VA87M ), Nordic Semiconductor (ID de fournisseur 1915 tel que revendiqué par un Varmilo VB87M ), Holtek, etc.

Ceci est clairement erroné et très problématique.

Si un périphérique matériel identifie son fabricant (dans l'énumération des périphériques des bus PCI, USB, etc.) comme Apple et son produit comme un clavier Apple spécifique, il est alors parfaitement légitime que les systèmes d'exploitation le traitent comme ce clavier Apple . L'ID de fournisseur 05AC L'ID de produit 024F est le clavier en aluminium Apple (États-Unis).

Le problème ici est que le VA109M n'est pas ce clavier .

Le clavier Apple a une sémantique spéciale et inhabituelle pour la Fntouche, qui diffère de la plupart des claviers. Le pilote de périphérique Linux qui est attaché aux claviers Apple est hid_apple, et qui sait gérer la Fnclé spéciale d'Apple avec son "utilisation" USB HID privée.

Le VA109M n'est pas un clavier Apple. C'est un clavier Varmilo. Il ne fonctionne pas comme un clavier Apple. Il n'émet pas "l'utilisation" spéciale Apple USB HID pour Fn. Comme la plupart des claviers, il ne rend pas du toutFn visible via l'USB .

Donc, le conduire comme le clavier Apple qu'il dit, ne fonctionne pas .

  • Une mauvaise solution, qui n'est pas non plus facile à mettre en œuvre, consiste à désactiver ou à supprimer le hid_applepilote de Linux.
  • Une mauvaise solution consiste à utiliser l' fnmode=2option permettant au hid_appleconducteur d'inverser son Fnétat de changement de vitesse. Cela passe au moins à la sémantique de ces touches qui sont des touches de fonction plutôt que des touches de contrôle de média/dispositif.
  • La bonne solution consiste à acheter des claviers auprès d'un fabricant qui sait comment définir correctement les ID de fournisseur, plutôt que chez Varmilo.

Lectures complémentaires

  • Vroomfondel (2020-06-17). udev : Clavier mal détecté comme étant Apple . Bogue Debian #963002.
1 RoubenTchakhmakhtchian Aug 18 2020 at 03:59

Selon le fabricant :https://en.varmilo.com/keyboardproscenium/subject_product_detailed?subjectid=221

Système d'exploitation Windows uniquement, macOS ne prend pas en charge les touches de raccourci. Si cela fait référence à la touche de fonction, cela peut être la raison pour laquelle. Peut-être que leur support macOS est aussi inégal que leur support Linux.