一尘不染

如何在Linux中获得键盘状态?

linux

我想检查用户在程序启动时是否按下了 Shift 键。(这意味着在程序启动前先按 Shift 键)这是一个简单的控制台程序,与X无关。

这可能类似于Win32 GetKeyboardState()函数。

我想知道我是否可以做到这一点以及如何做到,但是不知道直接访问终端有什么利弊。


阅读 641

收藏
2020-06-03

共1个答案

一尘不染

你不能

Shift键不被视为字符键,因此,即使您直接访问终端,也将无法检测到该键。

也许您不必。例如,假设您使用的是美式键盘,其中第一行中的数字无需修饰符即可访问,并且还要检查Shift键。具有其他键盘布局的人们可能必须使用Shift修饰符才能访问数字。如果您的程序对此Shift新闻作出反应,则您的程序基本上将无法使用。同样的情况也适用于其他修饰键:只有在按下普通字符键之后,您才能检测到其中的某些修饰键。或更糟糕的是,他们可能需要使用Shift密钥来使用“输入”来运行程序。

另外,Shift您想监视什么键?一个在本地计算机上,还是一个用户所在的位置?请记住,SSH存在并且通常用于远程访问伪终端。

如果您是root用户并且想要监视Shift本地计算机上的密钥,则可以读取evdev设备以获取有关Shift密钥的事件。但这仅是由于自动重复按键才有可能实现的,因此您不会Shift在运行程序之前检测到被按下的按键,而只会在几秒钟之前检测到按键。

当然,您不能在远程计算机上执行此操作,这将是一个安全漏洞。

无论如何,您为什么要这样做?在您的情况下,X应用程序不是正确的选择吗?

2020-06-03