重置Virtual Core XTEST键盘状态

问题描述 投票:0回答:1

我正在开发一个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替代它的话,我将不胜感激。

提前感谢。

x11 reset virtual-keyboard
1个回答
0
投票

我发现并至少使用代码而不是给定的实用程序来回答。在我的对象析构函数中(我正在使用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);

以上假设您的连接是开放的,为了避免混乱,我一开始不愿意这样做,但是由于它是所有关键版本,因此不会造成任何问题。确保使用设置的最小和最大代码,否则会产生错误的值错误。

© www.soinside.com 2019 - 2024. All rights reserved.