我正在开发一个Linux应用程序,该应用程序使用xtest扩展名来重放x11记录扩展名所进行的按键操作。在测试输入的重放时,如果我提早退出,有时会使Virtual Core XTEST键盘上的键仍被按下。请查看以下输出:
# DISPLAY=:0 xinput --list
â¡ Virtual core pointer id=2 [master pointer (3)]
â â³ Virtual core XTEST pointer id=4 [slave pointer (2)]
â â³ Mouse0 id=6 [slave pointer (2)]
â â³ elographics id=8 [slave pointer (2)]
⣠Virtual core keyboard id=3 [master keyboard (2)]
â³ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
â³ Keyboard0 id=7 [slave keyboard (3)]
# DISPLAY=:0 xinput --query-state 5 | grep down
key[55]=down
key[103]=down
我需要一个命令来重置这些密钥,不幸的是,xdotool在我使用的平台(Centos 6.10)上不是一个选项,该平台只能使用存储库中的工具。
我尝试使用
setxkbmap
尽管这不会重置键状态。如果有人知道可以使用xdotool替代它的话,我将不胜感激。
提前感谢。
我发现并至少使用代码而不是给定的实用程序来回答。在我的对象析构函数中(我正在使用c ++),我做了一个循环,该循环将键释放信号传递到测试键盘,如下所示:
xcb_setup_t const *xcbSetup = xcb_get_setup(this->xcbConnection);
for(size_t keyCode = xcbSetup->min_keycode;
keyCode <= xcbSetup->max_keycode;
keyCode++) {
xcb_test_fake_input(this->xcbConnection,
XCB_KEY_RELEASE, keyCode,
XCB_CURRENT_TIME, XCB_NONE,
0, 0, 0);
}
xcb_flush(this->xcbConnection);
以上假设您的连接是开放的,为了避免混乱,我一开始不愿意这样做,但是由于它是所有关键版本,因此不会造成任何问题。确保使用设置的最小和最大代码,否则会产生错误的值错误。