Articles of 键盘

X获取并发送按键C ++

我想为Linux做一个文本replace程序。 即我input类似.alog的东西,它被replace为/ usr / local / apache / logs /。 我知道我可以用alaises做到这一点,但是我经常远程login那些没有这个问题的机器。 我也有兴趣做这个学习的目的。 我在网上看到一些关于抓取的信息,并在X中发送了一个窗口的按键,但在工作区中找不到所有窗口的信息。 任何build议如何做到这一点将不胜感激。

检测控制台应用程序中的按键?

我需要在控制台应用程序中检测按键,而不会提示用户。 基本上,我的应用程序通常是一个监听特殊input设备的守护进程,但是我需要在交互模式下使用键盘在开发箱上进行仿真。 我怎样才能做到这一点? – 我在一个Linux系统上。

VirtualBox如何处理来宾Linux的中断?

我正在练习在VirtualBox guest Linux中编写简单的键盘驱动程序。 问题是,我的代码只是注册一个中断处理程序,并打印scancode到日志文件。 而且我不会将这些传入的扫描码发送到任何上层的代码,比如Linux input core 。 insmod ,我可以看到使用dmesg捕获的扫描码。 但为什么我的terminal仍然得到正确的input? terminal不应收到任何东西。 我的代码如下所示: static int __init init_simple_keyboard_driver(void) { free_irq (IRQ_1, NULL); return request_irq (IRQ_1, my_handler, …); } static irqreturn_t my_handler(int irq, void *dev_id) { unsigned char scancode = get_scancode_from_port_0x60(); printk(…scancode…); } 在insmod之后,我可以在内核日志中看到消息。 我的free_irq调用导致一些消息Can't free already freed IRQ 。 (我不知道为什么…它不应该被释放) atkbd司机抱怨说有人要求处理IRQ_1 。 那些扫描码可以正确打印。 [最奇怪的]主动控制台仍然得到正确的键盘input。 因此,我可以使用这个简单的驱动程序来执行一个rmmod 。 […]

用Python访问Linux中键盘LED的替代方法

我在Linux中创build了一个Python程序,可以使NumLock LED闪烁。 代码如下所示: import fcntl import os import time # Define variables for keyboard and NUM_LOCK LED KDSETLED = 0x4B32 NUM_LED = 0x02 # Open the "keyboard console" for LED toggling console_fd = os.open('/dev/console', os.O_NOCTTY) def blink(tme, cnt): secs = tme/cnt for i in range(cnt): fcntl.ioctl(console_fd, KDSETLED, 0) time.sleep(secs) fcntl.ioctl(console_fd, KDSETLED, NUM_LED) if i < […]

python脚本来检测热插拔事件

我试图使用python来检测鼠标和键盘事件,并容忍检测过程中的热插拔动作。 我编写这个脚本来在运行时自动检测键盘和鼠标插件,并输出所有的键盘和鼠标事件。 我使用evdev和pyudev包来实现这个function。 我有我的脚本主要工作,包括键盘和鼠标事件检测和插件检测。 然而,每当我拔出鼠标,许多奇怪的事情发生,我的脚本不能正常工作。 我在这里有几个混淆。 (1)当鼠标插入系统时,/ dev / input /文件夹中会生成两个文件,其中包括./mouseX和./eventX。 我试图猫来看到这两个来源的输出,确实有差异,但我不明白为什么Linux将具有./mouseX即使./eventX已经存在? (2)每当我拔掉我的鼠标,首先是./mouseX unplug事件,我没有在evdev中使用,这导致了脚本失败,因为./eventX(其中我读取脚本中的数据)是同时拔掉,但我只能在下一轮检测到./eventX。 我用一个技巧(我的脚本中的variables)绕过这个问题,但即使我可以成功删除鼠标设备,select.select()开始无尽的input阅读,即使我没有键入任何东西。 下面列出了脚本(根据上一篇文章的回答进行了修改),敬请关注! #!/usr/bin/env python import pyudev from evdev import InputDevice, list_devices, categorize from select import select context = pyudev.Context() monitor = pyudev.Monitor.from_netlink(context) monitor.filter_by(subsystem='input') monitor.start() devices = map(InputDevice, list_devices()) dev_paths = [] finalizers = [] for dev in devices: if "keyboard" in […]

在Linux上testing是否按键没有阻塞

我正在search如何testing是否按下了一个键。 testing不应该阻止程序。 我可以使用一个小库,如果它不是太重,但不幸的是,ncurses是太多的依赖引入。

在内核模块中没有键盘中断

我正在做一个项目,根据收到的键盘中断进行一些操作。 所以我注册了键盘中断,并将中断标记为共享。 但是我的程序没有按照它应该的工作。 为了debugging这个问题,我编写了一个小程序,只要注册键盘中断,并在收到键盘中断时向内核输出一些消息。 但是当中断率很高的时候,我发现很多键盘的中断都被遗漏了。 例如,在下面的示例代码中,当“a”被按下时,我注册中断并输出消息给内核。 从计数器值来看,总的中断次数less于键盘产生的实际中断次数。 我通过将按键回显到terminal并计算回应给terminal的a的数量来发现这一点。 因此,例如,如果在terminal上有350个回声,则计数将只有300-320。 更高数量的中断也是如此。 中断的数量越多,错过的中断越多,但错过的中断的百分比似乎在所有情况下几乎相等。 有人可以解释这是什么原因吗? 提前致谢。 以下是源代码。 #include <linux/kernel.h> #include <linux/interrupt.h> #include <linux/module.h> #include <linux/signal.h> #include <asm/io.h> /* The keyboard ISR */ irq_handler_t irq_handler (int irq, void *dev_id, struct pt_regs *regs) { static int count = 0; static unsigned char scancode; scancode = inb (0x60); if (0x1E == […]

