Вопрос Pen планшет / MousePen не работает в Ubuntu


Моя проблема почти такая же, как в Вот & ошибка 1391260

Genius MousePen i608X не работает в Ubuntu

Моя ОС - Ubuntu 14.10. Указатель перемещается, но кнопка не слышит.

Кажется, что тот же самый волшебный HID другого планшеты этого поставщика

Могу ли я выполнить пошаговую процедуру загрузки и установки файла патча?

Изменить. После обновления версии ядра Linux до версии 3.18.3-031803, Genius MousePen i608X работает хорошо.


2
2017-11-08 03:34


происхождения


Вам не нужно устанавливать файл исправления. Просто обновите его полностью. (sudo apt-get upgrade) - Tim
@Тим. Я уже обновил его. Но патч, приведенный в spinics.net/lists/linux-input/msg31764.html похоже, пока не включен в обновление. Так что все еще нельзя использовать планшет. Спасибо - dhiya


ответы:


Возможно, это не правильная процедура, но мне удалось заставить ее работать. Я отправлю его, и вы сможете это сделать, если почувствуете приключения.

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

ПРЕДУПРЕЖДЕНИЕ: Это включает в себя компиляцию настраиваемого ядра. Обязательно установите хотя бы один или несколько старых ядер на случай, если что-то пойдет не так!


Первый (простой) способ:

  1. Загрузите исходный код ядра из Архивы ядра Linux, Просто нажмите кнопку «Последнее стабильное ядро».
  2. Извлеките архив: откройте терминал и перейдите туда, где вы загрузили ядро, и запустите эту команду: tar -xvJf linux-"KernelVersion".tar.xz (заменить "KernelVersion" с номером версии загруженного ядра).
  3. Это создаст новую папку, обычно называемую linux - «KernelVersion» (опять же, это номер версии загруженного ядра). Войдите в эту папку, затем перейдите к драйверам> hid. Теперь вы должны быть в /path/to/download/linux-"KernelVersion"/drivers/hid,
  4. Отредактируйте hid-ids.h файл с вашим любимым текстовым редактором: gedit hid-ids.h или nano hid-ids.h или kate hid-ids.h
  5. В текстовом редакторе перейдите к строке, которая говорит (должна быть вокруг строки 520-530):

    #define USB_DEVICE_ID_KYE_MOUSEPEN_I608X 0x5011

  6. Отредактируйте строку так, чтобы она выглядела так:

    #define USB_DEVICE_ID_KYE_MOUSEPEN_I608X 0x501a

  7. Сохранить и выйти. Теперь пришло время скомпилировать ядро.

Вы можете найти множество руководств для компиляции ядра в Интернете, поэтому я думаю, что было бы лучше сослаться на него, чем написать руководство. я нашел это статья самый полезный. Внимательно прочитайте статью и будьте осторожны с конфигурацией.

С этим исправлением все отлично работало, единственное, что меня беспокоило, было то, что xinput теперь перечислены несколько устройств Genius MousePen i608X.


Второй (жесткий) способ:

Этот способ сложнее в том смысле, что вам придется редактировать несколько файлов. Это описано в патче, который вы упомянули.

  1. Выполните шаги 1 - 3 с первого взгляда.
  2. Отредактируйте hid-core.c выполните следующие действия:

Перейдите к фрагменту кода, который выглядит так: { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE) }, { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_MANTICORE) }, { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GX_IMPERATOR) }, { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_ERGO_525V) }, { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_I405X) }, { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X) }, { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X) },

И измените это на это: { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE) }, { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_MANTICORE) }, { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GX_IMPERATOR) }, { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_ERGO_525V) }, { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_I405X) }, { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X) }, { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X_2) }, //add this { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X) },

  1. Отредактируйте hid-ids.h аналогично первому пути, но вместо редактирования этой строки добавьте следующую строку:

#define USB_DEVICE_ID_KYE_MOUSEPEN_I608X_2 0x501A

  1. Отредактируйте hid-kye.c выполните следующие действия:

Найдите этот кусок кода:

/*
 * See EasyPen M610X description, device and HID report descriptors at
 * http://sf.net/apps/mediawiki/digimend/?title=KYE_EasyPen_M610X
 */

и перед этим добавьте следующее:

/* Original MousePen i608X report descriptor size */
#define MOUSEPEN_I608X_2_RDESC_ORIG_SIZE  482

