我想知道capslock是否是活动的,我想我可以使用xet来实现这个目的,使用pipe,通过popen('xset -q | grep Capslock')我可以找到,但是我想知道在c程序中没有使用命令的方法,有没有办法知道。
还有一件事我想问一下,在这个上下文中,xset在linux的控制台模式下不工作,我执行alt+ctrl+f1然后登录到那里,如果尝试运行xset -q这将抛出错误,也许这无法与控制台中的xwindows通信,那么对于这种情况,有什么解决方案。

最佳答案

我想知道卡普洛克是否活跃
你可能想要XkbGetIndicatorState。例如:

#include <stdio.h>
#include <stdlib.h>
#include <X11/XKBlib.h>

/* Compile this with -lX11 */

int main ()
{
  Display *display;
  Status status;
  unsigned state;

  display = XOpenDisplay (getenv ("DISPLAY"));
  if (!display)
    return 1;

  if (XkbGetIndicatorState (display, XkbUseCoreKbd, &state) != Success)
    return 2;

  printf ("Caps Lock is %s\n", (state & 1) ? "on" : "off");
  return 0;
}

或者,您可以使用same approach that is used in xset并使用XkbGetNamedIndicator这是一个更通用的函数。

关于c - 如何在Linux中以编程方式检测Capslock的状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49561510/

10-13 05:13