检查当前是否在Linux text / fb控制台中保留shift键

时间:2012-12-01 08:51:35

标签: linux bash console

如何在Linux控制台中检查当前是否正在保留 SHIFT 键? Linux控制台是指真正的文本/帧缓冲区,而不是xterm。

最好只使用内置/标准shell命令,如果可能的话。

1 个答案:

答案 0 :(得分:5)

我知道没有命令可以获得键盘的移位状态。也就是说,查看console_ioctl(4),有一个ioctl请求:TIOCLINUX,子代码= 6.

所以你可以编写一个简单的C程序:

#include <stdio.h>
#include <stdlib.h>

#include <sys/ioctl.h>

int main()
{
    char shift_state;

    shift_state = 6;
    if (ioctl(0, TIOCLINUX, &shift_state) < 0) {
            perror("ioctl TIOCLINUX 6 (get shift state)");
            exit(1);
    }
    printf("%x\n", shift_state);
    return 0;
}

可以根据/usr/src/linux/include/linux/keyboard.h

解释结果
#define KG_SHIFT        0
#define KG_CTRL         2
#define KG_ALT          3
#define KG_ALTGR        1
#define KG_SHIFTL       4
#define KG_KANASHIFT    4
#define KG_SHIFTR       5
#define KG_CTRLL        6
#define KG_CTRLR        7
#define KG_CAPSSHIFT    8

以上是移位量,因此 Shift 为1, AltGr 为2, Ctrl 为4,依此类推。