最近买了台台式电脑,装了桌面端的 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

其中第一个单词换成你的用户名,映射脚本的路径也换成你的路径。

然后使用 :w! 强制保存。这个文件即使以 root 权限打开也无法直接保存,但加上感叹号可以强制保存。

配置好 /ect/sudoers 后映射脚本就可以免密码且以 root 模式启动了。我们在第一步里把映射脚本的权限设置为 100 就是取消了非 root 用户对该脚本的读写权限,以避免该脚本被利用绕过 root 密码产生安全隐患。

六、自启动平配置

最后一步,在所有应用程序菜单里找到“启动应用程序”(startup application)应用,这应该是系统自带的应用。然后添加第四步保存的执行脚本 launch.sh 到开机自启动项里。保存后就完成所有的配置了。重启试试看能否使用大写锁定按键切换中英文咯。

后记

折腾一波花了好几个小时,即使是跟着这个教程做估计也挺麻烦的。如果你操作的过程中遇到了问题可以留言问我。Ubuntu 挺自由,但在具体问题上可能学习成本和花费精力还比较多。另外这个配置方法还有些偶尔遇见的问题,不多说了。如果你知道更好的配置方法欢迎分享!

另外还推荐一个 Ubuntu 下的扩展:Custom Hot Corners - Extended

这是个 GNOME 扩展,可以给鼠标在桌面四角的行为定义快捷行为,比如右上角左键关闭当前窗口、右下角左键显示桌面、右下角滚轮调节音量等。本来只是想模拟 Windows 可以盲右上角点击关闭当前窗口的,没想到搜到了这么个扩展,看了看支持的行为挺多,可以折腾下。

标签: Linux, Ubuntu, Python, GNOME, shell

已有 5 条评论

  1. 还是大佬厉害,很强,哈哈哈~

    1. 还是不太优雅,不过凑合能用了哈哈

  2. DK DK

    请问可以完全像Mac一样嘛,例如长按切换英文大小写之类的

  3. 这篇文章写得深入浅出,让我这个小白也看懂了!

添加新评论