Linux 使用xmodmap禁用键盘按键(禁用Linux快捷键)

Posted cpp_learners

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 使用xmodmap禁用键盘按键(禁用Linux快捷键)相关的知识,希望对你有一定的参考价值。

最近在Linux中用QT做项目,开发一个全屏软件运行在公司的设备上,系统是统信UOS Linux系统,设备开机后会立即进入软件,且没有权限不允许用户进入Linux后台。

但有点麻烦,大家都知道,在Linux中,可以按快捷键 Ctrl + Alt + (F1 - F6) ,会进入黑屏终端,在这个黑屏终端就可以使用命令将软件强制关闭(kill);或者按快捷键 Ctrl + Alt + T 可以打开终端窗体,终端就可以使用命令将软件强制关闭;或者按快捷键 Ctrl + Alt + Delete 可以进入关机选项界面,可以调出UOS的后台任务管理器…

这些都是不允许的,所以我在网上找,有什么方式可以禁用统信UOSLinux系统的快捷键,找了很久,没有找到相关的解决方法;但是找到可以使用xmodmap去修改按键和禁用按键,感觉可行,于是自己亲自尝试后发现也可以行,于是记录下来!


  1. Ctrl + Alt + (F1 - F6)
    黑屏终端演示图:

  2. Ctrl + Alt + T
    终端演示图:

  3. Ctrl + Alt + Delete
    进入关机选项界面

存在以上的行为,对系统都是挺危险的,所以,得禁用这些快捷键!


1. xmodmap 是什么?

貌似是可以修改键盘映射和鼠标映射的命令…

查看keycode命令:
xmodmap -pke



等等一共有255个。

每个keycode对应一个键盘按键。

禁用键盘按键需要用到这些keycode。

2. 禁用

使用命令:
xmodmap -e 'keycode 数字 = '
暂时禁用键盘按键!

例如:
我在项目中禁用Alt键和F1 - F12键

首先找到左Alt键和右Alt键


代码命令禁用左Alt键和右Alt键:

xmodmap -e 'keycode 64 = '			// 禁用左Alt键
xmodmap -e 'keycode 108 = '			// 禁用右Alt键

让其等于空即可!(直接在终端运行命令即可)

我是在Linux下QT操作的,所以我可以使用C/C++的函数system()去调用命令:

// 暂时禁用Alt键                                                    
system("xmodmap -e 'keycode 64 = '");       // key Alt as Left 
system("xmodmap -e 'keycode 108 = '");      // key Alt as Right

执行完之后,按键盘Alt键就没有反应了,可以测试快捷键Ctrl + Alt + F2,会发现这个快捷键没法使用了!
使用了取巧的方式进行禁用快捷键!(没办法,网上找不到禁用统信UOS系统的快捷键方法)

但是,使用这种方式有一个小缺点,就是重启系统后,他就会自动恢复了!

这个我看网上有教程说可以将命令写入一个什么什么文件,就可以实现开机自动调用进行禁用了,具体我没试过喔…

禁用F1 - F12:

system("xmodmap -e 'keycode 67 = '");
system("xmodmap -e 'keycode 68 = '");
system("xmodmap -e 'keycode 69 = '");
system("xmodmap -e 'keycode 70 = '");
system("xmodmap -e 'keycode 71 = '");
system("xmodmap -e 'keycode 72 = '");
system("xmodmap -e 'keycode 73 = '");
system("xmodmap -e 'keycode 74 = '");
system("xmodmap -e 'keycode 75 = '");
system("xmodmap -e 'keycode 76 = '");
system("xmodmap -e 'keycode 95 = '");
system("xmodmap -e 'keycode 96 = '");

3. 恢复

手动恢复!

调用命令:
xmodmap -e 'keycode'
恢复键盘按键!

keycode:上面截图等号右边那些字符串!

例如:
恢复左Alt键和右Alt键命令:

xmodmap -e 'keycode 64 = Alt_L Meta_L Alt_L Meta_L'
xmodmap -e 'keycode 108 = Alt_R Meta_R Alt_R Meta_R'

代码恢复:

system("xmodmap -e 'keycode 64 = Alt_L Meta_L Alt_L Meta_L'");
system("xmodmap -e 'keycode 108 = Alt_R Meta_R Alt_R Meta_R'");

这样就可以实现恢复操作了,然后可以测试快捷键Ctrl + Alt + F2,可以发现,又可以正常进入黑屏终端了!

恢复F1 - F12键:

system("xmodmap -e 'keycode 67 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1'");
system("xmodmap -e 'keycode 68 = F2 F2 F2 F2 F2 F2 XF86Switch_VT_2'");
system("xmodmap -e 'keycode 69 = F3 F3 F3 F3 F3 F3 XF86Switch_VT_3'");
system("xmodmap -e 'keycode 70 = F4 F4 F4 F4 F4 F4 XF86Switch_VT_4'");
system("xmodmap -e 'keycode 71 = F5 F5 F5 F5 F5 F5 XF86Switch_VT_5'");
system("xmodmap -e 'keycode 72 = F6 F6 F6 F6 F6 F6 XF86Switch_VT_6'");
system("xmodmap -e 'keycode 73 = F7 F7 F7 F7 F7 F7 XF86Switch_VT_7'");
system("xmodmap -e 'keycode 74 = F8 F8 F8 F8 F8 F8 XF86Switch_VT_8'");
system("xmodmap -e 'keycode 75 = F9 F9 F9 F9 F9 F9 XF86Switch_VT_9'");
system("xmodmap -e 'keycode 76 = F10 F10 F10 F10 F10 F10 XF86Switch_VT_10'");
system("xmodmap -e 'keycode 95 = F11 F11 F11 F11 F11 F11 XF86Switch_VT_11'");
system("xmodmap -e 'keycode 96 = F12 F12 F12 F12 F12 F12 XF86Switch_VT_12'");

总结

键盘禁用,简单的用法就是这样了,其实xmodmap还有很多高级用法的,例如键盘按键调换,鼠标左右点击调换等等…

我在项目中用法:软件启动就立刻禁用按键(快捷键),当使用权限正常进入后台前,就恢复!
使用很简单,但是却帮我解决很大的问题!

以上是关于Linux 使用xmodmap禁用键盘按键(禁用Linux快捷键)的主要内容,如果未能解决你的问题,请参考以下文章

怎样禁用键盘的某个特定按键

如何禁用键盘某个键?

xmodmap使用指南

使用 linux 帧缓冲区进行图形但禁用控制台文本

JavaFX:禁用使用键盘控制 RadioButtons

win10 禁用自带键盘