web-dev-qa-db-fra.com

La tablette à stylet / MousePen ne fonctionne pas sous Ubuntu

Mon problème est presque le même que dans ici & bug 139126

Genius MousePen i608X ne fonctionne pas dans Ubuntu

Mon système d'exploitation est Ubuntu 14.10. Le pointeur se déplace, mais aucun bouton ne détecte.

Il semble partager la même magie CACHÉE que les autres tablettes de ce fournisseur

Puis-je avoir une procédure pas à pas pour télécharger et installer le fichier de correctif?

Edit: Après avoir mis à niveau la version du noyau Linux vers la version 3.18.3-031803-generic, Genius MousePen i608X fonctionne bien.

2
dhiya

Ce n'est peut-être pas la bonne procédure mais j'ai réussi à la faire fonctionner. Je vais le poster et vous pouvez le faire si vous vous sentez aventureux.

Je l'ai fait de deux manières, mais je ne peux pas garantir qu'ils fonctionneront pour vous simplement parce que je me considère toujours comme un débutant et que je l'ai fait en suivant les guides d'autres personnes.

AVERTISSEMENT: cela inclut la compilation d'un noyau personnalisé.Assurez-vous de faire installer au moins un noyau plus ancien au cas où il y aurait un problème!


Premier moyen (facile):

  1. Téléchargez le code source du noyau à partir de Archives du noyau Linux . Cliquez simplement sur le bouton "Dernier noyau stable".
  2. Extrayez l'archive: ouvrez le terminal et naviguez jusqu'à l'endroit où vous avez téléchargé le noyau et exécutez la commande suivante: tar -xvJf linux-"KernelVersion".tar.xz (remplacez "KernelVersion" par le numéro de version du noyau téléchargé).
  3. Cela créera un nouveau dossier généralement nommé linux "KernelVersion" (encore une fois, il s’agit du numéro de version du noyau téléchargé). Entrez ce dossier, puis accédez aux pilotes> cachés. Vous devriez maintenant être dans /path/to/download/linux-"KernelVersion"/drivers/hid.
  4. Editez le fichier hid-ids.h avec votre éditeur de texte favori: gedit hid-ids.h ou nano hid-ids.h ou kate hid-ids.h
  5. Dans l'éditeur de texte, naviguez jusqu'à la ligne qui dit (devrait être autour de la ligne 520-530):

    #define USB_DEVICE_ID_KYE_MOUSEPEN_I608X 0x5011

  6. Modifiez la ligne pour qu'elle ressemble à ceci:

    #define USB_DEVICE_ID_KYE_MOUSEPEN_I608X 0x501a

  7. Sauvegarder et quitter. Il est maintenant temps de compiler le noyau.

Vous pouvez trouver de nombreux guides pour compiler le noyau en ligne, je pense donc qu'il serait préférable de vous y référer, plutôt que de l'écrire moi-même. J'ai trouvé cela article très utile. Lisez attentivement l'article et faites attention à la configuration.

Avec ce correctif, tout fonctionnait parfaitement, la seule chose qui me dérangeait était que xinput répertoriait maintenant plusieurs périphériques Genius MousePen i608X.


Deuxième manière (difficile):

Cette méthode est plus difficile dans la mesure où vous devrez éditer quelques fichiers supplémentaires. C'est la manière décrite dans le patch que vous mentionnez.

  1. Suivez les étapes 1 à 3 de la première manière.
  2. Editez le fichier hid-core.c comme ceci:

Naviguez jusqu'au morceau de code qui ressemble à ceci: { 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) },

Et changez ceci en ceci: { 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. Éditez le hid-ids.h de la même manière que la première, mais au lieu d’éditer cette ligne, ajoutez cette ligne après:

#define USB_DEVICE_ID_KYE_MOUSEPEN_I608X_2 0x501A

  1. Editez le fichier hid-kye.c comme ceci:

Trouvez ce morceau de code:

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

et avant cela, ajoutez ceci:

/* 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. Dans le même fichier, trouvez ce morceau de code:
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;

et ajoutez ceci après:

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. Dans le même fichier, trouvez ce morceau de code:
case USB_DEVICE_ID_KYE_EASYPEN_I405X:
  case USB_DEVICE_ID_KYE_MOUSEPEN_I608X:
  case USB_DEVICE_ID_KYE_EASYPEN_M610X:

et changez cela en ceci:

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. Dans le même fichier, trouvez ce morceau de code:
  { 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) },

et changez cela en ceci:

  { 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. Le dernier fichier à éditer est dans le répertoire /path/to/download/linux-"KernelVersion"/drivers/hid/usbhid. Cela s'appelle hid-quirks.c. À l'intérieur, trouvez ce morceau de code:

      { 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 },
    

    et changez cela en ceci:

  { 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. N'oubliez pas de sauvegarder tous les fichiers après l'édition. Vous pouvez maintenant compiler le noyau comme mentionné ci-dessus.

Encore une fois, ce n'est peut-être pas la bonne façon de faire cela, mais comme je n'ai pas trouvé le tutoriel pour le faire correctement, j'ai dû le faire manuellement. Cela a fonctionné pour moi, mais, encore une fois, je ne peux pas garantir que cela fonctionnera pour vous. J'espère que cela vous aide.

2
Ivanwah

Après avoir mis à niveau la version du noyau Linux vers la version 3.18.3-031803-generic, Genius MousePen i608X fonctionne bien.

2
dhiya