【问题标题】:KeyBoard events in Ubuntu aren't working?Ubuntu 中的键盘事件不起作用?
【发布时间】:2021-07-31 16:02:22
【问题描述】:

我正在 Qt5.15 中创建一个跨平台应用程序来监控用户活动。我的代码在 Windows、Mac 和 Raspberry Pi-Desktop-version(Debian) 中运行良好,但在涉及 ubuntu 键盘事件和鼠标单击事件时不起作用。请注意,我的应用程序在用户工作时在后台运行。

#define MOUSEFILE "/dev/input/event4"
#define MOUSEMOVEFILE "/dev/input/js1"
#define KEYBOARDFILE "/dev/input/event0"

包含头文件

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <linux/input.h>
#include <linux/input-event-codes.h>
#include <fcntl.h>

对于键盘事件代码

class KeyboardHook:public QThread
{
    Q_OBJECT
    void run() override
    {
        int fd;
        struct input_event ie;

        if((fd=open(KEYBOARDFILE,O_RDONLY))==-1)
        {
            //qDebug()<<"opening device";
            exit (EXIT_FAILURE);
        }
        while(read(fd,&ie,sizeof(struct input_event)))
        {
           // qDebug()<<"Keyboard Activity";
            if(ie.code==EV_KEY)
            {
                DateAndTime::s_previousActivity=QDateTime::currentDateTime();
                GlobalHook::timeNow.start();
            }
             msleep(500);
        }
    }
};

但是鼠标移动是有效的。代码相同,唯一不同的是 KEYBOARDFILE 替换为 MOUSEMOVEFILE 并且不使用下面的 if 语句

if(ie.code==EV_KEY)

如果我不使用上述检查键盘,我会得到持续的键盘活动,即使键盘没有被触摸。

以上代码在 Debian 中正常运行。

打字时

ls -la /dev/input/by-id and ls -la /dev/input/by-path

我得到了

当我输入xinput 时,我得到了

我的 ubantu 安装在 virtual-box 中

【问题讨论】:

  • 您需要发布指向完整代码集的链接。什么版本的 Ubuntu? 20.04 的存储库中只有 Qt 5.12.8。 Debian Qt 维护者退出了,所以目前 Debian 家族中不会有未来的 Qt 更新。我问是因为如果您从头开始构建 Qt 5.15,您可能会在配置时引入问题。我打算在 20.04 LTS 下的 5.12 上构建你的东西​​,看看它是否有效,然后在 Manjaro 上尝试。 Manjaro 有 5.15.2,我已经设置了一台机器。如果您运行的是较新的 Ubuntu,我必须进行设置以帮助您。
  • 在我的 Ubuntu 笔记本电脑(Focal)上,event0 是盖子。当您输入ls -la /dev/input/by-id 时,您会看到什么?还有ls -la /dev/input/by-path?
  • @alle_meije 问题已编辑,我尝试从 event0 到 event12 但没有运气
  • 不确定,也许stackoverflow.com/questions/29678011 的代码可以让您找到正确的号码?
  • 为什么要在后台监控用户?那不是脏东西吗?隐私?

标签: c++ linux qt


【解决方案1】:

你的支票

if(ie.code==EV_KEY)

应该是

if(ie.type==EV_KEY)

type 会告诉您事件的类型,例如按键或鼠标移动。

code 会告诉你按下了哪个键。

【讨论】:

    猜你喜欢
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2020-03-31
    • 2017-01-03
    相关资源
    最近更新 更多