C每个Unicode字符的xtest发射按键

我想制作一个程序来模拟按键。 我认为我大部分都做完了,但是我做了一些错误,我猜是因为它没有做我期望的事情。 我举了一个小例子来说明这个问题。 主要的问题是,如果我想要生成大写字母,它不适用于像'zZ'这样'zZ'string。 它只产生小写字母'zz' 。 虽然符号像'! $ & _ >' '! $ & _ >'等工作正常(这需要我的德国键盘布局),甚至像”💣“多字节的。 我正在做的是这样的: 前言: 所以基本上模仿按键的主要问题首先是从用户到用户的布局,最重要的是修改键。 所以,如果你走上天真的路线,用XStringToKeysym()得到一个keysym和XKeysymToKeycode()并从那个keysym中获取一个XKeysymToKeycode()并且它不像大多数新手所期望的那样工作(像我一样)。 这里的问题是,多个keysyms被映射到相同的keycode。 就像'a'和'A'的keysysm被映射到相同的键码,因为它们在键盘上的相同物理button上,并且链接到该键码。 所以,如果你走上面的路线,你会得到相同的键码,虽然keysyms是不同的,但映射到相同的button/键码。 而且通常没有办法解决这个问题,因为不清楚'A'是如何存在的。 shift + a或caps + a,或者你有一个花式键盘,上面有一个'a'和'A'button。 另一个问题是我如何发出按键甚至没有运行该应用程序的人的键盘按键。 如果我想input'Ä' (德语变音符号),就像在英文版面上按什么键。 这是行不通的,因为XKeysymToKeycode()不会为此返回一个合适的键码,因为这个布局没有键盘映射。 我的方法: 我正在绑定什么来绕过这个是find一个没有被使用的键码。 你有255-8的keycodes在你的处置,但一个普通的键盘上只有~110键,所以通常还有一些空间。 我正试图find在当前布局未映射的键码之一,并使用它来分配我自己的键盘。 然后我从我的字符得到一个keysym我迭代了我的string,并将其传递给XStringToKeysym() ,这给了我适当的keysym。 在大多数情况下,“💣”不映射到我知道的任何键盘布局。 所以我把它映射到未使用的键码,并用XTestFakeKeyEvent()按下并重复该string中的每个字符。 这可以与所有花式字形人们可以想到的,但它不能用简单的字母,我真的不知道为什么:(在我的debugging会话中,键盘和键码似乎是正确的,只是XTestFakeKeyEvent()不做在这种情况下,我可能会把事情搞砸,但我不确定这里的问题是什么,我希望有人有一个好主意,可以帮助我find一个可行的解决scheme。 我只是在strings数组中使用这个unicode符号,因为我不想在这里的例子中处理这个。 假设有任何inputstring产生的代码。 请注意,下面的代码可能会破坏你的键盘映射,使你无法键入和使用键盘了,需要重新启动你的X-Server / PC …我希望它不处于当前状态在这里工作很好)只要知道如果你拨弄的代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include […]

创build一个自定义的setxkbmap选项

奇怪的是,这似乎应该是以前做的事情:我想交换键盘上的1 – 0键上的数字和符号 ,以便: 当我按6键时,input*而不是6 。 当我按Shift + 6时 ,数字6将显示而不是* 。 还有其他几个我想做的修改,但是很快就发现其他人在使用setxkbmap选项之前已经完成了这些布局修改(比如caps:swapescape )。 鉴于上述情况,这是一个由3部分组成的问题: 有没有在我的键盘的第一行交换数字和符号的选项? 无论有没有,有没有办法find这样的事情,而不必手动浏览/usr/share/X11/xkb/rules/的*.lst和*.xml文件? 最后,如果我要为setxkbmap创build一个选项,那么这将是一个理想的方法,我将如何看待将我的选项提供给社区? 至于问题3: 我试图创build的选项没有成功( setxkbmap默默地失败,我甚至没有信心在我的方法)。 我无法find项目的托pipe位置。 除了man setxkbmap和涉及这个主题的各种博客文章之外,我还找不到任何这方面的文档。

在Linux中作为守护进程在python中捕获键盘input

我想知道是否有任何python模块允许无中断地访问键盘中断。 我想制作一个文本到语音的程序,也许是那里的盲人程序员,并且想知道如何实时抓住按键。 有像Windows的pyHook的东西,但我用什么Linux? 理想情况下,我应该能够在Windows中获得诸如KB_UP的事件。 我喜欢逆戟鲸,但我想devise一个更适合我需求的文本到语音转换。 如果python不存在这样的事情,我应该select什么语言来实现这样的程序? 我听说pyGame的键盘input,但我希望我的程序招致最小的开销,并在后台工作。