最近在Linux中用QT做项目,开发一个全屏软件运行在公司的设备上,系统是统信UOS Linux系统,设备开机后会立即进入软件,且没有权限不允许用户进入Linux后台。
但有点麻烦,大家都知道,在Linux中,可以按快捷键 Ctrl + Alt + (F1 - F6) ,会进入黑屏终端,在这个黑屏终端就可以使用命令将软件强制关闭(kill);或者按快捷键 Ctrl + Alt + T 可以打开终端窗体,终端就可以使用命令将软件强制关闭;或者按快捷键 Ctrl + Alt + Delete 可以进入关机选项界面,可以调出UOS的后台任务管理器…
这些都是不允许的,所以我在网上找,有什么方式可以禁用统信UOSLinux系统的快捷键,找了很久,没有找到相关的解决方法;但是找到可以使用xmodmap去修改按键和禁用按键,感觉可行,于是自己亲自尝试后发现也可以行,于是记录下来!
Ctrl + Alt + (F1 - F6)
黑屏终端演示图:
Ctrl + Alt + T
终端演示图:
Ctrl + Alt + Delete
进入关机选项界面
存在以上的行为,对系统都是挺危险的,所以,得禁用这些快捷键!
貌似是可以修改键盘映射和鼠标映射的命令…
查看keycode命令:
xmodmap -pke
…
等等一共有255个。
每个keycode对应一个键盘按键。
禁用键盘按键需要用到这些keycode。
使用命令:
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 = '");
手动恢复!
调用命令:
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还有很多高级用法的,例如键盘按键调换,鼠标左右点击调换等等…
我在项目中用法:软件启动就立刻禁用按键(快捷键),当使用权限正常进入后台前,就恢复!
使用很简单,但是却帮我解决很大的问题!