微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Linux虚拟鼠标驱动程序

我正在尝试根据Essential Linux设备驱动程序书实现一个虚拟鼠标驱动 程序 。 有一个用户空间应用程序,它产生坐标以及一个内核模块。

请参阅: 虚拟鼠标驱动程序和用户空间应用程序代码,并逐步了解如何使用此驱动程序。

1.)我编译用户空间应用程序和驱动程序的代码

2.)接下来我检查了dmesg输出结果,

模拟点击而不点击

如何检测在Linux中的鼠标和键盘不活动

我怎样才能模拟在x,y坐标,使用sendinput的双击鼠标(我khow句柄)上的双击鼠标?

自定义鼠标光标的阴影(2)

编程检测鼠标和键盘是否插入

input:未指定的设备作为/ class / input / input32

虚拟鼠标驱动程序初始化

3.) sysfs节点是在初始化期间正确创build的(在/sys/devices/platform/vms/coordinates )

4.)我知道虚拟鼠标驱动程序( input32 )通过检查以下内容链接event5

$ cat / proc / bus / input / devices

I:总线= 0000供应商= 0000产品= 0000版本= 0000

N:Name =“”

P:Phys =

S:Sysfs = / devices / virtual / input / input32

U:Uniq =

H:处理程序=事件5

B:EV = 5

B:REL = 3

5.)接下来,我将GPM服务器连接到事件接口: gpm -m /dev/input/event5 -t evdev

6.)运行用户空间应用程序为虚拟鼠标生成随机坐标,并使用od -x /dev/input/event5观察生成的坐标。

没有任何反应。 为什么? 另外在这里作者提到应该停止gdm ,使用/etc/init.d/gdm stop ,但是当停止gdm时,我得到“没有这样的服务” 。

这里是我build立和运行虚拟鼠标的完整脚本:

make -C /usr/src/kernel/2.6.35.6-45.fc14.i686/ SUBDirs=$PWD modules gcc -o app_userspace app_userspace.c insmod app.ko gpm -m /dev/input-event5 -t evdev ./app_userspace

Makefile文件

obj-m+=app.o

内核版本: 2.6.35.6

正如我之前所说,我可以通过od收到的结果,但我通过你的程序收到它回声9> / sys / devices / platform / virmouse / vmevent

得到:

时间1368284298.207654types2代码0值9

时间1368284298.207657types2代码1值19

时间1368284298.207662types0代码0值0

所以现在的问题是:X11有什么问题? 我想强调的是,我在两个不同的发行版Ubuntu 11.04和Fedora 14下试过这个代码

也许这将有助于:在Xorg.0.log我看到以下内容

(21.022)(II)未指定input驱动程序/标识符(忽略)

(II)config / udev:添加input设备(/ dev / input / event5)

(II)没有指定input驱动器/标识符(忽略)

(II)config / udev:添加input设备(/ dev / input / event5)

(II)没有指定input驱动程序/标识符(忽略)

linux:双鼠标 – 多鼠标指针的鼠标?

阅读隐藏在Windows(hidapi)上的鼠标/键盘

喂养一个鼠标驱动程序备用数据在Linux中

如何在Windows上抓住鼠标

鼠标双击不工作相当好

尝试在输入设备驱动程序中替换下面的代码

set_bit(EV_REL,vms_input_dev->evbit); set_bit(REL_X,vms_input_dev->relbit); set_bit(REL_Y,vms_input_dev->relbit);

vms_input_dev->name = "Virtual Mouse"; vms_input_dev->phys = "vmd/input0"; // "vmd" is the driver's name vms_input_dev->id.bustype = BUS_VIRTUAL; vms_input_dev->id.vendor = 0x0000; vms_input_dev->id.product = 0x0000; vms_input_dev->id.version = 0x0000; vms_input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); vms_input_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE); vms_input_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y); vms_input_dev->keybit[BIT_WORD(BTN_MOUSE)] |= BIT_MASK(BTN_SIDE) | BIT_MASK(BTN_EXTRA); vms_input_dev->relbit[0] |= BIT_MASK(REL_WHEEL);

它在Ubuntu 12.04上为我工作

我花了很多时间,解决了这个问题,我想帮助其他人解决这个问题。 我认为一些外部X11功能干扰了我的模块工作。 禁用GDM后,它现在工作正常(运行级别3)。 工作代码,你可以在这里找到http://fred-zone.blogspot.ru/2010/01/mouse-linux-kernel-driver.html工作发行ubuntu 11.04(gdm禁用)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