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

0 投票
1 回答
2022 浏览

c - Lib(s)uinput:创建具有多个按钮的操纵杆

我找不到信息,如何使用uinput/创建带有几个按钮的操纵杆suinputpython使用示例python-uinput

如您所见,在此示例中使用BTN_JOYSTICKas 按钮。以及如何创建第二个按钮/附加两个ABS_X/ ABS_Y

注意:我以我python为例,应用程序语言Clibsuinput.

0 投票
1 回答
626 浏览

c - 鼠标指针在 uinput 子系统中移动后无法模拟 Click 事件

下面的代码很简单,但我看不到客户端事件的发生。但是,我看到鼠标指针移动到给定的相对值。

参考:

http://thiemonge.org/getting-started-with-uinput

在这个链接中,有一个我使用过的示例代码 uinput-sample.c,并稍微修改为点击事件而不是移动 20 次绝对值。

我错过了什么?

0 投票
1 回答
2746 浏览

c++ - 如何使用输入子系统生成击键事件

我正在 Linux 中编写键盘模拟器程序,作为开始,我能够将击键渲染到 X11 窗口中,但这在虚拟终端中不起作用并尝试不同的方式。我参考了http://thiemonge.org/getting-started-with-uinput并尝试使用 uinput 内核模块。根据教程,击键可以作为 uinput 事件注入,我相应地编写了下面的代码。

在这种情况下,我正在尝试为击键“d”生成一个 uinput 事件。但是随着程序的执行,我什么也看不到。有人可以帮我验证这个程序。在本教程中也不清楚如何使用 uinput 子系统注入击键。

编辑:我写了一个不同的程序,但我看不到任何输出。我迷路了,任何帮助表示赞赏。

0 投票
0 回答
182 浏览

c - uinput - 鼠标坐标同步问题

我正在编写一个程序来远程控制一个基于 arm 的设备,该设备上没有运行 X 服务器。我编写了一个小实用程序来捕获从客户端发送的鼠标事件并在设备上模拟它们。为此,我正在使用 uinput。

