linux c代码模拟键盘按键事件_Linux下模拟机械键盘音效

该博客介绍了一个简单的Linux程序,用于全局监听键盘输入并模拟机械键盘的咔哒声。作者受到Vim插件keysound的启发,利用SDL2库来实现声音播放。程序存在权限问题,需要以root执行,同时代码结构有待改进。未来计划包括优化代码结构,增加功能如选择音效和调整音量,以及解决执行权限问题。
摘要由CSDN通过智能技术生成

0546e19d49e24fff8bdf349f2e914ff3.png
f28cc163e63dde86b4baeb30709f4f60.png
https://www.zhihu.com/video/1203076251638013952

这是一个模拟机械键盘发声的程序,当你按下鼠标的时候,音箱中就会传出类似机械键盘按下的声音,目前只适合linux系统。

我一直使用vim/neovim(最近发现vim8.2速度要比neovim0.5快哦,配置文件完全一样),然后vim/neovim中有一个插件叫keysound,这个插件实现了在vim/neovim中机械键盘的音效,我是以这个插件为启发写的一个全局的模拟机械键盘音效的软件。

能力有限,当前这个程序比较简单,代码结构也不好,仅仅是实现了全局监控键盘,然后键盘按下之后发出卡哒声的功能。

代码的原理很简单,当然能力有限,只能以简单的方式实现,待我能力提高,我会用高级方法实现,哈哈。代码主要是通过监测/dev/input/下键盘相关的文件,然后只要判断有按键输入就调用SDL发声,就是这么简单,哈哈。

依赖

该程序依赖SDL2,所以在编译该程序之前需要先安装SDL2

使用

  • 编译
git clone https://github.com/fgheng/keysound
gcc ./keysound.c -lSDL2
sudo chown root ./a.out
sudo chmod u+s ./a.out
  • 运行
./a.out

问题

目前这个程序很原始,代码结构也不好,仅仅是实现了功能而已,而且当前还有很多问题需要解决。

1.SDL2的权限问题,如果使用普通用户执行,那么SDL是可以发声的,但是/dev/input/*下的文件无法读取,如果是root用户执行,那么/dev/input/*下的文件可以读取,但是SDL会有问题,我目前想到的解决方案便是下面的方法:

sudo chown root ./a.out 
sudo chmod u+s ./a.out 

这样普通用户就可以直接执行了,但我觉得这样非常的不优雅,我也没明白为什么这样就可以了呢?我们知道,上面的命令让这个可执行程序在执行的时候拥有root的权限,但是root权限下SDL有问题啊,为什么这样就没问题了呢?

2.没有做程序终止的后续操作,读取/dev/input/*的描述符没有被释放,这个释放应该是在程序被终止的时候进行的,但是代码中没有体现

TODO

  • 重新设计代码结构
  • 不读取/dev/input/*文件,而是学习键盘驱动的写法,所有的键盘输入都可以检测到而不是单纯的一个特定的键盘
  • 可以选择音效
  • 按下一个声音,抬起一个声音
  • 添加一个终端界面,使用
  • 调节音量
Keysound​github.com
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值