/* Fixed MousePen i608X report descriptor */
static __u8 mousepen_i608x_2_rdesc_fixed[] = {
  0x06, 0x00, 0xFF, /*  Usage Page (FF00h),             */
  0x09, 0x01,       /*  Usage (01h),                    */
  0xA1, 0x01,       /*  Collection (Application),       */
  0x85, 0x05,       /*    Report ID (5),                */
  0x09, 0x01,       /*    Usage (01h),                  */
  0x15, 0x80,       /*    Logical Minimum (-128),       */
  0x25, 0x7F,       /*    Logical Maximum (127),        */
  0x75, 0x08,       /*    Report Size (8),              */
  0x95, 0x07,       /*    Report Count (7),             */
  0xB1, 0x02,       /*    Feature (Variable),           */
  0xC0,             /*  End Collection,                 */
  0x05, 0x0D,       /*  Usage Page (Digitizer),         */
  0x09, 0x02,       /*  Usage (Pen),                    */
  0xA1, 0x01,       /*  Collection (Application),       */
  0x85, 0x10,       /*    Report ID (16),               */
  0x09, 0x20,       /*    Usage (Stylus),               */
  0xA0,             /*    Collection (Physical),        */
  0x14,             /*      Logical Minimum (0),        */
  0x25, 0x01,       /*      Logical Maximum (1),        */
  0x75, 0x01,       /*      Report Size (1),            */
  0x09, 0x42,       /*      Usage (Tip Switch),         */
  0x09, 0x44,       /*      Usage (Barrel Switch),      */
  0x09, 0x46,       /*      Usage (Tablet Pick),        */
  0x95, 0x03,       /*      Report Count (3),           */
  0x81, 0x02,       /*      Input (Variable),           */
  0x95, 0x04,       /*      Report Count (4),           */
  0x81, 0x03,       /*      Input (Constant, Variable), */
  0x09, 0x32,       /*      Usage (In Range),           */
  0x95, 0x01,       /*      Report Count (1),           */
  0x81, 0x02,       /*      Input (Variable),           */
  0x75, 0x10,       /*      Report Size (16),           */
  0x95, 0x01,       /*      Report Count (1),           */
  0xA4,             /*      Push,                       */
  0x05, 0x01,       /*      Usage Page (Desktop),       */
  0x55, 0xFD,       /*      Unit Exponent (-3),         */
  0x65, 0x13,       /*      Unit (Inch),                */
  0x34,             /*      Physical Minimum (0),       */
  0x09, 0x30,       /*      Usage (X),                  */
  0x46, 0x40, 0x1F, /*      Physical Maximum (8000),    */
  0x26, 0x00, 0xA0, /*      Logical Maximum (40960),    */
  0x81, 0x02,       /*      Input (Variable),           */
  0x09, 0x31,       /*      Usage (Y),                  */
  0x46, 0x70, 0x17, /*      Physical Maximum (6000),    */
  0x26, 0x00, 0x78, /*      Logical Maximum (30720),    */
  0x81, 0x02,       /*      Input (Variable),           */
  0xB4,             /*      Pop,                        */
  0x09, 0x30,       /*      Usage (Tip Pressure),       */
  0x26, 0xFF, 0x07, /*      Logical Maximum (2047),     */
  0x81, 0x02,       /*      Input (Variable),           */
  0xC0,             /*    End Collection,               */
  0xC0,             /*  End Collection,                 */
  0x05, 0x01,       /*  Usage Page (Desktop),           */
  0x09, 0x02,       /*  Usage (Mouse),                  */
  0xA1, 0x01,       /*  Collection (Application),       */
  0x85, 0x11,       /*    Report ID (17),               */
  0x09, 0x01,       /*    Usage (Pointer),              */
  0xA0,             /*    Collection (Physical),        */
  0x14,             /*      Logical Minimum (0),        */
  0xA4,             /*      Push,                       */
  0x05, 0x09,       /*      Usage Page (Button),        */
  0x75, 0x01,       /*      Report Size (1),            */
  0x19, 0x01,       /*      Usage Minimum (01h),        */
  0x29, 0x03,       /*      Usage Maximum (03h),        */
  0x25, 0x01,       /*      Logical Maximum (1),        */
  0x95, 0x03,       /*      Report Count (3),           */
  0x81, 0x02,       /*      Input (Variable),           */
  0x95, 0x05,       /*      Report Count (5),           */
  0x81, 0x01,       /*      Input (Constant),           */
  0xB4,             /*      Pop,                        */
  0x95, 0x01,       /*      Report Count (1),           */
  0xA4,             /*      Push,                       */
  0x55, 0xFD,       /*      Unit Exponent (-3),         */
  0x65, 0x13,       /*      Unit (Inch),                */
  0x34,             /*      Physical Minimum (0),       */
  0x75, 0x10,       /*      Report Size (16),           */
  0x09, 0x30,       /*      Usage (X),                  */
  0x46, 0x40, 0x1F, /*      Physical Maximum (8000),    */
  0x26, 0x00, 0x50, /*      Logical Maximum (20480),    */
  0x81, 0x02,       /*      Input (Variable),           */
  0x09, 0x31,       /*      Usage (Y),                  */
  0x46, 0x70, 0x17, /*      Physical Maximum (6000),    */
  0x26, 0x00, 0x3C, /*      Logical Maximum (15360),    */
  0x81, 0x02,       /*      Input (Variable),           */
  0xB4,             /*      Pop,                        */
  0x75, 0x08,       /*      Report Size (8),            */
  0x09, 0x38,       /*      Usage (Wheel),              */
  0x15, 0xFF,       /*      Logical Minimum (-1),       */
  0x25, 0x01,       /*      Logical Maximum (1),        */
  0x81, 0x06,       /*      Input (Variable, Relative), */
  0x81, 0x01,       /*      Input (Constant),           */
  0xC0,             /*    End Collection,               */
  0xC0              /*  End Collection                  */
};
  1. В этом же файле найдите этот фрагмент кода:
