问题标签 [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 投票
2 回答
1905 浏览

python - OpenWrt 的 Python Evdev 绑定

再会,

我是一名学生,我想请你抽出一分钟的时间。我正在开发通过 USB 端口连接到板名 Arduino Yun 的条形码阅读器。该板使用名为 Atheros AR9331 的微处理器运行源自 OpenWrt 的嵌入式 linux 版本

我想问一下,要使 Python Evdev 绑定 (python-evdev.readthedocs.org/en/latest/) 能够在这种类型的 MIPS 微架构中运行,需要什么?目前,它仅适用于 Ubuntu 和 ArchLinux。我有点猜测需要交叉编译,或者在这个 linux 中使用特定 C 编译器的指示。
目前 OpenWrt 支持的 python 版本是 2.7.3 我已经知道,如果你在你的 PC 上编译 C 代码,生成的可执行文件只能在这种类型的架构中运行。如果您在微处理器内部使用该编译程序,它将无法工作。我已经在我的 PC 的 ubuntu 中毫无问题地使用了这个绑定。我按照说明,python setup.py install,之前安装了 setuptools,它工作得很好。

但对于 OpenWrt,情况并非如此。

我正在使用的 python 脚本在第一行代码中需要这个库,以便从设备中获取数据(它的工作方式类似于键盘 /dev/input/event0):

#!/usr/bin/env python

from evdev import InputDevice, ecodes, list_devices

from select import select

我已经看到了在 arduino 中复制整个库并在同一文件夹中运行脚本的建议。但它不起作用,因为 evdev 模块具有使用 PC 架构而不是 MIPS 创建的文件。

那么,错误显示的消息是什么?如果您python setup.py install在 Openwrt 中运行以尝试安装 evdev 绑定,则会在屏幕上显示:

File "setup.py", line 10, in <module> from setuptools.command.develop import develop ImportError: No module named setuptools.command.develop

从这里很明显,您需要上述模块。所以,我尝试用这个脚本(pypi.python.org/pypi/setuptools)安装它:

python ez_setup.py

并且输出显示如下: Downloading https://pypi.python.org/packages/source/s/setuptools/setuptools-11.3.1.zip Traceback (most recent call last): File "ez_setup.py", line 332, in <module> sys.exit(main()) File "ez_setup.py", line 327, in main downloader_factory=options.downloader_factory, File "ez_setup.py", line 287, in download_setuptools downloader(url, saveto) File "ez_setup.py", line 209, in download_file_curl _clean_check(cmd, target) subprocess.check_call File "ez_setup.py", line 169, in _clean_check (cmd) File "/usr/lib/python2.7/subprocess.py", line 511, in check_call raise CalledProcessError(retcode , cmd) subprocess.CalledProcessError: Command '['curl',' https://pypi.python.org/packages/source/s/setuptools/setuptools-11.3.1.zip ', '--silent', '--output', '/mnt/sda1/evdev -0.4.6/setuptools-11.3.1.zip']' 返回非零退出状态 60

我认为这个输出是由于 OpenWrt 中的 python 2.7.3 不存在 pypi,仅适用于较新的版本和其他架构。Evedv 绑定需要 setuptools 模块以使事情变得更容易和标准,但是如果目标体系结构不支持绑定,那么无论如何需要什么才能使用它?

谢谢你的时间,

0 投票
0 回答
1027 浏览

python - 如何使用自定义守护进程拦截 Linux 上的键盘输入?

我正在尝试构建一个守护进程,最好使用 Python,它能够绑定到连接到 Linux 机器的特殊键盘。专用键盘是条码扫描器,但具有 HID 接口。

我想避免在机器上运行 X,所以像evdev它的 python 绑定这样的低级别的东西似乎是合适的。

我的建议如下:

  1. 使用自定义 udev 规则生成字符设备,/dev/input/barcode0并修复允许守护程序访问设备的权限。
  2. 用于evdev获取输入。

这种方法可行吗?键盘事件会发生什么?是否可以使用它们以便它们不会传递到机器上正在运行的控制台?

我在 SO 上发现了一个类似问题的问题,但它使用的是我没有的 X 服务器。

0 投票
1 回答
1198 浏览

python - 使用 Python twisted 在 linux 上将 HID 访问与 evdev 集成

在 linux 机器(Debian wheezy)上,我正在尝试编写一个基于事件的服务器,它执行以下操作:

  1. 获取输入设备(特殊键盘)的独占输入,以防止击键进入通常的事件链。

  2. 注册扭曲反应堆中的事件

  3. 在等待事件返回的延迟处注册回调。然后,此回调将在收到特殊键序列后发送 HTTP 请求。

这是pyevdev包中的示例代码。它可以让我收到通知并相应地接收击键。

通过查看read_loop()命令的源代码,它也使用了select类似于 twisted 的语句。

我的问题

如何将此代码集成到 python Twisted 中?一个想法是查看底层字符设备/dev/input/event0并以非阻塞方式从中读取。如果 if 是一个常规文件,我会使用 inotify 类似的东西,但在这种情况下我不知道。

evdev 包中的示例代码

0 投票
1 回答
10714 浏览

python - 如何在 Python 2.7 和 Python 3.3 上安装 evdev?

我正在使用 Raspian 操作系统的 Raspberry Pi 上使用 Python。我安装了evdev-0.4.7它,它适用于 Python 2.7。但是当我为 Python 3.3 尝试它时,我得到了一个错误。显然它只安装在 Python 2.7 上。

我如何也可以evdev在 Python 3.3 上安装?

0 投票
0 回答
644 浏览

raspbian - 在旧树莓派上识别方向盘,但在新树莓派上不识别

我买了一个新的 Raspberry Pi 2 以利用更快的速度。我在旧 Raspberry Pi 上使用的程序evdev也可以在我的新 Raspberry Pi 上运行。

但是我用来访问的方向盘evdev在我的旧树莓派上被识别,但在我的新树莓派上却没有。

两个 Raspberry Pi 都运行 Raspbian。我需要在我的新树莓派上安装什么来让它识别方向盘吗?

我不记得在我的旧 Raspberry Pi 上安装过类似的东西,但方向盘可以正常工作。

更新:我尝试在我的旧树莓派上安装最新版本的 Raspbian,但方向盘无法正常工作。所以问题不在于新的 Raspberry Pi。它是 Raspbian 的新版本。它必须缺少驱动程序或其他东西。但我不知道如何解决它。

UPDATE2:我发现在新版本的 Raspbian 中,方向盘在引导过程中被识别为 USB 设备,而不是 a/dev/input/event*/dev/input/js*.

0 投票
1 回答
364 浏览

python - 在 python 程序中使用 evdev 和 tkinter

我编写了一个 python 程序,它使用 gphoto2 来控制我的相机——所以我可以创建一个照相亭。我没有为用户提供键盘或鼠标输入,而是购买了一个 xin-mo 控制器,这样我就可以提供一个简单的街机风格按钮界面(拍照、拒绝照片、接受照片等)。

python 程序是使用 Tkinter 编写的,我使用 evdev 从 xin-mo 读取输入事件。我用于 xin-mo 事件的代码是这样的:-

它可以工作,按下按钮时我可以做一些事情。

我不知道如何让 evdev 和 Tkinter 一起工作。根据我的发现,我需要调用 mainloop 来呈现 GUI ......但是一旦在 mainloop 中,我如何从 xin-mo 控制器读取输入事件?

我对 python 很陌生,所以我很可能遗漏了一些明显的东西。

谢谢,史蒂夫。

0 投票
2 回答
476 浏览

linux - 将 XInput2 设备映射到 sysfs 节点

如何将 XInput2 设备(例如由 报告的XIQueryDevice)转换为适当的sysfs节点?该设备是通用 HID 设备,由evdev输入驱动程序处理。

我知道我可以得到name设备的。我也许可以查看Xorg.0.log并尝试找到添加此设备时的适当日志消息,希望它提到与该/dev/input/event*设备关联的设备节点。或者我可以查看 中的所有输入事件sysfs,查找具有该名称的事件,并希望该名称是唯一的并且与通过 XInput 报告的名称相同。但我希望有比这两种方法更清洁的解决方案。

0 投票
1 回答
722 浏览

python - python InputDevice fflush

我使用 python-evdev 库来检测键盘事件。

但是我有一个问题,我需要在检测到键后刷新键盘事件。

例子:

如何刷新开发?

0 投票
1 回答
2759 浏览

linux - 在 linux wayland 上模拟鼠标运动

我从我的网络接收 xy 数据,我想在 Wayland 上使用 linux 控制鼠标位置。

我见过许多使用 X 库或 X 应用程序的源代码,但它不适用于 Wayland。我还查看了 libinput 和 evedev,但我没有找到任何关于如何创建/模拟鼠标的代码示例。

0 投票
2 回答
1232 浏览

c - 有没有办法从字符串中获取 evdev 键码?

我想从包含如下数据的文本文件中读取按钮映射:

右边部分实际上是 evdev 键码(定义见<linux/input.h>)。

这很难阅读,所以我希望能够拥有这样的文件:

但我目前无法将它们转换回来:

我如何获得相应的键码(例如105)?有没有标准的方法来做到这一点?

编辑:我现在能想到的唯一方法是复制源代码中的所有键码并将它们放入数组或映射中,就像evtest实用程序一样。但是有很多键码,这对我来说似乎有点矫枉过正。<input/linux.h>此外,这可能与在某些时候定义的键码不同步。