以下のコードスニペット。基本的に、アクティブなvtを取得し、その端末に対してioctl KDGETLEDを発行して、capslock / numlock / scrolllockキーの現在の状態を確認します。ロックキーの状態に関係なく、常にresult=0になります。
私はこれを複数のLinuxボックスで試しましたが、すべてUbuntuのバリアント(Mintなど)を実行しています。「/dev/ tty」、「/ dev / console」、0など、KDGETLEDコマンドの他のfdsを試しました。KDGKBLEDでも同じ問題が発生しています。他の人が同じ問題を経験していますか、私は何か愚かなことをしていますか、私は不十分に書かれたドライバーに遭遇していますか、または何か他のものですか?
int fd;
vt_stat stat;
fd = open("/dev/tty0", O_RDONLY);
if (ioctl(fd, VT_GETSTATE, &stat) == -1) {
fprintf(stderr, "Error on VT_GETSTATE\n");
exit(1);
}
close(fd);
char tty[128];
sprintf(tty, "/dev/tty%d", stat.v_active);
printf("Query tty: %s\n", tty);
char result;
fd = open(tty, O_RDWR | O_NDELAY, 0);
if (ioctl(fd, KDGETLED, &result) == -1) {
fprintf(stderr, "Error on KDGETLED\n");
exit(1);
}
close(fd);
printf("LED flag state: %d\n", result);
事前に、私の質問をレビューしてくれたすべての人に感謝します。