linux 按键修改简单示例

2023-05-16

1、修改方法

文本界面和图形界面的keycode是不一样的,按键映射方式不同,因此修改方法不同。

1.1 文本界面

1.1.1 修改命令

在文本界面,dumpkeys 可以查询当前keycode。在文本或图形界面loadkeys 可以修改,例如将ctrl+alt+g修改为打开虚拟终端tty1的快捷键。g的keycode是35。

kylin@kylin-os:/etc/systemd$ sudo loadkeys -u
[sudo] kylin 的密码:
正在加载 <stdin>
contron alt keycode 35 = Console_1

ctrl+d确认修改。
但是用命令会在重启后失效,要不在启动的某个脚本中添加该命令,要不就修改映射文件;

1.1.2 修改映射文件

/etc/console-setup下 cached.kmap.gz 解压,根据dumpkeys的结果找到对应的设置项后修改。

这是dumpkeys的部分结果:

keycode  35 = +h              
	shift	keycode  35 = +H              
	shift	altgr	keycode  35 = +H              
	control	keycode  35 = BackSpace       
	shift	control	keycode  35 = BackSpace       
	altgr	control	keycode  35 = BackSpace       
	shift	altgr	control	keycode  35 = BackSpace       
	alt	keycode  35 = Meta_h          
	shift	alt	keycode  35 = Meta_H          
	altgr	alt	keycode  35 = Meta_h          
	shift	altgr	alt	keycode  35 = Meta_H          
	control	alt	keycode  35 = Meta_BackSpace       
	shift	control	alt	keycode  35 = Meta_BackSpace  
	altgr	control	alt	keycode  35 = Meta_BackSpace  
	

cached.kmap文件的部分内容:

keycode 35 = +U+0068 +U+0048 +U+0068 +U+0048 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0068 +U+0048 +U+0068 +U+0048 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0068 +U+0048 +U+0068 +U+0048 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0068 +U+0048 +U+0068 +U+0048 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0048 +U+0068 +U+0048 +U+0068 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0048 +U+0068 +U+0048 +U+0068 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0048 +U+0068 +U+0048 +U+0068 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0048 +U+0068 +U+0048 +U+0068 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace

希望得到control alt keycode 35 = Console_1的话, cached.kmap文件修改为:

keycode 35 = +U+0068 +U+0048 +U+0068 +U+0048 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H  Console_1 Meta_BackSpace Meta_BackSpace Meta_BackSpace ...

1.2 图形界面

可以通过xev来获取相应按键的keycode和keysym值。

1.2.1 通过xmodmap修改

xmodmap -pk 查看当前映射规则;
xmodmap修改本人只实验修改单独按键和shift+单个按键的两种,其他情况没搞清楚,这两种设置方式有其他文章说明,此处不细说;

1.2.2 通过xkb修改相应文件

kylin@kylin-os:/etc/console-setup$ cd /usr/share/X11/xkb/
kylin@kylin-os:/usr/share/X11/xkb$ ls
compat  geometry  keycodes  rules  symbols  types

xkb下有6个文件夹,此处关注symbols文件夹下

文件名简介
pc修饰键对应规则
usEnglish us 键盘布局规则
srvr_ctrlfkey 对应 vt 的规则
未完待续
xkbcomp $DISPLAY filename

查看xkb keymap信息,包括keycodes、types、compatibility、symbols、geometry,根据名称查找该条目在哪个文件中设置。

例如将ctrl+alt+g修改为打开虚拟终端tty1的快捷键,
在/usr/share/X11/xkb/symbols/us文件,xkb_symbols “basic” 中

key <AC05> {	[	  g,	G		]	};

改为:

key <AC05> {type[Group1] = "CTRL+ALT",
            symbols[Group1] = [ g, G, NoSympol, NoSympol, XF86Switch_VT_1 ] };

