我正在努力日志键在“ubuntu/precise64”Vagrant box 上为工作项目工作,但没有任何记录。我花了几个小时阅读并试图找出问题所在。
logkeys 代码找到正确的设备“/dev/input/event2”并将其打开:
input_fd = open(args.device.c_str(), O_RDONLY);
然后,代码在读取输入时进入 while 循环:
while (read(input_fd, &event, sizeof(struct input_event)) > 0) {
实际上并没有进入 while 循环(已通过调试语句确认)。似乎实际上没有发生任何键盘事件。这可能是因为我正在运行虚拟机,但我不确定,因为还有其他一些事情需要检查。例如,根据几篇帖子,例如这个,看来 event2 实际上是我的 Ubuntu VM 中的正确设备:
cat /proc/bus/input/devices
...
I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input2
...
B: EV=120013
...
我已经确认 logkeys 确实选择通过添加到代码中的控制台调试语句来监听 event2。
当我cat /dev/input/event2
和 键入时,控制台上会显示击键。我曾以为那是确定要监听的正确事件的准确测试;然而,当我 (cat /dev/input/event4
应该是鼠标)时,发生了同样的事情 - 控制台上回显了击键。
我没有 Ubuntu 机器可以测试。我可以在装有 Ubuntu ISO 的 VirtualBox 机器上尝试,但不知道那与我现在做的有什么不同。我也尝试过其他 Vagrant Ubuntu 机器(ubuntu/trusty 和另一个),没有任何变化。我确实喜欢在 Vagrant 机器上进行开发的速度和便利性。嗯,它通常非常快速和方便,但目前不是。
有谁知道可能发生了什么以及我遗漏了什么?
非常感谢,jz。
答案1
为了后人回答我的问题,以防有人做类似的事情,这是极不可能的!
在我的测试中,我仅使用 连接到该框vagrant ssh
,并在原始终端窗口中键入内容。我更改了我的 Vagrant 文件以包含一个 GUI,使用config.vm.provider "virtualbox" { |v| v.gui = true }
,并且 vagrant 使用客户机启动了一个 CLI 窗口。在那终端工作了,并且调试被输出到原始终端。
不幸的是,我没有时间去调查为什么主机框上的按键没有显示在客户机上……可能是我忽略了一些明显的东西。如果有人有好主意,请发帖,因为我很感兴趣。