Varmilo 没有正确使用 USB。避免。

Varmilo 没有正确使用 USB。避免。

我最近买了一个阿米洛VA109M机械键盘。它在 Windows 上运行良好,但似乎让我的 Ubuntu 安装感到困惑,因为F1-F12功能键似乎总是激活媒体快捷方式,无论我是否按住了专用的Fn修饰键。例如,F12如果我单独按下它,则会增加系统音量,如果我按下Fn+也会增加系统音量F12;没有办法让它像普通F12钥匙一样工作。这给我带来了问题,因为我进行了大量编程,并且许多 IDE 快捷方式依赖于标准功能键。

我尝试通过按住Fn+来重置键盘的内部设置Esc,但这没有帮助。我在同一台机器上安装的 Windows 与此键盘完美配合。我能做些什么来尝试准确诊断 Ubuntu 的困惑吗?

编辑:lsusb输出以下内容:

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

答案1

这个是可以解决的!

所以我最近自己对此做了一些研究,虽然 Jd3eBP 关于冒充 Apple 键盘的键盘是正确的,但实际上可能是 Varmilo 在工厂闪烁的问题。

他们销售 Mac 版本的键盘,我认为该键盘的不同之处仅在于固件和标签,默认情况下我认为它支持 Mac 布局,它还应该能够切换到“Windows 模式”,这可能会将按键的顺序交换为正如你所期望的,它会将自己标识为 Apple 键盘,以便让 Mac 正确对待它。

然而,似乎他们可能不小心将该固件刷新到每一个键盘,而不仅仅是 Mac 专用键盘,这在 Windows 上不明显,因为它忽略 id,但在 Linux 上将激活 hid_apple 驱动程序。

解决方案:

进入答案部分。有两个大的选择可以解决这个问题,我测试了两个,最终发现第二个更好。

  1. 将 hid_apple 更改为正常处理功能键的模式,相信这基本上可以解决问题。您可以在此处找到有关如何执行此操作的说明,它也适用于 Ubuntu。https://wiki.archlinux.org/index.php/Apple_Keyboard#Function_keys_do_not_work

  2. 使用产品和供应商 ID 重新刷新键盘,使其不会被检测到。这可以说是正确的答案,但风险更大。您可以从制造商网站获取固件文件,https://en.varmilo.com/keyboardproscenium/Driverdownload,使用VA87M下载。更新程序本身不起作用(我想我需要安装中文本地化),因此您可以使用此处提供给某人的更新程序https://www.reddit.com/r/Varmilo/comments/g4sabk/fn_lock_on_va87m/,使用官方固件文件作为良好的措施。如果您不相信这一点,我听说如果您向 Varmilo 发送电子邮件询问该问题,他们将提供所需的文件。

从官方网站安装 wine 后,该更新程序在 wine 下为我工作。这只是重新刷新供应商和产品 ID,使其不作为 Apple 键盘出现,它还删除了仅 Windows 版本中未使用的“切换到 windows/mac 模式”功能。如果您愿意,您可以刷新 Mac 固件以恢复到旧的行为,但是我没有测试这一点。

答案2

Varmilo 没有正确使用 USB。避免。

在 WWW 上可以看到它的键盘各不相同错误地报告其制造商为 Apple(Varmilo VS109M 和 Varmilo VA88M 声称的供应商 ID 05ac)、Cypress(供应商 ID 04b4)正如 Varmilo Z104M 所声称的),ROF Electronics(供应商 ID ffff,正如阿米洛 VA87M 所声称的),Nordic Semiconductor(供应商 ID 1915正如 Varmilo VB87M 所声称的)、盛群等。

这显然是错误的,而且是有很大问题的。

如果一个硬件设备将其制造商(在 PCI、USB 等总线的设备枚举中)识别为 Apple,并将其产品识别为特定的 Apple 键盘,那么操作系统对待它是完全合法的就像苹果键盘一样。供应商 ID 05AC 产品 ID 024F 是 Apple 铝制键盘(美国)。

这里的问题是 VA109M不是那个键盘吗

Apple 键盘具有特殊且不寻常的按键语义Fn,与大多数键盘不同。连接到 Apple 键盘的 Linux 设备驱动程序是hid_apple,它知道Fn使用其私有 USB HID“用法”来处理 Apple 的特殊密钥。

VA109M 不是 Apple 键盘。这是阿米洛(Varmilo)键盘。它不像苹果键盘那样工作。它不会发出 Apple 特殊 USB HID“用法” Fn。与大多数键盘一样,它无法Fn通过 USB 显示根本不

所以像苹果键盘一样驾驶它,就像它所说的那样,不起作用

  • hid_apple一个糟糕的解决办法是从 Linux 中禁用或删除该驱动程序,但实施起来也很重要。
  • 一个糟糕的解决方法是使用驱动程序fnmode=2的选项hid_apple来反转其Fn换档状态。这至少切换到这些键的语义是功能键而不是媒体/设备控制键。
  • 正确的解决办法是从知道如何正确设置供应商 ID 的制造商那里购买键盘,而不是从 Varmilo 那里购买。

进一步阅读

答案3

我已经完成了我的一项工作。

假设有一天您不会将真正的 Apple 键盘插入您的机器。

  1. 创建文件/etc/modprobe.d/hid_apple.conf
  2. 添加options hid_apple fnmode=2并保存
  3. sudo update-initramfs -u在 Debian 发行版上,或sudo mkinitcpio -P在 Arch 发行版上
  4. 重启
  5. 将键盘切换到Windows模式(如果有该功能)

答案4

按住 FN + W 超过 3 秒帮助我退出 MAC 模式。并且功能键工作正常。这个说明是我从购买键盘的商店支持手册中读到的。

相关内容