【问题标题】:Reading mouse/keyboard events on Virtual Machine(VM) Ubuntu在虚拟机(VM)Ubuntu上读取鼠标/键盘事件
【发布时间】:2023-03-19 15:47:01
【问题描述】:

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

它在我的物理机上运行良好,但当我通过 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 中列出,因此希望对您有所帮助。

【问题讨论】:

    标签: ubuntu events virtual-machine vmware evdev


    【解决方案1】:

    所以,我使用命令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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 2015-04-03
      • 2011-11-25
      相关资源
      最近更新 更多