Linux下如何改键值

Linux下如何改键值,第1张

可通过xev得到所按键的键名/键值,再通过xmodmap可设置

直接运行xev(linux下抓取按键键值的小工具),按一下所经修改的按键,在输出的信息中找到类似(keysym 0xff22, Muhenkan)的内容,其中0xff22为键值,Muhenkan是键名。

通过以下命令就可将按键映射为想要的键值了

xmodmap -e "keysym 预设定的键名 = 当前按键键名"

如我想将键名为Muhenkan的按键映射为Win键(键名为Super_L),则这样写

xmodmap -e "keysym Super_L = Muhenkan"

到此就达到了目的了,但这样设置位未保存到设置中,重启后就没了,所以我将上面的代码加入到/etc/rc.local中了

另:/usr/include/X11/keysymdef.h 中包含所有的符号名,在其中可以找到你想要的键名,里面也有些简短的注释

键盘扫描码有两种:

一个是make code,也就是键被按下和按住不放时产生

另一种是break code,在键被释放时产生。

每个键都有自己唯一的make code和break code。

提供一个我在Linux下的实现,就是使用ioctl 改变终端I/O模式。

测试程序在“a”健被按下时退出。

#include <stdio.h>

#include <stdlib.h>

#include <termios.h>

#include <sys/ioctl.h>

#include <unistd.h>

#include <linux/kd.h>

int main(void)

{

struct termios oldtermios,newtermios

int oldmode

unsigned short key

int i

if((tcgetattr(fileno(stdin),&oldtermios))<0)

{

perror("tcgetaddr error")

exit(1)

}

if((tcgetattr(fileno(stdin),&newtermios))<0)

{

perror("tcgetaddr error")

exit(1)

}

newtermios.c_lflag &= ~(ICANON|ECHO|ISIG)

newtermios.c_iflag = 0

newtermios.c_cc[VMIN] = 0

newtermios.c_cc[VTIME] = 1 //=0延时0 ,=1延时1s

if(tcsetattr(fileno(stdin),TCSAFLUSH,&newtermios))

{

perror("tcsetattr error")

exit(1)

}

ioctl(fileno(stdin),KDGKBMODE,&oldmode)

if(ioctl(fileno(stdin),KDSKBMODE,K_RAW))

{

perror("ioctl error")

exit(1)

}

while(1)

{

if(read(fileno(stdin),&key,sizeof(key))>0)

printf(" key = 0x%x \n",key)

if (key == 0x1e)//key a down , exit.

break

key = 0

}

ioctl(fileno(stdin),KDSKBMODE,oldmode)

tcsetattr(fileno(stdin),TCSANOW,&oldtermios)

return 0

}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ma100/archive/2007/02/07/1504270.aspx

以上代码,我在suse liux下,没有成功。原因是 if(ioctl(fileno(stdin),KDSKBMODE,K_RAW)) 没有成功。

参考下面文章:http://www.linuxjournal.com/article/2783,需要弄清楚ioctl对键盘的 *** 作。

"${a}" = "^[OP"

^[OP 是先按 Ctrl +v 在按F1 得到的

http://bbs.chinaunix.net/thread-1475196-1-1.html


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7308586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存