当前位置: 首页 > news >正文

Linux模拟输入设备

开启虚拟输入设备...

内核需要配置 Input support -> User level driver for input devices

/dev/uinput 是 Linux 内核中的一个设备驱动,它允许用户空间程序创建和操作虚拟输入设备。通过 /dev/uinput,可以模拟键盘、鼠标等输入设备的事件。这通常用于测试或自动化脚本,以模拟用户输入。

#include <fcntl.h>
#include <linux/input.h>
#include <linux/uinput.h>
#include <stdio.h>
#include <unistd.h>int main() {int fd;struct uinput_user_dev uidev;struct input_event ev;/* 打开 uinput 设备 */fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK);if (fd < 0) {perror("Error opening /dev/uinput");return 1;}/* 配置虚拟设备 */memset(&uidev, 0, sizeof(uidev));strncpy(uidev.name, "Virtual Keyboard", UINPUT_MAX_NAME_SIZE);uidev.id.bustype = BUS_USB;uidev.id.vendor = 0x1234;uidev.id.product = 0x5678;uidev.id.version = 1;/* 写入设备配置 */write(fd, &uidev, sizeof(uidev));/* 启用 uinput 设备 */ioctl(fd, UI_DEV_CREATE);/* 发送按键事件 */ev.type = EV_KEY;ev.code = KEY_A; // 可以修改为需要模拟的按键ev.value = 1;    // 按键按下write(fd, &ev, sizeof(ev));ev.type = EV_SYN;ev.code = SYN_REPORT;ev.value = 0;write(fd, &ev, sizeof(ev));ev.value = 0;    // 按键释放write(fd, &ev, sizeof(ev));ev.type = EV_SYN;ev.code = SYN_REPORT;ev.value = 0;write(fd, &ev, sizeof(ev));/* 销毁设备 */ioctl(fd, UI_DEV_DESTROY);close(fd);return 0;
}

【知识扩展】

1.控制器(接键鼠)透传到采集器,采集器通过USB(OTG)模拟键鼠控制主机
hid协议实现,控制器hidapi接口(libusb-1.0.20和hidapi-libusb库)读hid数据通过网络传输给采集器,采集器通过hid gadget驱动(linux)或单片机实现
USB Gadget Support->HID function (NEW)
2.控制器(接键鼠或U盘)直接透传到主机 
1)usbip驱动实现,相当于本地插入usb设备
2)如果只有键鼠,在主机端虚拟一个input设备(uinput驱动,通过/dev/uinput虚拟出/dev/input/eventx),从控制器读取event数据通过网络传输给主机并写入虚拟设备
3)模拟U盘(内存区域)通过USB给主机。usb gadget驱动(linux)


http://www.mrgr.cn/news/12028.html

相关文章:

  • EmguCV学习笔记 VB.Net 6.2 轮廓处理
  • python-opencv读写图像中文路径的问题
  • yd云手机登录算法分析
  • SpringBoot2:依赖管理与自动配置
  • 【网络安全】XML-RPC漏洞之盲SSRF
  • 一篇精通Ansible之playbook
  • P2709 小B的询问
  • 知识图谱问答召回机制-GraphRAG
  • AIGC:Flux.1 NF4 使用 diffusers 推理
  • 观察者模式(Observer Pattern)
  • xss-labs通关攻略 11-15关
  • 代码随想录 -- 哈希表 -- 四数相加 II
  • 使用canal增量同步ES索引库数据
  • 主场竞争,安踏把背影留给耐克
  • centos7安装Kafka单节点环境部署三-安装Logstash
  • mysql 导入excel文件 navicate
  • Python 爬虫 示例
  • 如何使用Redis实现乐观锁?
  • 已解决org.xml.sax.SAXNotRecognizedException异常的正确解决方法,亲测有效!!!
  • 惠州本地专业的企业管理咨询公司