问题标签 [evdev]
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.
c - 为测试目的伪造输入设备
我想做的事
我正在编写一个守护进程,它监听输入设备的按键并通过 D-Bus 发送信号。主要目标是通过请求更改或通知更改来管理音量和屏幕背光级别。我使用libevdev来处理输入设备事件。
我编写了一个用于打开位于指定路径的输入设备的函数:
该函数运行良好,但是当我为它编写单元测试时,我想创建具有不同属性(文件的存在、读取访问等)的文件夹具来检查我的函数和内存管理的错误处理(如我将数据存储在一个结构中)。
我已经做了什么
但是使用真实输入设备(位于 /dev/input/event*)测试它需要root访问权限。在 /dev/input/event* 文件上为每个人设置读取权限是可行的,但对我来说似乎有风险。以 root 身份执行我的测试更糟糕!
使用作品创建设备,mknod
但需要以 root 身份完成。
我还尝试使用字符特殊文件(因为输入设备就是其中之一)允许所有人读取(例如 /dev/random、/dev/zero、/dev/null 甚至我当前使用的终端设备:/dev /tty2)。
但是这些设备不处理ioctl
libevdev 所需的请求:EVIOCGBIT是第一个返回错误“设备的 ioctl 不合适”的请求。
我在寻找什么
我希望能够以普通用户(执行单元测试的用户)的身份创建设备文件。然后,通过设置访问权限,我应该能够针对不同类型的文件(只读、不允许读取、错误的设备类型等)测试我的函数行为。如果看起来不可能,我肯定会使用私有助手重构我的函数。但是怎么做。有什么例子吗?
谢谢。
编辑:我试图更好地表达我的需求。
cygwin - cygwin /dev/input/eventX 功能
有谁知道 cygwin 是否具有类似于 Linux 上的 /dev/input/eventX 的功能?我可以在网上找到的唯一参考是:http ://polarhome.com/service/man/?qf=input-linux-evdev&tf=2&of=Cygwin&sf=7 。但是我一辈子都想不出如何安装这个包(或者如果它甚至是我需要的)。任何帮助将不胜感激!
linux - 为什么在使用 read() 命令之前无法清除缓冲区?(linux、evdev-input、读取、刷新)
请执行我的英语我不是本地人。
Linux 输入设备: /dev/input/event0 或 /dev/input/by-id/usb-Logitech_G29_Driving_Force_Racing_Wheel-event-joystick
问题:我不想读取缓冲数据。
亲爱的 Stackoverflow,
1 - 我在 linux 上打开了一个输入设备。
2 - 我编写了一些代码将设备向左或返回中心。(它是游戏轮,所以当我打开应用程序时,我必须确保轮子位于中心)
3 - 我关闭了文件描述符并打开完全相同的设备以不读取旧的缓冲数据。
4 - 当我想通过读取功能获取数据时,我得到的是当我将设备转到中心时得到的旧缓冲数据。(第一个位置是 0,当我想转动轮子到中心时,它从 0 变为 35000)
那么如何在不编写第二个应用程序的情况下清除缓冲数据呢?因为如果我编写了两个应用程序,第一个应用程序将设备轮设置为中心,第二个应用程序用于获取数据,所以一切都很好。我的意思是,如果我关闭来自不同应用程序的文件描述符,linux 会清除数据,但如果我在同一个应用程序上尝试此操作,则会有缓冲区。
我试图清除缓冲区的内容:
- 首先,我尝试在 google、stackoverflow 上搜索并阅读几乎所有内容。
- 同步()
- fflush(stdin) 和 fflush(stdout)
- ioctl(fd, I_FLUSH, FLUSHRW)
- tcflush(fd, TCIOFLUSH)
- 阅读前关闭(fd)。(我认为这是因为相同的应用程序,linux 给了我相同的文件描述符。如果我退出程序并再次运行所以没有缓冲区)
$ gcc -o test_prog test.c && ./test_prog
$ cat /proc/bus/输入/设备
c - Modern way to read gamepad input with C on Linux
I am interested in reading gamepad input, specifically a gamepad with the layout of a wired xbox 360 controller, with C on a linux machine. I understand that this can be done in a variety of ways, however I was wondering what is the modern method of accomplishing this.
As I understand it, evdev
is the 'future' while the Joystick API is legacy. Using libudev
I am able to find attached gamepads and detect when they are connected and disconnected:
The crux of my question lies in the best way to read button presses and axis movement.
Currently, I am unsure whether to use struct js_event
or struct input_event
. In truth, I was hoping to be able to do this with the same check for connected and removed gamepads with libudev
. If this is not possible, which is the most forward-thinking approach?
Thanks.
python - 在设备功能中寻找字符串;开发者;Python
在 evdev 中,我试图检查是否插入了鼠标和键盘,如果有,则将设备路径分配给要使用的变量。这工作了一段时间,因为我刚刚使用此代码检查了设备名称中的鼠标或键盘名称
插入不同的鼠标后,我发现他们并没有都说鼠标在里面,我想知道是否有一种方法可以将名为“BTN_RIGHT”的字符串与设备功能进行比较。我输入的不起作用的代码会是这样的。
请帮助我弄清楚如何更容易地检测鼠标,或者实际上能够搜索它的功能并将它们与其他字符串进行比较!
python - 将 evdev 输入转换为可理解的信息
所以我已经成功地能够使用以下代码跟踪鼠标和键盘事件
当按下一个键或移动鼠标时,我从这段代码中得到的数据如下:
我的问题是如何转换这些数据或分析数字以获得像实际密钥一样的良好输出。类似于分析 1550702472.xxx 数字以获取某个密钥或以下数字。
更新:当我说 print(categorize(event)) 我得到这个:
仍然是同一个问题,如果 KEY_L 这样做,我可以用什么数组来表示。
python - 未声明局部变量 - 无法使用任何当前堆栈解决方案修复
我知道这是一个在这里被多次询问的问题,但即使在查看并尝试使用本网站上的所有解决方案之后,也无法解决我的问题。这是我的代码:
运行此循环时出现的错误是:
任务异常从未检索到未来:.print_events() 完成,定义在 etho.py:113> exception=UnboundLocalError("local variable 'a' referenced before assignment",)>
Traceback(最近一次调用最后):
文件“/ usr /lib/python3.5/asyncio/tasks.py”,第 239 行,在
_step 结果 = coro.send(None)
文件“etho.py”,第 124 行,在 print_events
if x += 1:
UnboundLocalError: local variable ' x' 在赋值之前引用
无论我在哪里分配变量或声明它,当我尝试在 if 语句中使用它或添加它时,它都会引发错误,但当我将它设置为等于数字时不会。我认为这与它所处的奇怪循环有关。
python - ImportError:无法导入名称“InputDevice”-Evdev
我在我的 Raspberry Pi 3 B+ 上安装了 evdev,带有sudo -H pip install evdev
. 安装正常,我跑去python /usr/local/lib/python2.7/dist-packages/evdev/evtest.py
看看它是否正常工作。一切都很好。
问题是在执行此 Python 代码时:
我得到这个错误作为答案:
但是当我from evdev import InputDevice, categorize, ecodes
在 python shell 上执行时,它似乎可以工作。我究竟做错了什么?我该如何解决这个问题?
谢天谢地,戴维。
python - Python evdev 找不到设备
我正在使用 python 编写游戏,我需要使用evdev监视键盘事件。我是这个库的新手,所以我在线学习了教程。以下是教程中提到的脚本:
但是,运行代码后,list_devices() 的输出为None,这表明我的电脑(戴尔笔记本电脑)上没有输入设备。为什么?
python - TypeError:“InputDevice”对象不可迭代
我将在问题之前将我的整个函数粘贴到这里。
基本上我的问题在这个部分
当我假设 event_det 等于 2 尝试运行此代码时,我收到此错误
假设我同时插入了键盘和鼠标,它将运行良好(event_det = 1)。为什么它只尝试运行一个事件(keyboardEvent)时给我错误我应该如何在这里更改我的代码。