参考:
1、https://www.charvolant.org/doug/xkb/html/xkb.html
2、https://github.com/Chunlin-Li/Chunlin-Li.github.io/blob/master/blogs/linux/ubuntu-xkb-keyboard-remap.md

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux 按键修改简单示例 的相关文章

  • 提高mysql导入速度[关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我有一个很大的数据库22GB 我曾经用过进行备份mysqldumpgzip 格式的命令 当我提取 gz 文件时 它会生成 sql文件的
  • 比较linux中的两个未排序列表,列出第二个文件中的唯一项

    我有 2 个包含号码列表 电话号码 的文件 我正在寻找一种列出第二个文件中第一个文件中不存在的数字的方法 我尝试过各种方法 comm getting some weird sorting errors fgrep v x f second
  • Visual Studio - X11:缺少 DISPLAY 环境变量

    我正在使用 Visual Studio 2019 Enterprise 开发跨平台 Windows Linux x64 GUI 应用程序 在这个 2019 版本中 我们可以使用 Visual Studio调试平台 Windows 本机 和
  • 用于时间线数据的类似 gnuplot 的程序

    我正在寻找一个类似 gnuplot用于在时间轴中绘制数据图表的程序 类似 gnuplot 在 Linux 上运行 命令行功能 GUI 对我帮助不大 可编写脚本的语法 输出为 jpg png svg 或 gif 输出应该是这样的 set5 s
  • 如何在linux中使用iptables将http和https流量转发到透明代理[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题似乎不是关于主要由程序员使用的特定编程问题 软件算法或软件工具 help on topic 如果您认为该问题与主题相关另一个 St
  • Ctrl-p 和 Ctrl-n 在 Docker 下表现异常

    For the life of me I can t seem to figure out why ctrl p and ctrl n don t work like they re supposed to under the Docker
  • 在嵌入式系统上将内核控制台发送到哪里?

    我正在开发一个嵌入式系统 该系统当前通过串行端口 1 上的控制台输出启动 Linux 使用启动加载程序中的控制台启动参数 然而 最终我们将使用这个串行端口 内核控制台输出的最佳解决方案是什么 dev null 能否以某种方式将其放在 pty
  • 为什么 call_usermodehelper 大多数时候都会失败?

    从内核模块中 我尝试使用 call usermodehelper 函数来执行可执行文件 sha1 该可执行文件将文件作为参数并将文件的 SHA1 哈希和写入另一个文件 名为输出 可执行文件完美运行 int result 1 name hom
  • 如何回忆上一个 bash 命令的参数?

    Bash 有没有办法回忆上一个命令的参数 我通常这样做vi file c其次是gcc file c Bash 有没有办法回忆上一个命令的参数 您可以使用 or 调用上一个命令的最后一个参数 Also Alt can be used to r
  • 隐式声明“gets”

    据我所知 隐式声明 通常意味着该函数必须在调用之前放置在程序的顶部 或者我需要声明原型 然而 gets应该在stdio h文件 我已包含 有没有什么办法解决这一问题 include
  • 如何通过不同的接口路由 TCP/IP 响应?

    我有两台机器 每台机器都有两个有效的网络接口 一个以太网接口eth0和 tun tap 接口gr0 目标是使用接口在机器 A 上启动 TCP 连接gr0但然后让机器 B 的响应 ACK 等 通过以太网接口返回 eth0 因此 机器 A 发出
  • 在 vimrc 中切换匹配

    我的 vimrc 文件中有以下几行 hi ExtraWhitespace cterm NONE ctermbg green ctermfg green guibg green guifg green match ExtraWhitespac
  • grep 彩色线条

    我编写了一个简单的 PHP shell 脚本 它解析文件并输出某些元素 它产生大量的输出 采用不同的 bash 颜色 绿色表示正常 黄色表示警告 红色表示错误等 在开发过程中我想过滤掉一些行 例如 所有包含红色文本的行 我可以使用grep
  • SIGHUP 用于重新加载配置

    根据signal 7 SIGHUP用于检测控制终端的挂起或控制进程的死亡 然而 我遇到过很多 OSS 守护进程 服务 其中SIGHUP用于启动配置的重新加载 这里有一些例子 hostapd sshd snort etc 这是实现重新加载的标
  • 进程如何知道它已收到信号

    如果我错了 请纠正我 以下是我对信号的理解 据我所知 信号生成 和信号传递有2个不同 事物 为了产生信号 操作系统只是在位数组中设置一个位 在过程控制中维护 工艺块 PCB 每一位 对应于特定信号 当设置一个位时 这意味着 该位对应的信号为
  • 删除 Python 中某些操作的 root 权限

    在我的 Python 脚本中 我执行了一些需要 root 权限的操作 我还创建并写入文件 我不想由 root 独占所有 而是由运行我的脚本的用户独占所有 通常 我使用以下命令运行脚本sudo 有办法做到上述吗 您可以使用以下方式在 uid
  • Flex 的远程版本误解了我的规则

    我使用 flex 和 bison 编写了一个小汇编程序 可以在我的机器 ubuntu 10 10 上构建并运行正常 现在其他人正在尝试在 arch linux 上构建它 并且他们安装的 flex 产生了不同的 lex yy c 这是不匹配的
  • 使用 hcitool 扫描低功耗蓝牙?

    当我运行此命令时 BLE 设备扫描仅持续 5 秒 sudo timeout 5s hcitool i hci0 lescan 输出显示在终端屏幕中 但是 当我将输出重定向到文件以保存广告设备的地址时 每次运行该命令时 我都会发现该文件是空的
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • ARM 的内核 Oops 页面错误错误代码

    Oops 之后的错误代码给出了有关 ARM EX 中的恐慌的信息 Oops 17 1 PREEMPT SMP在这种情况下 17 给出了信息 在 x86 中它代表 bit 0 0 no page found 1 protection faul

随机推荐

  • java ExecutorService的invokeAll方法有两种用法 +价格超时计算

    exec invokeAll tasks exec invokeAll tasks timeout unit 其中tasks是任务集合 xff0c timeout是超时时间 xff0c unit是时间单位 两者都会堵塞 xff0c 必须等待
  • CSDN日报20170616 ——《从裁缝到码农》

    程序人生 从裁缝到码农 作者 xff1a 修电脑的裁缝酱 我伸出颤抖的手去抓 xff0c 发现曾经遥不可及的梦想 xff0c 经过坚持和努力之后 xff0c 真的可以抓住 我把它抓在手心 xff0c 紧紧地 点击阅读全文 机器学习 一文了解
  • Android 之调节系统的亮度和音量

    主界面的布局非常简单 xff0c 就是三个按钮 xff0c home按钮 xff0c 返回主界面 xff0c volume按钮 xff0c 弹出音量进度条 xff0c brightness按钮 xff0c 弹出亮度进度条调节 主界面 xff
  • 用R语言对网络数据进行统计分析(五)

    R语言社交网络快速入门 一 7天入门社交网络 R语言社交网络快速入门 二 7天入门社交网络 R语言社交网络快速入门 三 7天入门社交网络 R语言社交网络快速入门 四 7天入门社交网络 R语言社交网络快速入门 五 7天入门社交网络 网络图特征
  • SSH远程登录并执行命令测试

    SSH 是 Linux 下进行远程连接的基本工具 xff0c 但是如果仅仅用它来登录那可是太浪费啦 xff01 SSH 命令可是完成远程操作的神器啊 xff0c 借助它我们可以把很多的远程操作自动化掉 xff01 下面就对 SSH 的远程操
  • CentOs7.5yum安装JDK1.8详细过程

    先查看有哪些可安装的 yum list java root 64 VM 16 35 centos yum list java Loaded plugins fastestmirror langpacks Loading mirror spe
  • 你确定不了解下 Java 中反射黑魔法吗?

    前言 反射在Java 中算是黑魔法的存在了 用一句话来形容 反其道而行之 很多限制在反射面前 xff0c 就是形同虚设 例如我们设置了一个类的成员变量是 private 目的就是为了不让外部可以随意修改访问 但是呢 xff0c 使用反射就可
  • flutter- Android SDK file not found

    问题表现 执行flutter doctor 的时候 xff0c 报错Android SDK file not found xff0c 很明确的说没有配置 30 0 3 问题解决 首先去报错的SDK路径中排查是否有这个版本 发现有 xff0c
  • Flutter-安装APK失败INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

    问题表现 今天一如既往的堆砌代码长城 xff0c 但是运行 flutter 项目的时候 xff0c 突然出现 APK 安装失败 xff1a 问题解决 遇到问题不要慌 xff0c 先仔细看看报错信息 xff0c 原因说的明明白白 xff0c
  • Java-Reflection反射-获取包括父类在内的所有字段

    前言 今天Android移动端要加个新功能 所以回归Android程序员的身份 开发的过程中 发现了之前的代码写的有很多问题 真的应该把时间抽出来重构一下了 其中有反射的一个坑 工具类某方法反射获取传入Model的属性值 但是当我把公共属性
  • Git-命令行-删除本地和远程分支

    命令行方式 Git Bash 切换到要操作的项目文件夹 命令行 cd lt ProjectPath gt 查看项目的分支们 包括本地和远程 命令行 git branch a 删除本地分支 命令行 git branch d lt Branch
  • 【获奖公布】征文 | 你会为 AI 转型么?

    AI xff08 Artificial Intelligence xff09 xff0c 即人工智能 人工智能领域的研究包括机器人 语音识别 图像识别 自然语言处理和专家系统等 人工智能从诞生以来 xff0c 理论和技术日益成熟 xff0c
  • 解除控制伽卡他卡控制

    测试环境 Win10系统伽卡他卡软件未被完全控制情况下 首先打开CMD xff08 以管理员身份 xff09 然后输入这串代码 taskkill f im student exe t 最后即可成功 xff01 xff08 操作仅供参考 xf
  • Git-命令行-拯救“Your local changes to the following files would be overwritten by checkout”

    事故现场 有些时候 xff0c 当我们使用 git checkout lt branchname gt 命令切换分支的时候 xff0c 有时会切换失败 xff0c 然后出现以下的提示信息 xff1a 提示信息说的很清楚 xff0c 当前分支
  • Git- [!remote rejected]:refusing to delete the current branch

    前言 xff1a 这算是 xff0c 在上篇博客 Git error dst refspec branch matches more than one 产生过程中的额外发现 为了测试一些 git 命令的实现 xff0c 我在 github
  • 请回答:Git是什么?

    Git 是什么 xff1f 不卖关子 xff0c 直接说重点 xff0c 以下是 Git 官网上的描述 xff1a Git is a free and open source distributed version control syst
  • Git三大特色之Stage(暂存区)

    这是开篇 有人说 xff0c 暂存区是 Git 最精彩的设计 xff0c 同时也是最难理解的部分 xff0c 两者我都感觉不太明显 xff0c 但当我想写关于暂存区的理解后 xff0c 发现的确不怎么好讲 xff0c 这个玩意 xff0c
  • JSON解析异常-org.json.JSONException: Expected a ‘:‘ after a key

    问题场景 后端开发好接口 xff0c 给发过来接口文档 xff0c 于是开始开心的使用 GsonFormat 插件 建实体了 xff0c 然而转换 JSON 时出错 错误现场截图 xff1a 问题分析 JSON 转换失败一般有以下两个原因
  • Gradle-Could not determine java version from ‘11‘

    问题描述 因为换工作 xff0c 需要新配置的环境 xff0c 所以遇到了各种问题 xff0c 例如下面这个 xff1a 发生错误的相关环境配置 JDK 11Gradle 4 4 如果不知道自己安装的 Java 版本 xff0c 可以根据一
  • linux 按键修改简单示例

    1 修改方法 文本界面和图形界面的keycode是不一样的 xff0c 按键映射方式不同 xff0c 因此修改方法不同 1 1 文本界面 1 1 1 修改命令 在文本界面 xff0c dumpkeys 可以查询当前keycode 在文本或图