uinput 工作的填坑记录:

用uinput 键盘支持都不错,没废事。但鼠标滚轮事件死活不对。折腾半天,最终搞定,上关键代码

  1. 设备配置:
    int create_uinput(void)
    {
    int i;
    int ret = 0;

    uinput_fd = open("/dev/uinput", O_RDWR | O_NDELAY);
    if(uinput_fd < 0){
    printf("%s:%d\n", func, LINE);
    return -1;//error process.
    }

    //to set uinput dev
    memset(&uinput_dev, 0, sizeof(struct uinput_user_dev));
    snprintf(uinput_dev.name, UINPUT_MAX_NAME_SIZE, “uinput-custom-dev”);
    uinput_dev.id.version = 1;
    uinput_dev.id.bustype = BUS_VIRTUAL;

    ioctl(uinput_fd, UI_SET_EVBIT, EV_SYN);
    ioctl(uinput_fd, UI_SET_EVBIT, EV_KEY); // kbd press
    // ioctl(uinput_fd, UI_SET_EVBIT, EV_REP); // kbd repeat report
    ioctl(uinput_fd, UI_SET_EVBIT, EV_REL); // kbd release

    for(i = 0; i < 256; i++){
    ioctl(uinput_fd, UI_SET_KEYBIT, i);
    }

    ioctl(uinput_fd, UI_SET_RELBIT, REL_X); // mouse x
    ioctl(uinput_fd, UI_SET_RELBIT, REL_Y); // mouse y
    ioctl(uinput_fd,UI_SET_RELBIT, REL_WHEEL);

    ioctl(uinput_fd, UI_SET_KEYBIT, BTN_MOUSE);
    ioctl(uinput_fd, UI_SET_KEYBIT, BTN_TOUCH);
    ioctl(uinput_fd, UI_SET_KEYBIT, BTN_MOUSE);
    ioctl(uinput_fd, UI_SET_KEYBIT, BTN_LEFT);
    ioctl(uinput_fd, UI_SET_KEYBIT, BTN_MIDDLE);
    ioctl(uinput_fd, UI_SET_KEYBIT, BTN_RIGHT);
    ioctl(uinput_fd, UI_SET_KEYBIT, BTN_FORWARD);
    ioctl(uinput_fd, UI_SET_KEYBIT, BTN_BACK);

    ret = write(uinput_fd, &uinput_dev, sizeof(struct uinput_user_dev));
    if(ret < 0){
    printf("%s:%d\n", func, LINE);
    return ret;//error process.
    }

    ret = ioctl(uinput_fd, UI_DEV_CREATE);
    if(ret < 0){
    printf("%s:%d\n", func, LINE);
    close(uinput_fd);
    return ret;//error process.
    }
    }

  2. 上报鼠标滚轮事件:

void mouse_wheel(short wheel_value){
struct input_event event;
/* Move pointer to (0,0) location */
memset(&event, 0, sizeof(event));
gettimeofday(&event.time, NULL);
event.type = EV_REL;
event.code = REL_WHEEL;
event.value = wheel_value;
write(uinput_fd, &event, sizeof(event));
event.type = EV_SYN;
event.code = SYN_REPORT;
event.value = 0;
write(uinput_fd, &event, sizeof(event));
}