我面临的问题是,手臂设备上的光标最初位于(300,300)。当我连接到设备时(使用 chrome 中的 VNC 插件),客户端在浏览器上的鼠标指针位于(100、100)处。两个鼠标指针位置(在浏览器和设备上)之间的对角线距离为 200px。这个差距一直保持着。如果我将指针向右移动 10 像素(从 100,100 到 110, 100),则设备上的鼠标指针从 300,300 移动到 310,300。我不确定这可能是什么原因。唯一没有发生此问题的情况是,当我确保两个鼠标指针最初从相同的坐标开始时(比如从窗口的任何一个角开始。

这是所有与uinput相关的代码:

X 服务器运行时不会发生此问题。我很好奇是什么原因造成的。任何帮助是极大的赞赏。谢谢。

0 投票
1 回答
1282 浏览

c - 将 Char 转换为内核 Keycode(供 uinput 使用)

我正在尝试在 Debian Stretch 上使用 uinput 做一个虚拟键盘,我可以用字符串输入,比如“Toto!”,键盘会写这个字符串。但是,我坚持将 C 字符转换为键盘处理的键码。我没有使用在 event-codes.h 中定义的宏,因为我希望我的解决方案在计算机的区域设置上工作,并且宏是围绕美式键盘定义的。

这是使用 uinput 创建的设备:

我已经尝试过使用 X11 库的解决方案,如以下链接所示: 将 ASCII 字符转换为 x11 键码 不幸的是,我使用 uinput 创建的键盘与 X11 使用的键码不同。(我认为我的键盘采用与使用 dumpkeys 命令相同的键码)。当然可以将 X11 键码转换为我的键盘正确解释的(内核?)键码,但我想保持低依赖项的数量。

我现在正在尝试使用linux.h中描述的 EVIOCGKEYCODE,但我很难理解它是如何工作的,而且我认为它与我真正想要的相反。

这是一个例子:

我收到以下错误:“evdev ioctl:无效参数”。我在某处读到它是 PS2 键盘使用的一种旧方法,所以这可能是它不起作用的众多原因之一。

我考虑的最后一个解决方案是在我以后可以使用的表或映射中解析转储键的结果,但我认为我会遇到性能问题,并且我不想重新创建可能已经存在的东西。

任何想法 ?

0 投票
1 回答
760 浏览

linux - 将 epoll 与设备 (/dev/event/...) 一起使用是否有效?

我正在开发一个创建代理虚拟设备(更准确地说是虚拟Xbox 360键盘)的单线程进程小程序;我确实设法使用uinput接口创建它,我正确设置它并且它工作得很好。

为了向这个虚拟设备提供命令,我从另一个真实接口(在本例中为PS3键盘)读取事件,并使用以下标志打开真实设备文件:

主循环类似于(减去错误检查):

正如您可以想象的那样,这read(fd, &ev, sizeof(struct input_event));是一个阻塞调用,我希望有一种超时来循环循环并检查其他事件/执行其他代码。

由于这些原因,我正在考虑将该read(fd...调用封装在epoll循环中,这样我也可以有一个超时。

问题是,这样做会有效吗?通过使用epoll_wait,我是否会在当前循环中引入额外的延迟,从而延迟虚拟垫的响应速度?

0 投票
0 回答
1404 浏览

linux - uinput 并通过 chmod 或规则设置文件权限

我在这里使用 evdev 和 uinput编写了一个伪和弦键盘重映射器。我不想让我的普通用户读取和写入 /dev/input/event* 和 /dev/uinput 的权限,所以我创建了一个新用户 (hopr),其唯一目的是运行程序。在尝试使其工作时,我注意到 uinput 的一些非常特殊的行为,我希望有人可以解释。

为了确保这是关于 uinput 而不是别的,我使用 python-evdev 编写了一个简单的测试脚本:

我还创建了一个名为 hopr 的新用户和一个名为 uinput 的新组,并将 hopr 添加到组 uinput 和 input(以读取事件)。计划是将 /dev/uinput 的组更改为 uinput,并且该组只有 rw 权限。两个用户的组是:

首先,我只是尝试在不更改组且在 /etc/udev/rules.d 中没有额外规则的情况下运行脚本。默认情况下,XUbuntu 16.04 中 /dev/uinput 的权限对于用户 root 和组 root 是 rw。

看到我的普通用户能够运行脚本但新用户不能运行,我有点惊讶。接下来,我使用 chmod为每个人添加了 rw 权限:

好的,正如预期的那样。接下来,我再次为所有人删除了 rw 并使用 chown将组更改为 uinput :

同样,这是出乎意料的,但情况变得更糟。接下来,我再次为每个人添加了 rw 权限,但保留了组 uinput

现在我真的很困惑,但是使用 chown将组更改回 root使它再次工作

显然这里有些东西我不明白,所以我也尝试使用 /dev/udev/rules.d 中的规则正确设置它:

令我惊讶的是,现在一切都(几乎)按预期工作!受限的 hopr 用户可以在没有 rw 权限的情况下运行程序。唯一的问题是为什么我的普通用户也可以运行它。

所以,我的问题是:

  1. 为什么我的默认用户可以使用 /dev/uinput 尽管文件权限说我不应该能够?我该如何关闭它?
  2. 为什么我不能只是 chown 组?为什么我必须在 /etc/udev/rules.d 中使用规则?
  3. chmod/chown、rules 和 uinput 到底发生了什么?为什么受限制的 hopr 用户不能使用 uinput,尽管当组被 chown 为 uinput 时,每个人都 rw,但是当组是 root 时它可以?
  4. 在 /etc/udev/rules.d 中使用规则是设置它的正确方法吗?我可以期望这样的设置适用于所有/大多数 linux 版本吗?我注意到 Ubuntu 15.04 对 /dev/uinput 有不同的默认权限。
0 投票
0 回答
125 浏览

python - uinput 没有输出

当我从uinput运行此示例代码时:

我希望这个词HELLO会出现,但我什么也没看到。我试过了:

我究竟做错了什么?

(我在 Ubuntu 16.04 上)

0 投票
1 回答
275 浏览

python - 无法让 Kodi 接受从 python-uinput 发出的键?

我正在使用 python-uinput 从 python 脚本中发出键。基本的东西,例如上/下/输入/ esc。

据我所知,这在我的桌面、终端和浏览器上都可以正常工作。但是当我运行 Kodi 时,它似乎根本没有响应。这与它是全屏应用程序有关吗?

注意:我在模型 3 Raspberry Pi 上运行 Raspbian。

0 投票
1 回答
946 浏览

c - 在 linux 中使用 C 和 uinput 库模拟击键

我一直在使用以下 C 代码来尝试在 CentOS 6.0 机器上模拟击键:

如果我是正确的,这段代码应该在机器上创建一个虚拟输入设备,然后按该设备上的“1”键。当我执行代码时,它似乎运行没有任何问题(我没有在我的示例代码中包含检查以确保正在创建设备和正在编写击键等的代码,因为它会太长了),但我看不到任何实际击键的迹象。

我的印象是,如果我在直接登录到机器时从终端窗口运行它,我应该会在运行它的终端窗口上看到一个“1”字符。如果我通过 ssh 登录机器并以这种方式运行,则击键应该在机器上而不是 ssh 会话上注册。但在这两种情况下我都没有得到任何东西。

我误解了这段代码的目的吗?我做错了吗?还是我需要添加更多才能正确模拟击键?