Las teclas de función del teclado siempre activan accesos directos multimedia, independientemente de si se mantiene presionada Fn

Aug 17 2020

Recientemente compré un teclado mecánico Varmilo VA109M . Funciona bien en Windows, pero parece confundir mi instalación de Ubuntu porque las teclas de función F1-F12 aparecen siempre para activar los accesos directos de medios, independientemente de si he presionado la tecla modificadora Fn dedicada o no. Por ejemplo, F12 aumentará el volumen de mi sistema si lo presiono solo, y hará lo mismo si presiono Fn+F12; no hay forma de que actúe como una tecla F12 normal. Esto me está causando problemas porque hago mucha programación y muchos atajos de IDE se basan en las teclas de función estándar.

Intenté restablecer la configuración interna del teclado presionando Fn+Esc, pero esto no ayudó. Mi instalación de Windows en la misma máquina funciona perfectamente bien con este teclado. ¿Hay algo que pueda hacer para tratar de diagnosticar exactamente en qué se está confundiendo Ubuntu?

EDITAR: lsusbgenera lo siguiente:

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

Respuestas

2 modwizcode Nov 07 2020 at 23:49

¡Esto tiene solución!

Así que investigué un poco sobre esto recientemente y aunque Jd3eBP tiene razón acerca de que el teclado finge ser un teclado de Apple, en realidad es probablemente un problema con el parpadeo de Varmilo en la fábrica.

Venden una versión Mac del teclado que creo que difiere solo en el firmware y el etiquetado, por defecto creo que es compatible con el diseño de Mac, también se supone que puede cambiar al "modo de Windows", lo que probablemente cambia el orden de las teclas a lo que cabría esperar, se identifica como un teclado de Apple para que las Mac lo traten correctamente.

Sin embargo, parece que tal vez actualizaron accidentalmente ese firmware en todos los teclados en lugar de solo en los de Mac, lo que no se nota en Windows ya que ignora la identificación, pero en Linux activará el controlador hid_apple.

Solución:

En la parte de la respuesta. Hay dos grandes opciones para resolver esto, probé ambas y terminé encontrando la segunda mucho mejor.

  1. Cambie hid_apple a un modo en el que trate las teclas de función normalmente, afaik esto básicamente resolverá el problema. Puede encontrar instrucciones aquí sobre cómo hacerlo, también funcionará en Ubuntu.https://wiki.archlinux.org/index.php/Apple_Keyboard#Function_keys_do_not_work.

  2. Vuelva a actualizar el teclado con el ID del producto y del proveedor para que no se detecte. Podría decirse que esta es la respuesta correcta, pero un poco más arriesgada. Puede obtener los archivos de firmware del sitio del fabricante aquí,https://en.varmilo.com/keyboardproscenium/Driverdownload, utilizando la descarga VA87M. El actualizador en sí no funcionó (creo que necesitaba instalar la localización en chino), por lo que puede usar el actualizador que se le proporcionó a alguien aquíhttps://www.reddit.com/r/Varmilo/comments/g4sabk/fn_lock_on_va87m/, usando el archivo de firmware oficial del por si acaso. Si no confía en eso, escuché que si envía un correo electrónico a Varmilo sobre el problema, le proporcionarán los archivos necesarios.

Ese actualizador funcionó en Wine para mí después de instalar Wine desde el sitio oficial. Esto solo vuelve a actualizar el proveedor y la identificación del producto para que no aparezca como un teclado de Apple, también elimina la funcionalidad "cambiar al modo Windows/Mac" que no se usó en la versión de Windows únicamente. Probablemente podría actualizar el firmware de Mac para volver al comportamiento anterior si lo desea. Sin embargo, no probé eso.

3 JdeBP Aug 21 2020 at 15:23

Varmilo no hace bien el USB. Evitar.

Alrededor de la WWW se puede ver que sus teclados informan falsamente a sus fabricantes como Apple (ID de proveedor 05ac según lo afirmado por Varmilo VS109M y por Varmilo VA88M), Cypress (ID de proveedor 04b4 según lo afirmado por Varmilo Z104M ), ROF Electronics ( ID de proveedor ffff, según lo afirmado por un Varmilo VA87M ), Nordic Semiconductor (ID de proveedor 1915 según lo afirmado por un Varmilo VB87M ), Holtek y más.

Esto es claramente erróneo y muy problemático.

Si el dispositivo de hardware de uno identifica a su fabricante (en la enumeración de dispositivos de PCI, USB, etc. buses) como Apple y su producto como un teclado Apple específico, entonces es perfectamente legítimo que los sistemas operativos lo traten como ese teclado Apple . Id. de proveedor 05AC Id. de producto 024F es el teclado de aluminio de Apple (EE. UU.).

El problema aquí es que el VA109M no es ese teclado .

El teclado de Apple tiene una semántica especial e inusual para la Fntecla, que difiere de la mayoría de los teclados. El controlador de dispositivo de Linux que se adjunta a los teclados de Apple es hid_apple, y sabe manejar la Fnclave especial de Apple con su "uso" de USB HID privado.

El VA109M no es un teclado Apple. Es un teclado Varmilo. No funciona como un teclado de Apple. No emite el "uso" especial de USB HID de Apple para Fn. Como la mayoría de los teclados, no se hace visible aFn través del USB .

Así que manejarlo como el teclado de Apple que dice que es, no funciona .

  • Una mala solución, que tampoco es trivial de promulgar, es deshabilitar o eliminar el hid_applecontrolador de Linux.
  • Una mala solución es utilizar la fnmode=2opción del hid_appleconductor para invertir su Fnestado de cambio. Eso al menos cambia a la semántica de que esas teclas son teclas de función en lugar de teclas de control de medios/dispositivos.
  • La solución correcta es comprar teclados de un fabricante que sepa cómo configurar las ID de proveedores correctamente, en lugar de Varmilo.

Otras lecturas

  • Vroomfondel (2020-06-17). udev: Teclado mal detectado como Apple . Error de Debian n.º 963002.
1 RoubenTchakhmakhtchian Aug 18 2020 at 03:59

Según el fabricante:https://en.varmilo.com/keyboardproscenium/subject_product_detailed?subjectid=221

Solo sistema operativo Windows, macOS no admite teclas de método abreviado. Si esto se refiere a la tecla de función, entonces esta puede ser la respuesta. Quizás su compatibilidad con macOS es tan irregular como su compatibilidad con Linux.