Linux下直接读键盘
来源:互联网 发布:谷歌浏览器for mac 编辑:程序博客网 时间:2024/04/20 18:08
在Linux下对键盘进行直接控制,需要首先搞清楚一些概念,如terminal、console、scancode、keycode等。我理解Linux下的键盘处理的基本过程应该是这样的:
keyboard-->kbd controller-------->keyboard driver------>tty processing---
按键 生成扫描码 根据键盘模式转换
----tty processing------->console--------->application
处理canonical模式等 处理Esc序列等
关于keyboard、console的基本处理可参考《The Linux keyboard and console HOWTO》中2和3两节。关于tty的处理可参考《Advanced Programming in Unix Environment》中的11章Terminal I/O。
理解了这个过程,要直接获得键盘输入就比较清晰了:
首先,需要将tty的模式设置为noncanonical,参考Advanced Programming中的例子就可以了。
其次,需要设置键盘转换模式,通常的模式下是转换为ASCII码,也可以转换为scancode(不转换)、keycode和Unicode。关于scancode的定义比较麻烦,一个键可能会产生1个、2个、4个甚至5个scancode,具体可以参考微软的文档《Keyboard Scan Code Specification》。关于keycode,Linux下有一个程序叫showkey,可以显示一个键对应的代码,由于一个键只对应于一个代码,处理起来比较简单。具体的设置使用参数为KDSKBMODE的ioctl调用即可,参考man文档console_ioctl。
最后,可以将console设置为KD_GRAPHICS模式(用参数KDSETMODE的ioctl调用),console就进入了图形模式,不显示文本光标也不回显,同时sdtout的输出也只有返回文本模式后才会显示。
搞清楚了过程就好办了,剩下的就是打开设备、读数据。一般的stdin就是一个tty,当然也可以打开/dev/console设备或者/dev/tty、/dev/tty1、/dev/tty2等。对于/dev/console和tty们有什么区别,我就搞不清了。至少打开console和tty后都可以用。而stdin一般就是当前的tty,如果没有重定向的话。
当然要注意的是,一旦切换了键盘转换模式,所有给应用软件的键盘代码都会改变,可能连Ctrl-C等都不认了,所以一定要记得切换回来,调试起来也要小心,否则可能就要重新启动了:-(
总结一下参考资料:
《The Linux keyboard and console HOWTO》
《Advanced Programming in Unix Environment》
《Keyboard Scan Code Specification》
《man文档:console_ioctl(4)》
keyboard-->kbd controller-------->keyboard driver------>tty processing---
按键 生成扫描码 根据键盘模式转换
----tty processing------->console--------->application
处理canonical模式等 处理Esc序列等
关于keyboard、console的基本处理可参考《The Linux keyboard and console HOWTO》中2和3两节。关于tty的处理可参考《Advanced Programming in Unix Environment》中的11章Terminal I/O。
理解了这个过程,要直接获得键盘输入就比较清晰了:
首先,需要将tty的模式设置为noncanonical,参考Advanced Programming中的例子就可以了。
其次,需要设置键盘转换模式,通常的模式下是转换为ASCII码,也可以转换为scancode(不转换)、keycode和Unicode。关于scancode的定义比较麻烦,一个键可能会产生1个、2个、4个甚至5个scancode,具体可以参考微软的文档《Keyboard Scan Code Specification》。关于keycode,Linux下有一个程序叫showkey,可以显示一个键对应的代码,由于一个键只对应于一个代码,处理起来比较简单。具体的设置使用参数为KDSKBMODE的ioctl调用即可,参考man文档console_ioctl。
最后,可以将console设置为KD_GRAPHICS模式(用参数KDSETMODE的ioctl调用),console就进入了图形模式,不显示文本光标也不回显,同时sdtout的输出也只有返回文本模式后才会显示。
搞清楚了过程就好办了,剩下的就是打开设备、读数据。一般的stdin就是一个tty,当然也可以打开/dev/console设备或者/dev/tty、/dev/tty1、/dev/tty2等。对于/dev/console和tty们有什么区别,我就搞不清了。至少打开console和tty后都可以用。而stdin一般就是当前的tty,如果没有重定向的话。
当然要注意的是,一旦切换了键盘转换模式,所有给应用软件的键盘代码都会改变,可能连Ctrl-C等都不认了,所以一定要记得切换回来,调试起来也要小心,否则可能就要重新启动了:-(
总结一下参考资料:
《The Linux keyboard and console HOWTO》
《Advanced Programming in Unix Environment》
《Keyboard Scan Code Specification》
《man文档:console_ioctl(4)》
0
上一篇:在VS2010 C++中调试DLL工程的方法
下一篇:Windows输入汉字
相关热门文章
- linux 常见服务端口
- xmanager 2.0 for linux配置
- 【ROOTFS搭建】busybox的httpd...
- openwrt中luci学习笔记
- 什么是shell
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
- Linux下直接读键盘
- Linux下直接读键盘
- Linux下直接读键盘(转)
- linux下的键盘驱动
- linux下获取键盘按键
- linux下获取键盘按键
- linux下改变键盘映射
- linux下屏蔽键盘按键
- linux下开启键盘背光
- linux下ScrollLock键盘灯不亮
- linux下矩阵键盘驱动
- linux下qt虚拟键盘
- linux下直接启动应用程序
- Linux下直接录制mp3
- 内核模式下从键盘数据端口直接取按键
- linux下读取键盘扫描码
- linux下非阻塞检测键盘
- Linux下简单4*4键盘驱动
- OpenGL ES 三种类型修饰 uniform attribute varying
- ubuntu 计算器xcalc
- #include sys/xxx.h头文件 UNIX头文件
- Andriod JNI编程之C++回调Java函数
- 在VS2010 C++中调试DLL工程的方法
- Linux下直接读键盘
- 关于ADS1292R的一些总结
- 关于CSpreadSheet的若干问题
- Windows输入汉字
- android基础教材
- mfc控件 check box
- Matlab中的随机数生成器
- android ImageView src background
- Android_listview设置每条信息的间距
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
中秋节假期
中秋节是什么时候
我看中秋节
中秋节的来历简单介绍
中秋节在什么时候
什么时候是中秋节
中秋节什么时候
中秋节几月几日
我们的中秋节
中秋节的介绍
中秋节的
中秋节礼品团购
为什么会有中秋节
中秋节日期
关于中秋节的图
八月十五中秋节的来历
中秋节的由来简短
欢度中秋节
有关中秋节的来历
中秋节的含义
关于中秋节的来历
中秋节日
今年中秋节是几月几日
中秋节是几月几日
中秋节诗
今年中秋节
8月15中秋节
中秋节传统
中秋节的诗
2016年中秋节
中秋节活动
中秋节怎么过
中秋节是哪一天
在中秋节
关于中秋节
中秋节知识
中秋节的来历50字
中秋节什么意思
中秋节的活动
中秋节由来
中秋节习俗