Функциональные клавиши клавиатуры всегда запускают ярлыки мультимедиа, независимо от того, удерживается ли Fn.

Aug 17 2020

Я недавно купил механическую клавиатуру Varmilo 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

Ответы

2 modwizcode Nov 07 2020 at 23:49

Это решаемо!

Так что я недавно сам провел небольшое исследование, и хотя Jd3eBP прав насчет клавиатуры, выдавающей себя за клавиатуру Apple, на самом деле, вероятно, проблема с перепрошивкой Вармило на заводе.

Они продают версию клавиатуры для Mac, которая, я думаю, отличается только прошивкой и маркировкой, по умолчанию я думаю, что она поддерживает макет Mac, она также должна иметь возможность переключаться в «режим Windows», который, вероятно, меняет порядок клавиш на как и следовало ожидать, он идентифицирует себя как клавиатуру Apple, чтобы компьютеры Mac правильно с ней обращались.

Однако кажется, что они случайно установили эту прошивку на каждую клавиатуру, а не только на Mac, что не заметно в Windows, поскольку она игнорирует идентификатор, но в Linux активирует драйвер hid_apple.

Решение:

Переходим к ответу. Есть два больших варианта решения этой проблемы, я протестировал оба и в итоге нашел второй намного лучше.

  1. Измените hid_apple на режим, в котором он обычно обрабатывает функциональные клавиши, и, скорее всего, это решит проблему. Здесь вы можете найти инструкции, как это сделать, это также будет работать в Ubuntu.https://wiki.archlinux.org/index.php/Apple_Keyboard#Function_keys_do_not_work.

  2. Перепишите на клавиатуре идентификатор продукта и поставщика, чтобы он не обнаруживался. Возможно, это правильный ответ, но немного более рискованный. Вы можете скачать файлы прошивки с сайта производителя здесь,https://en.varmilo.com/keyboardproscenium/Driverdownload, используя загрузку VA87M. Само средство обновления не работало (я думаю, мне нужно было установить китайскую локализацию), поэтому вы можете использовать средство обновления, которое было предоставлено кому-то здесьhttps://www.reddit.com/r/Varmilo/comments/g4sabk/fn_lock_on_va87m/, воспользовавшись официальным файлом прошивки из архива. Если вы этому не верите, я слышал, что если вы напишите Вармило о проблеме, они предоставят необходимые файлы.

Это средство обновления работало у меня под вином после установки Wine с официального сайта. Это просто перепрограммирует производителя и идентификатор продукта, чтобы не отображать клавиатуру Apple, а также удаляет функцию «переключиться в режим Windows / Mac», которая не использовалась в версии только для Windows. Возможно, вы могли бы перепрограммировать прошивку Mac, чтобы вернуться к старому поведению, если хотите, однако я этого не тестировал.

3 JdeBP Aug 21 2020 at 15:23

Вармило не делает USB правильно. Избегайте.

Во всем WWW можно увидеть, что его клавиатуры по-разному ошибочно сообщают о своих производителях как Apple (идентификатор поставщика 05ac, заявленный Varmilo VS109M и Varmilo VA88M), Cypress (идентификатор поставщика 04b4, заявленный Varmilo Z104M ), ROF Electronics ( идентификатор поставщика ffff, заявленный Varmilo VA87M ), Nordic Semiconductor (идентификатор поставщика 1915, заявленный Varmilo VB87M ), Holtek и другие.

Это явно ошибочно и весьма проблематично.

Если какое-либо аппаратное устройство идентифицирует своего производителя (в перечислении устройств для шин PCI, USB и др.) Как Apple, а его продукт как конкретную клавиатуру Apple, то операционные системы вполне законно рассматривают его как клавиатуру Apple . Идентификатор поставщика 05AC Код продукта 024F - алюминиевая клавиатура Apple (США).

Проблема здесь в том, что VA109M не та клавиатура .

Клавиатура Apple имеет особую и необычную семантику Fnклавиш, которая отличается от большинства клавиатур. Драйвер устройства Linux, который подключается к клавиатурам Apple hid_apple, умеет обрабатывать специальный Fnключ Apple с его частным «использованием» USB HID.

VA109M - это не клавиатура Apple. Это клавиатура Вармило. Это не работает как клавиатура Apple. Он не испускает специального использования Apple USB HID для Fn. Как и большинство клавиатур, это не делает Fnвидимым через USB на всех .

Так что управлять им, как клавиатурой Apple, которая говорит, что это так, не работает .

  • Плохое исправление, которое также нетривиально внедрить, - это отключить или удалить hid_appleдрайвер из Linux.
  • Плохое решение - использовать fnmode=2опцию hid_appleдрайвера, чтобы инвертировать его Fnсостояние переключения. Это, по крайней мере, переключается на семантику тех клавиш, которые являются функциональными клавишами, а не клавишами управления носителями / устройствами.
  • Правильное решение - покупать клавиатуру у производителя, который знает, как правильно устанавливать идентификаторы поставщика, а не у Varmilo.

дальнейшее чтение

  • Врумфондель (17.06.2020). udev: Клавиатура ошибочно определяется как Apple . Ошибка Debian № 963002.
1 RoubenTchakhmakhtchian Aug 18 2020 at 03:59

По данным производителя: https://en.varmilo.com/keyboardproscenium/subject_product_detailed?subjectid=221

Только ОС Windows, macOS не поддерживает сочетания клавиш. Если это относится к функциональной клавише, то это может быть ответом, почему. Возможно, их поддержка macOS так же нестабильна, как и поддержка Linux.