基于uinput 实现远程键鼠相关推荐

  1. Python 实现键鼠操作

    Python 实现键鼠操作 前言 需要的库 直接上代码 小结 前言 前几天玩的按键精灵由于版本太老,不兼容UTF8编码,就用python来封装了一些键鼠操作. 需要的库 time pyautogui ...

  2. 实验四 基于PPTP的远程VPN实现【网络安全】

    实验四 基于PPTP的远程VPN实现[网络安全] 前言 推荐 实验四 基于PPTP的远程VPN实现 使用: 配置CentOS PPTP服务端 配置CentOS PPTP客户端 常见问题 浏览器无法打开 ...

  3. Synergy配置过程--实现跨电脑的键鼠互通操作

    目录: 前言: Synergy介绍 配置流程 设备名更改 服务器端设备配置 客户端设备配置 成功展示 一些问题解决方法和参考资料 前言: 小伙伴们,你们是不是有种需求和烦恼:当多台电脑(笔记本)使用时 ...

  4. 基于单片机智能灯光光控照明系统设计、基于单片机HX711电子秤自动计价系统设计、基于单片机GPRS远程测控系统设计、基于单片机多功能循迹避障无线遥控蓝牙智能小车-设计资料

    基于单片机智能灯光光控照明系统设计 智能光控照明系统设计原理: 本系统采用STC89C52系列的单片机为核心,利用BH1750传感器测量实时光照强度,并将亮度的模拟信号转化成数字信号,大大减少了系统的 ...

  5. Python的自动化键鼠

    基于 Python,实现自动化键鼠,用于简化机械的单点,双击,删除等交互操作,通过开线程方式增加扩展性并可随时中止程序. 使用以下的技术 pyautogui 自动化图形交互界面编程 threading ...

  6. 【树莓派开发日记1】1.3k预算的树莓派+显示屏+键鼠的选型与拆箱物理安装

    树莓派开发日记1 经过了漫长的上课与考试周期,终于有时间闲下来进行技术栈的开发与学习 作为立志成为优秀机器人开发者的青年工程师(青春版),不可能不去了解微机处理系统和Ubuntu系统,所以在此又给自己 ...

  7. 基于单片机HX711电子秤自动计价系统设计-基于单片机GPRS远程测控系统设计-818基于单片机循迹避障无线遥控蓝牙智能小车-基于单片机24s倒计时篮球积分器系统-基于单片机智能洗衣机控制系统

    816基于单片机HX711电子秤自动计价系统设计 本设计使用高精度电阻应变式压力传感器,用A/D转换器HX711(HX711数据手册)对传感器信号进行调理转换.AT89s52(AT89s52数据手册) ...

  8. macOS系统互操作性增强,一套键鼠就能控制Mac和iPad

    苹果展示通用控制(universal control)是wwdc21大会最吸引人的功能,随着滑动鼠标,光标从 Mac 无缝滑到了 iPad Pro 上,并且还能将 iPad 上的图片直接拖拽经过 Ma ...

  9. 键鼠大师脚本图片识别键鼠自动

    众所周知,键鼠大师就是一个简单的脚本制作工具,日常生活中我们玩游戏或者是去工作,无法免除一些繁琐的过程,那么有没有什么办法,可以代替我们去做这些事情? 答案是有的,键鼠大师可以识别图片.模拟我们的键鼠 ...

最新文章

  1. C语言中的位运算和逻辑运算
  2. 《ASCE1885的网络编程》---Winsock APIのIP地址转换函数
  3. 【刷题记录】杂题记录
  4. C++0x FAQ中文版:什么时候C++0x会成为一部正式的标准呢?
  5. JSON动态解析()
  6. 【开发工具】SCALA
  7. 一份其实很短的 LaTeX 入门文档
  8. SAP CRM Pricing Procedure中的Doc和Customer Procedure在哪里维护
  9. mysql不使用swapp的原因_SolidWorks不能使用的原因
  10. rt-n18u usb3.0 linux ex,2.4G王者 华硕 AUSU RT-N18U 评测
  11. 计算机组成原理页表长度,计算机组成原理(2)-虚拟存储器
  12. 思科修复严重的企业 NFVIS 缺陷
  13. JAVA大数据-Week2-DAY5
  14. java applet插件下载_Java Applet.zip
  15. incaseformat病毒分析
  16. Spring全面详解(学习总结)
  17. python控制电脑音量,声音之控制音量,,
  18. 【3dmax千千问】初学3dmax插件神器第18课|VRAY渲染教程|疯狂模渲大师用3dmax插件神器的扫描线渲染器该怎么表现效果图的写实效果?
  19. 计算机桌面空白地方鼠标右击没有属性选项,电脑右键没有属性选项_电脑右键没有显卡属性...
  20. RAID10磁盘阵列损坏修复操作

热门文章

  1. Spark中dataframe里data.drop()和data.na.drop()的区别
  2. JS sojson.vX在线解密工具-附源码
  3. [原创]可动态显示圆形图像或圆形文字的AvatarImageView
  4. 安卓玩机搞机技巧综合资源-----干掉手机广告 禁用 冻结 关闭内置软件【八】
  5. Python使用技巧(十一):图像处理skimage模块库的安装与使用
  6. UE4 蓝图编程官网初级练习目录
  7. 36块砖,36人搬,男搬4,女搬3,两个小孩抬1砖,要求一次搬完, 问:男、女和小孩各几个?
  8. 法硕(非法学)值不值得考?
  9. 【公开课预告】:GVoice 千万在线语音传输的那些事
  10. win7全角/半角符号切换快捷键