case USB_DEVICE_ID_KYE_MOUSEPEN_I608X:
      if (*rsize == MOUSEPEN_I608X_RDESC_ORIG_SIZE) {
          rdesc = mousepen_i608x_rdesc_fixed;
          *rsize = sizeof(mousepen_i608x_rdesc_fixed);
      }
      break;

и добавьте это после него:

case USB_DEVICE_ID_KYE_MOUSEPEN_I608X_2:
      if (*rsize == MOUSEPEN_I608X_2_RDESC_ORIG_SIZE) {
          rdesc = mousepen_i608x_2_rdesc_fixed;
          *rsize = sizeof(mousepen_i608x_2_rdesc_fixed);
      }
      break;
  1. В этом же файле найдите этот фрагмент кода:
case USB_DEVICE_ID_KYE_EASYPEN_I405X:
  case USB_DEVICE_ID_KYE_MOUSEPEN_I608X:
  case USB_DEVICE_ID_KYE_EASYPEN_M610X:

и измените его на это:

case USB_DEVICE_ID_KYE_EASYPEN_I405X:
  case USB_DEVICE_ID_KYE_MOUSEPEN_I608X:
  case USB_DEVICE_ID_KYE_MOUSEPEN_I608X_2: // add this line
  case USB_DEVICE_ID_KYE_EASYPEN_M610X:
  1. В этом же файле найдите этот фрагмент кода:
  { HID_USB_DEVICE(USB_VENDOR_ID_KYE,
              USB_DEVICE_ID_KYE_MOUSEPEN_I608X) },
  { HID_USB_DEVICE(USB_VENDOR_ID_KYE,
              USB_DEVICE_ID_KYE_EASYPEN_M610X) },
  { HID_USB_DEVICE(USB_VENDOR_ID_KYE,
              USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE) },

и измените его на это:

  { HID_USB_DEVICE(USB_VENDOR_ID_KYE,
              USB_DEVICE_ID_KYE_MOUSEPEN_I608X) },
  { HID_USB_DEVICE(USB_VENDOR_ID_KYE,                // add this line
              USB_DEVICE_ID_KYE_MOUSEPEN_I608X_2) }, // and this one
  { HID_USB_DEVICE(USB_VENDOR_ID_KYE,
              USB_DEVICE_ID_KYE_EASYPEN_M610X) },
  { HID_USB_DEVICE(USB_VENDOR_ID_KYE,
              USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE) },
  1. Последний файл для редактирования находится в /path/to/download/linux-"KernelVersion"/drivers/hid/usbhid каталог. Это называется hid-quirks.c, Внутри этого найти этот кусок кода:

      { USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS, HID_QUIRK_MULTI_INPUT },
      { USB_VENDOR_ID_SIGMA_MICRO, USB_DEVICE_ID_SIGMA_MICRO_KEYBOARD, HID_QUIRK_NO_INIT_REPORTS },
      { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X, HID_QUIRK_MULTI_INPUT },
      { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X, HID_QUIRK_MULTI_INPUT },
      { USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_DUOSENSE, HID_QUIRK_NO_INIT_REPORTS },
      { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS1, HID_QUIRK_NO_INIT_REPORTS },
    

    и измените его на это:

  { USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS, HID_QUIRK_MULTI_INPUT },
  { USB_VENDOR_ID_SIGMA_MICRO, USB_DEVICE_ID_SIGMA_MICRO_KEYBOARD, HID_QUIRK_NO_INIT_REPORTS },
  { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X, HID_QUIRK_MULTI_INPUT },
  { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X_2, HID_QUIRK_MULTI_INPUT }, // add this line
  { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X, HID_QUIRK_MULTI_INPUT },
  { USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_DUOSENSE, HID_QUIRK_NO_INIT_REPORTS },
  { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS1, HID_QUIRK_NO_INIT_REPORTS },
  1. Не забудьте сохранить все файлы после редактирования. Теперь вы можете скомпилировать ядро, как указано выше.

Опять же, это может быть неправильный способ сделать это, но поскольку я не нашел учебник, как это сделать должным образом, я должен был сделать это вручную. Это сработало для меня, но, опять же, я не могу гарантировать, что это сработает для вас. Надеюсь, это поможет вам.


2
2017-11-19 19:43





После того, как я обновил версию ядра Linux до версии 3.18.3-031803, Genius MousePen i608X хорошо работает


2
2017-11-21 14:21



Кстати, какое программное обеспечение вы использовали для рисования? softwarerecs.stackexchange.com/questions/17116 - Kokizzu