一台机器上有多个离散键盘输入

时间:2013-08-24 19:15:10

标签: linux keyboard usb xorg input-devices

背景

我正在10月举办一场大型活动,并计划通过一个系统来监控参加者以及人们在建筑物内的安全状况,该系统可读取我所在组织中的每个人都有的mifare卡片。为此,我找到了一个廉价的mifare读取器,它读取卡片的特定扇区并以十六进制形式返回数据,我可以将其转换为字符串然后发送到服务器进行处理和记录。到现在为止还挺好。然而,有近2万人参加此次活动,这意味着需要进行大量扫描,因此需要将许多mifare读取器连接到计算机上以读取数据并发送。理想情况下,我想将大约3或4个读者连接到一台机器上,其中大约有三到四个,每个入口/出口都有一个。

我需要帮助做什么:

我的读卡器在Windows和Android上充当通用键盘(我假设Linux,但我要检查一下),计算机本质上就好像它有多个键盘,所有键盘都可以同时输入数据,但只有一个程序(即屏幕上有一个插入符号)。如果同时扫描两张卡并且每张卡的击键“混合”并因此导致处理问题,则可能导致问题。

我想要做的是设置一个有多个插入符号的linux盒子,这样我就可以说四个命令行同时从一个读卡器中获取数据。

例如:如果John和Saira同时扫描,那么结果输入可能是:

  

j s o a h i n r a

我希望它是:

CLI 1:

  

约翰

CLI2:

  

秋刀鱼

等。 CLI3,CLI4

我知道这一定是可能的,我看看有可能设置一个多席位的Linux发行版,但我觉得这将使用大锤解决问题,并创建一个新问题,因为它引入了需求监视器,鼠标等。

理想情况下,我希望整个系统尽可能简化,无论是运行笔记本电脑还是只需要插入的Linux机箱,启动并自动运行(无需显示器,鼠标或其他笨重的点点滴滴!)。

有没有人有这方面的经验或他们可以提供的建议?任何帮助将不胜感激!

谢谢,

的Dom

1 个答案:

答案 0 :(得分:1)

再次来到这里。我现在使用Python很容易解决这个问题。如果您需要更多建议,请联系我,但基本要点是使用Python中的evdev模块直接访问硬件(在这种情况下,我已经设置了一个名为ActiveReader的类来处理每个读者)。然后,使用多处理模块设置不同的进程,分别处理每个读卡器。

处理位的代码如下 - 它是早期的代码,需要一些额外的工作,我在这里故意简短而甜蜜,作为尝试做类似事情的人的参考!

# imports etc
from evdev import InputDevice, categorize, ecodes
from ActiveReader import ActiveReader
from multiprocessing import Process

# for the reader
dev = InputDevice('/dev/input/event4')

def new_device_process(device_name):
    print device_name
    device  =   InputDevice (device_name)
    print device.name
    someDevice  =   ActiveReader(device)


if __name__ == "__main__":

    # put in a process here to work on updating the database

    # set this up with Monitoring module to detect when devices are plugged in/unplugged etc.
    p1      =   Process(target=new_device_process, args=('/dev/input/event4',))
    p1.start()
    p2      =   Process(target=new_device_process, args=('/dev/input/event5',))
    p2.start()