陈宇恒博客 - shell
type: channel
link: https://chenyuheng.cn/tag/shell/
items: Ubuntu 桌面设置大写锁定（Capslock）键切换输入法中英文

Ubuntu 桌面设置大写锁定（Capslock）键切换输入法中英文
type: item
date: 2023-08-07T05:02:00+00:00
description: 最近买了台台式电脑，装了桌面端的 Ubuntu，主用是想写 linux 上的程序方便点，但日常用了几天后感觉也还不错。这篇文章分享下 Ubuntu 桌面设置大写锁定键切换中英文的折腾经验。我在会用 shift 输入大写字母后，大写锁定按键就很少用到了。苹果电脑的大写锁定键默认就是用来切换中英文的，用起来很方便，不用担心按 shift 键时，系统识别错误“大写输入”与“切换中英文”导致不便。之前使用 Windows，用官方工具 PowerToys 的键盘映射功能就可以很容易地把大写锁定按键映射到了切换中英文的快捷键（ctrl+空格）上，然后在输入法设置中取消 shift 切换中英文的快捷键，就可以获得和苹果电脑相似的中英文切换体验，十分舒服。但 Ubuntu 上没有 PowerToy 这种配置简单的键盘映射工具，有一些键盘映射的工具但试了下也不容易实现想要的效果。折腾了半天后终于还是成功了，不过涉及的配置还挺多的，包括映射脚本、输入法设置、大小写转换禁用配置、执行脚本、root 权限配置、自启动配置。详情如下：配置步骤一共六步，前三步配置键盘映射，后三步配置开机自启动。一、映射脚本本体是一小段 python 脚本：#!/usr/bin/env python3 # -*- coding: utf-8 -*- import keyboard def onCapslock(e): keyboard.press_and_release("ctrl+f3") keyboard.on_press_key("capslock", onCapslock, True) keyboard.wait()将这段脚本保存为 capslock_mapping.py 文件，使用 chmod 命令更改这个脚本的权限：chmod 100 capslock_mapping.py这么设置权限的原因我在后面说。改好权限后把这个脚本文件放在一个固定的地方，我放在 /home/yuheng/capslock/capslock_mapping.py，记下路径，之后的配置会用到这个路径。这段脚本使用了第三方库 keyboard，所以运行之前需要使用 pip 安装库。由于监听键盘需要 root 权限，所以这段脚本也需要在 root 权限下才能正常运行。pip 安装也需要使用 root 账户安装：sudo python3 -m pip install keyboard二、输入法设置上面的脚本把大写锁定按键映射到了 ctrl+f3，这是我感觉最不容易和日常使用起冲突的按键，所以也要在输入法设置里面把切换中英文的快捷键改成 ctrl+f3。你可以改成其他你觉得不错的快捷键。注意上面的脚本内容也要对应更改。也尝试过原始的 ctrl+空格，但这个快捷键会导致切换中英文时多输入一个空格，不知道为啥，但比较麻烦，所以改到了 ctrl+f3。三、大小写转换禁用配置现在运行这段脚本就可以切换中英文了，但原来的大小写切换也同时在切换，不能正常使用。这里可以使用 gnome tweak tool 禁用大写锁定按键切换大小写的功能。使用下面的命令安装并打开 gnome tweak tool：sudo apt-get install gnome-tweak-tool gnome-tweaks打开后在“键盘和鼠标”-->“其他布局选项”-->“Caps Lock 行为”里选择“Caps Lock 被禁用”。设置好后重启电脑，大写锁定按键切换大小写的功能就被禁用了，脚本就可以手动启动正常工作了：sudo /home/yuheng/capslock/capslock_mapping.py & # 这个路径改成你自己的映射脚本路径四、执行脚本手动启用脚本太麻烦了，需要开机自启动。接下来的几个配置设置开机自启动。首先配置执行脚本，也就是映射脚本简单包装下，保存为 launch.sh 文件：#!/bin/bash sudo /home/yuheng/capslock/capslock_mapping.py & # 这个路径改成你自己的映射脚本路径这个脚本也需要使用 chmod +x launch.sh 加上执行权限。五、root 权限配置直接执行上面的映射脚本需要输入密码，我们希望它可以自动运行，所以需要配置执行该脚本不需要输入密码也能以 root 权限运行。这可以通过配置 /etc/sudoers 来实现。使用 sudo vim /etc/sudoers 打开 /etc/sudoers 配置，然后将下面一行配置插入到文件的末尾：yuheng ALL=(ALL) NOPASSWD: /home/yuheng/capslock/capslock_mapping.py其中第一个单词换成你的用户名，映射脚本的路径也换成你…