linux - 检查 Linux text/fb 控制台当前是否按住 shift 键

标签 linux bash console

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

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

最佳答案

据我所知,没有任何命令可以获取键盘的切换状态。也就是说,看着 console_ioctl(4) ,有一个 ioctl 请求:TIOCLINUX,subcode=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,以此类推。

关于linux - 检查 Linux text/fb 控制台当前是否按住 shift 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13657889/

相关文章:

linux - bash 中 && 的反义词是什么?

linux - 如何让 watch 命令解释 vt100 序列?

bash - AWS SQS 不接收 SNS 消息

Linux/Unix tr 命令,奇怪的行为

c# - 在 Mono C# Readline 中捕获 Control+key

java - 在 Java 中以编程方式清除控制台

linux - 在 CentOS 8 上从本地存储库安装 yum 时出错

linux - 从 Windows 和 Mac 客户端机器访问 MongoDB

R 的粘贴功能在 BASH 中等效吗?

java - 在控制台输出调试信息