问题标签 [uinput]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 为什么我的代码无法使用 uinput 创建简单的输入设备?
我正在尝试在 linux 中学习使用/dev/uinput并从kernel.org/doc/html/v4.12/input/uinput.html复制简单的代码,如下所示:
它编译并成功运行,没有错误。xinput
但我在终端中找不到使用此命令创建的任何设备。我还检查了/dev/input/,但在执行我的那个程序后没有发现任何变化。
我在 Ubuntu、Kali 上试过。我错过了什么?
c - 让 Xorg 识别 libevdev 虚拟设备
我一直在尝试使用 libevdev 创建一个简单的程序来制作一个虚拟设备,该设备将简单地将鼠标每秒在 X 轴上移动 50 个点。程序运行得很好,但是 Xorg 无法识别新创建的虚拟设备。
我想这将是一件微不足道的事情,但我不知道是什么。
Xorgs 的日志说:
该程序:
我究竟做错了什么?
android - 使用C计算android中屏幕上的活动触摸?
我想计算在任何给定时间出现在屏幕上的手指触摸总数。是否有任何 C 函数可以返回我的数字值,如果我用 3 个手指触摸我的设备屏幕,它应该返回 3 作为答案,如果抬起 1 个手指并再次调用该函数,它将返回2 作为输出。
c++ - uinput + weston (wayland) - 旋转屏幕上的触摸事件导致坐标反转
我需要在weston(wayland)下发送一个虚拟触摸事件。我有一个 1280x800 的屏幕,在 weston.ini 中旋转了 180 度。
我使用 c++ 的 uinput 成功实现了触摸事件仿真:
我在 X:100, Y:100 发送触摸事件。该事件在韦斯顿中正确注册(我使用的是一个简单的网站,它在屏幕上跟踪鼠标事件)但不是在左上角,而是在右下角。就在屏幕的原始 (100,100) 坐标所在的位置 - 因为它旋转了 180 度(这是我无法更改的硬件限制,需要旋转屏幕才能适应外壳)。
我尝试了INPUT_PROP_DIRECT
orINPUT_PROP_POINTER
但没有任何变化的各种组合。
为了使事件在正确的坐标,我需要转换它们:
x = (1280 - x); y = (800 - y);
但我想让它适用于任何类型的屏幕或旋转。我很惊讶,因为我确信是合成器扮演了转换输入事件的角色。在寻找类似问题时,我偶然发现了这些信息:
linux - 如何接收事件作为 uinput 设备?
我目前正在实现一个uinput
基于Linux 的input
设备(evdev
)“驱动程序”,并且除了发送输入事件之外,我希望它能够接收“输出”事件。
在内核中,input
设备通过input_dev
from表示<linux/input.h>
:
以便内核驱动程序可以通过设置轻松处理接收到的事件input_dev::event
(请参阅处理输出事件):
在用户空间中,设备通过基于 - 的界面uinput
进行设置和管理。ioctl
假设“输出”事件是通过write
-ing 从客户端代码发送到设备文件(这是正确的吗?),read
从uinput
基于 - 的实现管理它的文件中 -ing 显然会破坏目的,因为它会消耗自己的事件.
此外,考虑到它可能由所有uinput
基于 - 的驱动程序共享,poll
-ing 和read
-ing from /dev/uinput
(由ioctl
调用使用)也没有意义;特别是当我们一直write
使用它来生成输出事件时。
因此,有没有办法让uinput
设备异步处理接收到的事件?如果可能,是否也可以通过libevdev
?
raspberry-pi - 使用 Uinput 将 GPIO 帽子按钮按下映射到命令行互联网广播播放器中的 raspi 击键
使用 Pimoroni touchphat GPIO hat(https://github.com/pimoroni/touch-phat),我正在尝试使用 uinput 将按钮按下映射到树莓派上的击键,以便控制命令行互联网广播程序和向上或向下滚动选项列表。
按下按钮时成功打印“工作”,但没有显示控制程序的迹象。下面的代码是用 sudo python 编写的,而我希望控制的程序在单独的终端窗口上运行。这可能是问题吗?如果是这样,我如何将两者联系在一起?
“J”在程序中被定义为向上。
xlib - XTestFakeDeviceMotionEvent 是否仅适用于核心指针设备?
我正在寻找是否可以使用 XTest 从设备伪造 ABS_X/ABS_Y 数据。XTestFakeDeviceMotionEvent 是否允许我这样做,或者这是否严格用于指针设备(例如伪造鼠标输入)?
如果仅用于指针设备,那么拥有 2 个以上的轴有什么用?换句话说,指针设备需要 2 个以上的轴吗?
linux - 模拟 Gamepad 按钮在没有 uinput 的情况下按下 linux
我想在 linux 中模拟游戏手柄按钮按下。我在没有uinput
加载内核模块的环境中运行。我可以只使用 XTEST 发送 X11 事件吗?
c - 关闭 uinput 设备时出现 IOCTL 错误
我们正在测试创建/关闭 uinput 设备的 C 代码,但遇到了一个奇怪的问题。我们有一个与 uinput 库交互的基本 api:
当我们单独测试这些功能中的每一个时,它们都可以正常工作。
然后我们编写了一个 api,它应该稍后用作 python 模块:
当我们测试init_uinput_device
andclose_uinput_device
函数时,调用函数时会出错ioctl(fd, UI_DEV_DESTROY, NULL)
。返回的 errno 如下:
Inappropriate ioctl for device
有谁知道错误可能在哪里?
我们已经测试,事件发射部分没有产生错误,唯一的问题是设备的破坏。我们还检查了,设备在 /dev/input 中正确创建
我们正在使用 arm-linux-gnueabihf-gcc 作为编译器在 Rapsberry Pi4 上进行开发
c - 使用 libevdev 在 android 上抓取触摸事件的预定义函数错误
我正在尝试创建一个假触摸设备,用于从原始设备中抓取和写入所有用户触摸事件。我正在尝试为此目的使用 libevdev,但在编译过程中出现很多错误,如下所示,
libevdev.c:在函数“libevdev_event_type_get_name”中:libevdev.c:1724:9:错误:未声明“ev_map”(在此函数中首次使用)1724 | 返回 ev_map[类型];| ^~~~~~ libevdev.c:1724:9:注意:对于出现在 libevdev.c 中的每个函数,每个未声明的标识符仅报告一次:在函数'libevdev_event_code_get_name'中:libevdev.c:1735:9:错误:' event_type_map' 未声明(在此函数中首次使用) 1735 | 返回 event_type_map[类型][代码];| ^~~~~~~~~~~~~~ libevdev.c:在函数'libevdev_event_value_get_name'中:libevdev.c:1752:9:错误:'mt_tool_map'未声明(在此函数中首次使用)1752 | 返回 mt_tool_map[值];| ^~~~~~~~~~~ libevdev.c:在函数'libevdev_property_get_name'中:libevdev.c:1761:9:错误:'input_prop_map'未声明(在此函数中首次使用)1761 | 返回 input_prop_map[prop]; | ^~~~~~~~~~~~~~ libevdev.c:在函数'libevdev_event_type_get_max'中:libevdev.c:1770:9:错误:'ev_max'未声明(在此函数中首次使用)1770 | 返回 ev_max[类型];
顺便说一句,这些是 libevdev 库本身中的预定义函数。这些显然是从数组中返回一个对象,但是这些数组没有定义!谁能指出这些错误的正确方向?或者用于使用 uinput 实现 Type B 多点触控协议。我已成功实现 A 类,但面临 B 类问题,由于 epoll 挂断事件,新设备被立即添加和删除。