2012-12-01 42 views

回答

3

沒有我知道的命令獲得鍵盤的轉換狀態。這就是說,看着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 

以上是一個偏移量,因此移位是1 ,AltGr是2,Ctrl是4,依此類推。

+0

我得到'ioctl TIOCLINUX 6(獲得轉換狀態):在Ubuntu 16.04(內核4.4.0)上不適用於設備的ioctl。這是否意味着這個答案不再適用? –

+0

@AdamRyczkowski:您是在Linux控制檯中運行它,而不是在xterm/konsole/gnome-terminal/...上運行它? – ninjalj

+0

'gnome-terminal'。現在我明白了。在虛擬終端上一切正常。現在的問題是:是否有任何解決方案適用於這兩種環境?或者至少:如何解決由x-org發起的終端? –

相關問題