繁体   English   中英

如何在Linux上以编程方式打开/关闭Caps Lock,Scroll Lock和Num Lock键

[英]How can I turn on/off Caps Lock, Scroll Lock, Num Lock key programatically on Linux

有没有一种简单的方法可以在使用C ++的Linux(OpenSuse)上打开/关闭Caps Lock,Scroll Lock和Num Lock,需要使用哪些头文件? 我想控制一些模拟键盘的设备。

解决方案1

请继续前进,因为此解决方案只是打开键盘的LED指示灯,如果您还需要启用大写锁定功能,请参阅解决方案2。

// Linux header, no portable source
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, char* argv[]) {
  int fd_console = open("/dev/console", O_WRONLY);
  if (fd_console == -1) {
    std::cerr << "Error opening console file descriptor\n";
    exit(-1);
  }

  // turn on caps lock
  ioctl(fd_console, 0x4B32, 0x04);

  // turn on num block 
  ioctl(fd_console, 0x4B32, 0x02);

  // turn off 
  ioctl(fd_console, 0x4B32, 0x0);

  close(fd_console);
  return 0;
}

请记住,必须以超级用户权限启动程序才能写入文件/dev/console


编辑

解决方案2

该解决方案可与X11窗口系统管理器一起使用(在Linux上几乎是标准的)。

// X11 library and testing extensions
#include <X11/Xlib.h>
#include <X11/keysym.h>
#include <X11/extensions/XTest.h>

int main(int argc, char *argv[]) {
  // Get the root display.
  Display* display = XOpenDisplay(NULL);

  // Get the keycode for XK_Caps_Lock keysymbol
  unsigned int keycode = XKeysymToKeycode(display, XK_Caps_Lock);

  // Simulate Press
  XTestFakeKeyEvent(display, keycode, True, CurrentTime);
  XFlush(display);

  // Simulate Release
  XTestFakeKeyEvent(display, keycode, False, CurrentTime);
  XFlush(display);

  return 0;
}

注意:在标头中可以找到更多的键符号

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM