• 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键
    
    • 1
    • 2

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

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

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

    执行完之后,按键盘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 = '");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    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'
    
    • 1
    • 2

    代码恢复:

    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'");
    
    • 1
    • 2

    这样就可以实现恢复操作了,然后可以测试快捷键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'");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    总结

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

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

  • 相关阅读:
    PHP连接达梦数据库DM8(Window)
    代码随想录第35天 | ● 01背包问题,你该了解这些! ● 01背包问题—— 滚动数组 ● 416. 分割等和子集
    《量化投资以Python为工具》目录
    深入探索大语言模型
    使用Mybatis实现基本的增删改查------数据输出
    前端Mock神器-Apifox
    Vue学习:vue生命周期
    Live800:在线客服系统如何帮助企业创造持续的服务价值?
    YOLO-V3实时检测实现(opencv+python实现)
    动态规划简述;斐波那契数列自顶向下和自底向上
  • 原文地址:https://blog.csdn.net/cpp_learner/article/details/124821551