问题标签 [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.

0 投票
1 回答
179 浏览

python - 从守护进程线程返回结果,观察 evdev 输入事件

我正在尝试返回守护程序线程的结果。我正在使用 evdev 来监视触摸输入事件,如果触摸事件超过 0 个,那么我想返回 True。我正在尝试将列表作为 arg 传递给线程的目标函数,在这个版本中,我将附加到列表中。但是,我RuntimeError: There is no current event loop in thread在第一次触摸时不断收到错误。

我该如何解决这个问题,一旦我解决了这个错误,它会起作用吗?作为一个额外的问题,这是最好/最简单的方法吗?

编辑:我已经设法通过在线程中创建一个循环来消除运行时错误。此外,使用 Bhargav 的建议,我可以将结果作为全局变量。所以我的代码目前是这样的:

但是,根据我的附加问题,这是正确的方法吗?我相信人们会说这里要避免使用全局变量。另外,我怎样才能在我之前杀死线程print(results)?以上stop_event.set()似乎不起作用

0 投票
1 回答
984 浏览

python-3.x - Python:从活动窗口外的 HID 设备获取输入?

描述

我使用 Kivy 框架并在 Python 3 中运行一个脚本,该脚本从 HID 设备读取输入。该设备是条码扫描仪,模拟键盘。

问题

该脚本同时在后台打开一个弹出窗口和条形读取程序。每次读取条形码的尝试都必须在活动窗口中。在我的情况下,这是提示(控制台)。这意味着我必须单击控制台窗口,然后阅读器才能工作。无论我如何从主脚本(方法、线程、子进程、Clock.schedule_once)调用读取过程,都会发生这种情况。如何在提示窗口之外获取输入,例如在控制台外的主 kivy gui 中?

这些其他帖子确实有帮助,但没有提供答案:

  1. 如何使用 evdev 从 Python 中的 HID 设备获取字符串?
  2. python : 从 USB HID 设备读取
  3. 如何使用 evdev 从 Python 中的 HID 设备获取字符串?
  4. 在 Python 中窗口“失焦”时读取 HID 输入

代码

用作str = input("")子进程:

用作evdev.ecodes.EV_KEY子进程:

0 投票
1 回答
208 浏览

ubuntu - 在虚拟机(VM)Ubuntu上读取鼠标/键盘事件

基本上我需要读取鼠标和键盘事件,因此程序会知道您何时按下键或滚动。

它在我的物理机上运行良好,但当我通过 Remmina VNC(来自 Ubuntu)连接到虚拟机(在我的情况下为 VMware)时不显示任何事件。尽管如此,鼠标和键盘在 VM 中都照常工作。我已经尝试连接到所有可用的设备,/dev/input但它仍然很安静。然后我用evtest测试了所有设备并得到了相同的结果 - 没有。

我不认为这取决于我的代码,但我使用了这个

有可能实现这一目标吗?也许我错过了一些重要的事情?任何帮助、文章或链接将不胜感激。


更新:我最近尝试过xinput

还有另一个设备,称为Virtual core XTEST pointerVirtual core XTEST keyboard它实际上在xinput test <ID>. 这些设备未在 中列出/proc/bus/input/devices,因此我希望对您有所帮助。

0 投票
0 回答
839 浏览

python - 在 python 中初始化 libevdev 以便设备可以有多个工具工作

我一直在研究基于 python 的驱动程序,以便在一些旧平板电脑中恢复一些功能。

我正在初始化如下

然而当

发送后,xinput 中会列出一支笔而不是鼠标,尽管随后

工作,再次将输入工具设置为鼠标后,将忽略发送的位置数据。

只有钢笔和橡皮擦有效。我是否以某种方式初始化了这个错误?在 Ubuntu 20 和 FreeBSD 12 上测试

0 投票
0 回答
167 浏览

python - python evdev 写入/注入输入设备的速度是否有限制?

我有一个使用 evdev 模拟游戏手柄按钮按下的 python 程序。使用的设备是xbox usb 游戏手柄“克隆”的,通过使用ui = evdev.UInput.from_device(...)

但由于某种原因,印刷机有时似乎不一致。

下面是我用来模拟 A 按钮点击的功能:

如果我完全删除sleep's,似乎根本不会注册任何印刷机。尽管0.01似乎也太快了,导致它似乎不时注册/跳过点击。(我只是使用 jstest-gtk 来观察它的行为)

这是我测试功能的方法:

那么有没有办法找出应该用来让它持续工作的最佳时间呢?

或者问题可能不在于我的代码,而在于其他软件的轮询率(在本例中为 jstest-gtk)

一个可能相关的问题:

使用 Python evdev 模拟控制器 dpad 按钮

0 投票
1 回答
24 浏览

python - Python 函数工作正常,但导入时除外

我试图将其提炼为要点。这段代码工作正常。

但是,如果我将操纵杆函数移动到单独的文件(包括正确的 evdev 导入)并导入它,代码会中断(函数“操纵杆”将始终返回 false,无法识别操纵杆事件)。

任何想法为什么?我知道软件/硬件接口可能很棘手,但这很荒谬。

0 投票
1 回答
196 浏览

python - Python evdev 库是否具有特定于事件的抓取或直通?

python evdev 设备有一个 .grab() 函数,可以防止其他进程获取设备上的输入事件。有没有办法将其限制为来自设备的特定事件?

对于我的示例,如果我 .grab() 一个具有压力感应和倾斜以及侧面 2 个单击按钮的笔输入设备,我将如何仅“抓取”两个单击按钮,但让其余的输入(提示,压力敏感度和倾斜度)是否被系统的其他部分正常捕获?

我的一个笔按钮通常是右键单击鼠标事件。我想让它做其他事情,但它仍然会弹出右键菜单,所以我试图弄清楚如何阻止它。

当事件发生时,我尝试进行抓取和取消抓取。喜欢事件 > 抢 > 做我的事 > 取消抢。但这显然为时已晚,操作系统仍然会弹出菜单。

我尝试进行完全抓取,然后在事件循环中,如果它是一个按钮按下做我的工作,否则通过将事件传回系统来创建一个 UInput 事件注入。这有点混乱。需要许可。当我终于克服了这个问题时,运动被抵消了,压力/倾斜不起作用......我认为这与实际上使这些东西工作的 DigiMend 驱动程序和/或我必须传递给的 xinput 设置有关校准数位板。但我对从头开始编写所有压力/倾斜功能或类似的东西不感兴趣,所以我需要 DigiMend 的东西才能正常工作。所以我暂时放弃了这个想法。

我唯一的另一个想法是弄清楚为什么操作系统默认为它所做的行为,看看我是否可以手动禁用这些操作(即为什么它认为该按钮是鼠标右键单击并让它认为该按钮什么都不是.)

所以我想这是一个3级的问题。

  1. 我可以在选择事件而不是整个设备上实现抓取功能吗?
  2. 如果直通的想法更好,有没有办法实现这一点而无需进行任何权限修改并能够传递确切的事件(即没有偏移量等我经历过?)
  3. 如果 evdev 没有这种能力,或者以另一种方式更容易做到,比如以某种方式禁用操作系统中笔的默认设置,我愿意接受建议。如果有帮助,我正在使用 Kubuntu 20.04。

任何帮助将不胜感激,如果需要更多信息,请告诉我,在此先感谢!

0 投票
1 回答
82 浏览

python - 为什么 Python try-except 会导致速度变慢?

我在 python3 中为我的 RaspberryPi 编写了一个简单的应用程序。我的 rpi 进行了全新安装,并且在开始开发之前我已经完成了所有更新。此应用程序是一个显示在 LED 矩阵上的体育记分牌,并利用蓝牙游戏控制器和 evdev 模块进行输入控制。

蓝牙输入运行良好,并且 100% 响应,但如果断开连接,应用程序将崩溃,因为它无法再访问 /dev/input/event0(这是游戏手柄输入)。

我在代码中添加了 try-except Exception,它解决了崩溃问题,并在游戏手柄断开连接时允许代码继续运行。这引入了两个我需要帮助的新问题。

  1. 大约 10% 的游戏手柄输入现在没有注册。有时必须按两次按钮才能注册。

  2. 控制台中的 Ctl-C 不会停止代码执行。我将在控制台中得到以下信息:

    KeyboardInterrupt: ^CException 在: <function InputDevice. 删除0x757d6588>

如果我删除了除了游戏手柄读取之外的尝试,它将正常工作,直到游戏手柄断开连接。这是有问题的代码。

0 投票
1 回答
32 浏览

python-3.x - 从函数中获取多个变量值或信息的最佳方法

我对 python 相当陌生,正在尝试创建一个自定义模块,我可以使用 evdev 为我的树莓派导入该模块(不是那么重要)。我的问题是我需要一个好方法来知道何时按下给定按钮,最好使用 True/False。如果我要导入此模块并使用 read_stream() 函数,那么能够收集多种类型的输入的最简单方法是什么。(只是为了澄清,gamepad.read_loop() 每次迭代只返回一个值。

0 投票
0 回答
705 浏览

python-3.x - 问:在 Python 中将字符串写入 HID 设备?

我有一个带有 2 根天线(ant1、ant2)的 RFID 阅读器,连接到充当 HID USB 键盘的 RPi4(raspbian)。在这些帖子之后,我设法阅读了它的天线输出:

  1. 如何使用 evdev 从 Python 中的 HID 设备获取字符串?
  2. 使用 PyUSB 发送 HID 报告
  3. USB HID 设备仅触发 1 个事件

Python3中使用evdev模块连续读取天线的代码如下:

上面代码的输出是:

为了控制阅读器并能够读取单个天线,我必须向设备发送一个字符串。该字符串是十六进制的,需要转换为字节拳头:

我已经检查了evdev涵盖注入输入键按下但看不到如何关联的文档。如何使用 evedev 向设备发送字节字符串?