AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 547041
Accepted
dhiya
dhiya
Asked: 2014-11-08 19:34:24 +0800 CST2014-11-08 19:34:24 +0800 CST 2014-11-08 19:34:24 +0800 CST

手写板/MousePen 在 Ubuntu 中不工作

  • 772

我的问题几乎与此处相同,错误 1391260

Genius MousePen i608X 在 Ubuntu 中不工作

我的操作系统是 Ubuntu 14.10。指针移动,但未感应到任何按钮。

它似乎与该供应商的其他平板电脑共享相同的魔法 HID

我可以有一个下载和安装补丁文件的分步过程吗?

编辑:在我将 linux 内核版本升级到 3.18.3-031803-generic 后,Genius MousePen i608X 运行良好。

drivers
  • 2 2 个回答
  • 2479 Views

2 个回答

  • Voted
  1. Best Answer
    Ivanwah
    2014-11-20T11:43:53+08:002014-11-20T11:43:53+08:00

    这可能不是正确的程序,但我设法让它工作。我会发布它,如果你喜欢冒险,你可以这样做。

    我有两种方法可以做到这一点,但我不能保证它们会为你工作,因为我仍然认为自己是新手,而且我是按照其他人的指南来做到这一点的。

    警告:这包括编译自定义内核。确保至少安装了一个或多个旧内核,以防万一出现问题!


    第一种(简单)方法:

    1. 从Linux Kernel Archives下载内核源代码。只需单击“最新稳定内核”按钮。
    2. 提取存档:打开终端并导航到您下载内核的位置并运行此命令:(tar -xvJf linux-"KernelVersion".tar.xz替换"KernelVersion"为下载内核的版本号)。
    3. 这将创建一个新文件夹,通常命名为 linux-"KernelVersion"(同样,这是下载内核的版本号)。输入该文件夹,然后导航到驱动程序 > 隐藏。你现在应该在/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
  2. dhiya
    2014-11-22T06:21:32+08:002014-11-22T06:21:32+08:00

    升级linux内核版本到3.18.3-031803-generic后,Genius MousePen i608X可以正常使用

    • 2

相关问题

  • Ubuntu 中的科胜讯调制解调器

  • 如何解决联想笔记本电脑上恢复/电源问题时禁用的蓝牙?

  • 如何为 LG X130 上网本安装 relink 无线驱动程序

  • 类似于 Eyefinity 的东西?

  • 在哪里可以找到 Brother HL-2170W 64 位打印机驱动程序?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve