通过更改udev的规则实现敲击a键获得s的输出

安装evtest

  首先安装evtest检测键盘的扫描码

1
2
3
4
5
6
7
8
9
# apt install evtest
# sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: Power Button
/dev/input/event1: Lid Switch
/dev/input/event2: Power Button
/dev/input/event3: AT Translated Set 2 keyboard
Select the device event number [0-3]:

选择device的数字后,敲击a键可以得到一下信息:

1
2
3
4
5
6
Event: time 1521361797.053598, type 4 (EV_MSC), code 4 (MSC_SCAN), value 1e
Event: time 1521361797.053598, type 1 (EV_KEY), code 30 (KEY_A), value 1
Event: time 1521361797.053598, SYN_REPORT
aEvent: time 1521361797.148844, type 4 (EV_MSC), code 4 (MSC_SCAN), value 1e
Event: time 1521361797.148844, type 1 (EV_KEY), code 30 (KEY_A), value 0
Event 大专栏  udev更改按键映射: time 1521361797.148844, SYN_REPORT

  结果进行了简化,第一个SYN_REPORT代表a键按下,第二个SYN_REPORT代表a键松开,其中可以得到a的扫描码为1e

修改udev

  使用编辑器编辑udev规则

1
# sudo vim /lib/udev/hwdb.d/60-keyboard.hwdb

在文件最后添加以下几行

1
2
evdev:input:b0011v0001p0001*
KEYBOARD_KEY_1e=a

  第一行为一系列规则代表匹配的设备,其中evdev:input:代表输入设备,后面为一些ID,在evtest中输入device的数字之后会有一行输出为

1
Input device ID: bus 0x11 vendor 0x1 product 0x1 version 0xab41

其中’b0011’,’v000v’,’p0001’分别与bus,vendor,product对应,’*’代表了之后的通配符号

  第二行为对设备的映射,行首需要空格否则无效,KEYBOARD_KEY_后跟扫描码,=号右为键值

更新udev

  使用以下命令更新,需要将event3换为自己输入的数字

1
sudo udevadm hwdb --update && sudo udevadm trigger /dev/input/event3

udev更改按键映射的更多相关文章

  1. [Android] 输入系统(三):加载按键映射

    映射表基本概念 由于Android调用getEvents得到的key是linux发送过来的scan code,而Android处理的是类似于KEY_UP这种统一类型的key code,因此需要有映射表 ...

  2. vim 中按键映射问题

    按键映射关键字的组成开始让我摸不着头脑,查了资料,然后来做一个log 按键绑定命令:模式前缀(缺省为normal) + 递归前缀(缺省为空) + map 前缀表示生效范围,递归前缀表示是否递归查找命令 ...

  3. Linux之更改Nginx映射默认根目录

     更改nginx映射默认根目录: 1.打开默认配置文件:sudo  vi /etc/nginx/sites-available/default 2.修改配置:root /var/www/html/xx ...

  4. BigBoss按键映射

    // BigBoss: SBSettings Toggle Spec 按键映射 http://thebigboss.org/guides-iphone-ipod-ipad/sbsettings-tog ...

  5. C++自定义修饰键,实现如<Capslock+J>等组合键的按键映射

    前:所谓修饰键,就是Ctrl,Alt,Shift,Win这些按键. Update: 我使用AHK写了一个功能更丰富的脚本:https://github.com/h46incon/ModifierCus ...

  6. VIM进阶学习之几种模式和按键映射

    Map是Vim强大的一个重要原因,可以自定义各种快捷键,用起来自然得心应手. vim里最基本的map用法也就是 :map c a 这里把c映射成了a,在map生效的情况下,按下c就等同于按下了a 当然 ...

  7. Docker 更改容器映射端口

    1.编辑容器的配置文件进行更改端口: docker run 运行启动时 -p 可以指定容器启动映射端口 ( ) 可以编辑配置文件 进行修改:(需要重启docker 服务 不止是是容器 才能生效.只能重 ...

  8. linux按键映射

    .Xmodmap keycode = Mode_switch keysym k = k K Left keysym j = j J Down keysym l = l L Right keysym h ...

  9. 树莓派4B踩坑指南 - (2)安装系统及初始化

    安装系统及初始化 格式化TF卡:SDFormatter 4.0.如果需要换系统,则必须先烧录进一个空img,然后再格式化! 烧录系统:Win32DiskImager-0.9.5 更改默认密码:账号pi ...

随机推荐

  1. 好看的UI组合,为以后自己写组件库做准备

    1. 黑色格子背景 { color: rgb(255, 255, 255); text-shadow: 1px 1px 0 rgba(0,0,0,.3); rgb(62, 64, 74); backg ...

  2. PANIC: ANDROID_SDK_HOME is defined but could not find Nexus_5_API_23.ini file in $ANDROID_SDK_HOME\

    运行模拟器总是出现这个错误 后来把系统环境变量中的ANDROID_SDK_HOME 删掉就好了 我去,好神奇的操作

  3. C语言中未定义的引用错误

    1.错误描述: /tmp/ccAu32Cb.o:在函数‘main’中:static.c:(.text+0x2d):对‘print_value’未定义的引用 2.通过对错误内容分析,我在编写程序时,ma ...

  4. 爬虫笔记(十三)——lxml库的使用

    HTML示例代码: text = ''' <div> <ul> <li class="item-0"><a href="link ...

  5. [ZJOI2019]Minimax搜索(线段树+动态DP+树剖)

    为什么我怎么看都只会10pts?再看还是只会50~70?只会O(n2(R-L+1))/O(nlogn(R-L+1))……一眼看动态DP可还是不会做…… 根节点的答案是叶子传上来的,所以对于L=R的数据 ...

  6. trie(字典树)原理及C++代码实现

    字典树,又称前缀树,是用于存储大量字符串或类似数据的数据结构. 它的原理是利用相同前缀来减少查询字符串的时间. 不同于BST把关键字保存在本结点中,TRIE可以想象成把关键字和下一个结点的指针绑定,事 ...

  7. 1)BS和CS区别

    (1)CS:  客户端服务器 BS: 浏览器和服务器 (2)二者区别: 微信就相当于  客户端服务器   同时 微信也有 网页版. BS灵活,不用下客户端,但是网页什么内容都有,就有可能将用户的信息泄 ...

  8. Leetcode 5039. 移动石子直到连续

    第134次周赛 5039. 移动石子直到连续 5039. 移动石子直到连续 三枚石子放置在数轴上,位置分别为 a,b,c. 每一回合,我们假设这三枚石子当前分别位于位置 x, y, z 且 x < ...

  9. 用windows下的Anaconda搭建Django虚拟环境

    Django 是一个Python定制框架,可用于简便.快速的开发数据库驱动的web站点. 要使用Django,首先要建立一个虚拟工作环境. 那么,为什么要搭建虚拟环境呢?我们来看以下的开发场景: 假设 ...

  10. The Maximum Unreachable Node Set

    题目描述 In this problem, we would like to talk about unreachable sets of a directed acyclic graph G = ( ...