使用Linux虚拟鼠标驱动程序

我正在尝试根据Essential Linux设备驱动程序手册实现虚拟鼠标驱动程序.有一个用户空间应用程序,它生成坐标和内核模块.

请参阅:Virtual mouse driver and userspace application code以及有关如何使用此驱动程序的step by step.

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

2.)接下来我检查了dmesg输出并且,

input: Unspecified device as /class/input/input32
Virtual Mouse Driver Initialized

3.)sysfs节点在初始化期间正确创建(在/ sys / devices / platform / vms / coordinates中找到)

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

$cat /proc/bus/input/devices
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name=””
P: Phys=
S: Sysfs=/devices/virtual/input/input32
U: Uniq=
H: Handlers=event5
B: EV=5
B: REL=3

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

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

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

这是我构建和运行虚拟鼠标的完整脚本:

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收到结果,但我通过你的程序收到了它
echo 9 19> / SYS /设备/平台/ virmouse / vmevent

得到:

时间1368284298.207654类型2代码0值9

时间1368284298.207657类型2代码1值19

时间1368284298.207662类型0代码0值0

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

也许这会有所帮助:在Xorg.0.log中,我看到以下内容:

[21.022](II)未指定输入驱动程序/标识符(忽略)

[272.987](II)config / udev:添加输入设备(/ dev / input / event5)

[272.987](II)未指定输入驱动程序/标识符(忽略)

[666.521](II)config / udev:添加输入设备(/ dev / input / event5)

[666.521](II)未指定输入驱动程序/标识符(忽略)

解决方法:

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

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上对我有用

上一篇:云顶之弈换中立python脚本


下一篇:javascript – 鼠标右键单击Firefox触发点击事件