如何檢查SHIFT鍵當前是否在Linux控制檯中被掛起?在Linux控制檯中,我的意思是真正的文本/幀緩衝區,而不是xterm。檢查shift鍵是否被當前保存在Linux文本/ fb控制檯中
如果可能,最好只使用內置/標準shell命令。
如何檢查SHIFT鍵當前是否在Linux控制檯中被掛起?在Linux控制檯中,我的意思是真正的文本/幀緩衝區,而不是xterm。檢查shift鍵是否被當前保存在Linux文本/ fb控制檯中
如果可能,最好只使用內置/標準shell命令。
沒有我知道的命令獲得鍵盤的轉換狀態。這就是說,看着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,依此類推。
我得到'ioctl TIOCLINUX 6(獲得轉換狀態):在Ubuntu 16.04(內核4.4.0)上不適用於設備的ioctl。這是否意味着這個答案不再適用? –
@AdamRyczkowski:您是在Linux控制檯中運行它,而不是在xterm/konsole/gnome-terminal/...上運行它? – ninjalj
'gnome-terminal'。現在我明白了。在虛擬終端上一切正常。現在的問題是:是否有任何解決方案適用於這兩種環境?或者至少:如何解決由x-org發起的終端? –
你爲什麼問? –