欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > linux >内容正文

linux

鼠标在linux下如何工作,Linux操作系统下的鼠标操作

发布时间:2025/4/5 linux 24 豆豆
生活随笔 收集整理的这篇文章主要介绍了 鼠标在linux下如何工作,Linux操作系统下的鼠标操作 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

本不想写这些玩意儿,其实我并不喜欢它们,只不过没办法,谁叫我是靠这些家伙糊口的呢!

若干年前,我自认为很喜欢Linux操作系统;若干年后,我发现我当初是何等的天真。

恩,一分钱,一分货!我坚信这一点!所以我现在坚持用MS的Vista,正版的哦!

言归正传,前段时间因为工作,需要在Linux下操作鼠标,当然啦,肯定不会是在X-window下操作,那样的话也就不会有这篇文章的存在了。我要做的就是在Console下面得到鼠标的坐标。百度、谷歌都用上了,可就是找不到相关的资料。无奈之下,只能拿起Linux的内核啃代码了。下面是这段时间的成果:

1. 关于"/dev/input/mice"

相信很多人都用过Linux,也许你发现不管是在X-window下面,还是在Console下面,鼠标都是可以操作的。那么你有没有考虑过这些鼠标都是从哪来的?

不错!他们都是从"/dev/input/mice"这个文件里来的。如果你对Linux比较熟,那么你肯定看得出来这是一个设备文件。"mice"就是Linux下面鼠标的设备文件,不管你用的是PS2的还是USB的,所有关于鼠标的操作都被抽象到"mice"这个文件中。

2. "mice"之母

"mice"之母是谁?female mouse? 当然不是!在linux下面,她是"mousedev.c"这个文件。你可以在内核的"Drivers/input"目录里找到她。在她那里,你可以得到关于"mice"的一切。但是我想99%的人对于"mice"他妈到底是干嘛的是不会感兴趣的。所以我就不废话了。如果你有兴趣,可自行翻阅。

3. 坐标

如何得到mouse的当前坐标值?可通过如下几步:

1)打开"/dev/input/mice"文件。

2)读3个字节。三个字节的值分别是“Button类型”,“X的相对位移”,“Y的相对位移”。这里先用Button, xRel, yRel表示。

3)取Button的低3位(Button & 0x07)。0x00 = LeftButtonUp, 0x01 = LeftButtonDown, 0x02 = RightButtonDown.

4)因为这里取得是相对位移,所以X, Y要分别与上一次的坐标值相加。xPos += xRel; yPos +=yRel.

好了,到这里完成了一次读取操作。具体的代码请参见附录一。附录二介绍一下gpm。

我很奇怪为什么在网上找不到这方面的资料,关于gpm的资料也是寥寥无几。

附录一:

#include

#include

#include

#include

#include

#include

#include

int main()

{

int fd, retval;

char buf[6];

fd_set readfds;

struct timeval tv;

fd = open("/dev/input/mice", O_RDONLY);

if(!fd)

{

printf("Failed to open \"/dev/input/mice\"\n");

return -1;

}

while(1)

{

FD_ZERO(&readfds);

FD_SET(fd, &readfds);

tv.tv_sec = 5;

tv.tv_usec = 0;

if((retval = select(fd+1, &readfds, NULL, NULL, &tv)) == 1)

{

if(read(fd, buf, 6) <= 0)

{

continue;

}

printf("Button type = %d, X = %d, Y = %d\n", (buf[0] & 0x07), buf[1], buf[2]);

}

}

close(fd);

return 0;

}

附录二:

gpm是linux console下的鼠标操作服务。用它可以实现copy和paste操作。你也可以用gpm提供的API得到鼠标的坐标。但这些API的原理也是跟上面讲的一样,都是操作mice文件。

总结

以上是生活随笔为你收集整理的鼠标在linux下如何工作,Linux操作系统下的鼠标操作的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。