在虚拟机 (VM) Ubuntu 上读取 mouse/keyboard 个事件

Reading mouse/keyboard events on Virtual Machine(VM) Ubuntu

基本上我需要读取鼠标和键盘事件,所以程序会知道您何时按下按键或滚动。

它在我的物理机上运行良好,但当我通过 Remmina VNC(来自 Ubuntu)连接到虚拟机(在我的例子中是 VMware)时没有显示任何事件。尽管如此,鼠标和键盘在 VM 中照常工作。 我已尝试连接到 /dev/input 中的所有可用设备,但仍然很安静。然后我用 evtest 测试了所有设备并得到了相同的结果 - 没有。

我不认为,这取决于我的代码,但我使用了这个 library

有可能实现吗?也许我错过了一些重要的事情?任何帮助、文章或链接将不胜感激。


更新:我最近尝试了 xinput:

xinput list

还有另一种设备,名为 Virtual core XTEST pointerVirtual core XTEST keyboard,它们实际上在 xinput test <ID> 的帮助下显示了事件。 /proc/bus/input/devices 中未列出这些设备,希望对您有所帮助。

所以,我已经使用命令 xinput test Virtual core XTEST pointerxinput test Virtual core XTEST keyboard 为 xinput 实现了一个监听器。正如我从 this article 所读到的,每个主设备都有一个 Virtual core XTEST....

我正在使用 QT,代码如下所示:

...
mouseProcess = new QProcess(this);
mouseProcess->setProcessChannelMode(QProcess::MergedChannels);

// Listen to output of process with function ReadOut()
connect(mouseProcess, SIGNAL(readyReadStandardOutput()), SLOT(ReadOut()));
mouseProcess->start("xinput", QStringList() << "test" << "Virtual core XTEST pointer");
...


void ReadOutMouse() {
    QByteArray out = mouseProcess->readAllStandardOutput();
    QString output(out);
    if (output.contains("button press"))
        emit mouseEvent();
}

...

// The same is for Keyboard:
void ReadOutKeyboard() {
    QByteArray out = keyboardProcess->readAllStandardOutput();
    QString output(out);
    if (output.contains("key release"))
        emit keyboardEvent();
}