我试图在
Linux中控制鼠标. Xlib似乎有效,但是当我尝试使用OpenCV时,它会继续返回:
- Resource temporarily unavailable
所以我决定写“/ dev / psaux”.代码如下:
- #include <unistd.h>
- #include <string.h>
- #include <stdio.h>
- #include <errno.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- int main() {
- unsigned char a[5]={0,0xff,0x28,0xff};
- int fp = open ("/dev/psaux",O_WRONLY);
- if(!fp)printf("open error:%s\n",strerror(errno));
- for(int i = 0; i < 10; i++)
- printf("write:%d\t\t%s\n",write(fp,a,5),strerror(errno));
- close(fp);
- return 0;
- }
编译:
- gcc my_psaux.c -o my_psaux -std=gnu99 -g
运行并得到
- $sudo ./my_psaux
- write:5 Success
- write:5 Success
- write:5 Success
- write:5 Success
- write:5 Success
- write:5 Success
- write:5 Success
- write:5 Success
- write:5 Success
- write:5 Success
但鼠标不动.然后我打开一个新的终端,输入“sudo cat / dev / psaux”并运行“my_psaux”.
但我什么也没有.没有写入“/ dev / psaux”?
有人可以帮我吗
如果这不是一个很好的方法来控制鼠标,有人可以告诉我另一个吗?
解决方法
非常感谢@R ..
提醒我一些其他方式,而不是/ dev / psaux
提醒我一些其他方式,而不是/ dev / psaux
所以我试过/ dev / input / mouse *和/ dev / input / event *
通过使用
- cat /proc/bus/input/devices
我得到这个:
- I: Bus=0003 Vendor=0461 Product=4d81 Version=0111
- N: Name="USB Optical Mouse"
- P: Phys=usb-0000:00:1d.0-1/input0
- S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.0/input/input10
- U: Uniq=
- H: Handlers=mouse2 event10
- B: EV=17
- B: KEY=70000 0 0 0 0 0 0 0 0
- B: REL=143
- B: MSC=10
测试后,只有/ dev / input / event10可以工作.代码如下:
- #include <stdio.h>
- #include <unistd.h>
- #include <linux/input.h>
- #include <errno.h>
- #include <fcntl.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <sys/time.h>
- int main() {
- struct input_event event,event_end;
- int fd = open("/dev/input/event10",O_RDWR);
- if (fd < 0) {
- printf("Errro open mouse:%s\n",strerror(errno));
- return -1;
- }
- memset(&event,sizeof(event));
- memset(&event,sizeof(event_end));
- gettimeofday(&event.time,NULL);
- event.type = EV_REL;
- event.code = REL_X;
- event.value = 100;
- gettimeofday(&event_end.time,NULL);
- event_end.type = EV_SYN;
- event_end.code = SYN_REPORT;
- event_end.value = 0;
- for (int i=0; i<5; i++) {
- write(fd,&event,sizeof(event));// Move the mouse
- write(fd,&event_end,sizeof(event_end));// Show move
- sleep(1);// wait
- }
- close(fd);
- return 0;
- }