如何模拟Linux上的低级扫描码按键?

时间:2016-09-29 09:28:15

标签: ubuntu linux-kernel keyboard keyboard-events custom-keyboard

我有这个奇怪的华硕键盘的笔记本,由于某些原因取代End键有Power OffPictures)。我想撤消损坏,让我的Ubuntu Linux将此密钥解释为End

我知道如何使用acpid截取Power Off并让它以root身份触发任何命令。

我希望它模拟扫描代码0xe0 0x4f,然后暂停50ms,然后0xe0 0xcf

如何在现代笔记本电脑和Linux上通过扫描码模拟低级按键?

我尝试使用以下程序将扫描码写入端口

/* gcc -O2 -s -Wall -osend_to_keyboard main.c */
#include <stdlib.h>
#include <unistd.h>
#include <sys/io.h>

int main(int argc, char *argv[]) {
  int i;

  ioperm(0x60, 3, 1);

  for (i = 1; i < argc; i++) {
    int x = strtol(argv[i], 0, 16);

    usleep(300);
    outb(x, 0x60);
  }

  return 0;
}

但没有发生任何事。也许代码对我的键盘不起作用。我从来没有在Linux上做过这么低级的事情,所以我缺乏适当的经验。

对于那些横向思考的人:我不想仅仅使用例如模拟X上的按键。 xdotool。; - )

0 个答案:

没有答案