前言
从 macOS 切换到 Linux 的 MacBook 用户,最想念的功能之一就是三指拖拽——用三根手指轻放在触控板上就能拖动窗口或选中文字,无需按下触控板。这种操作方式一旦习惯了就再也回不去了,就像用惯了 Vim 的人再让他用记事本写代码一样痛苦。
本文介绍如何在 Fedora 上实现这个功能,让 MacBook 在 Linux 下也能拥有近乎原生的触控板体验。
问题分析
为什么直接配置不工作?
libinput 是现代 Linux 发行版的触控板驱动,它支持 clickfinger 模式:
| 手指数量 | clickfinger 模式行为 |
|---|---|
| 1 指 | 左键 |
| 2 指 | 右键 |
| 3 指 | 中键(不是左键!) |
问题就在这里:libinput 的 clickfinger 模式不支持将三指映射为左键,所以无法通过简单的配置实现三指拖拽。
libinput 已内置三指拖拽功能
好消息是,libinput 从某个版本开始已经内置了三指拖拽功能(LIBINPUT_CONFIG_3FG_DRAG),只是默认被禁用。我们需要编译 libinput 并启用这个功能。
解决方案
环境信息
- 系统:Fedora 43
- 桌面:KDE Plasma(X11 会话)
- 设备:MacBook Air 2015 (bcm5974 触控板)
- libinput 版本:1.30.1
步骤 1:安装 X11 会话支持(如果使用 KDE Wayland)
Fedora 43 的 KDE 默认只有 Wayland 会话。X11 配置在 Wayland 下不生效,建议切换到 X11:
sudo dnf install -y plasma-workspace-x11
安装后,在登录界面选择 “Plasma (X11)” 会话。
步骤 2:安装编译依赖
sudo dnf install -y --skip-unavailable \
git meson gcc gcc-c++ \
libevdev-devel libwacom-devel mtdev-devel \
systemd-devel check libudev-devel \
python3-libevdev python3-pytest gtk4-devel
步骤 3:下载 libinput 源码
mkdir -p ~/libinput-build && cd ~/libinput-build
# 下载当前系统对应版本
wget https://gitlab.freedesktop.org/libinput/libinput/-/archive/1.30.1/libinput-1.30.1.tar.gz
tar xzf libinput-1.30.1.tar.gz
cd libinput-1.30.1
说明:
- 建议下载与系统已安装版本一致的源码,避免兼容性问题
- 可以通过
libinput --version查看当前版本
步骤 4:修改源码启用三指拖拽
编辑 src/evdev-mt-touchpad-gestures.c,找到 tp_3fg_drag_default 函数:
// 修改前
static enum libinput_config_3fg_drag_state
tp_3fg_drag_default(struct tp_dispatch *tp)
{
return LIBINPUT_CONFIG_3FG_DRAG_DISABLED;
}
// 修改后
static enum libinput_config_3fg_drag_state
tp_3fg_drag_default(struct tp_dispatch *tp)
{
return LIBINPUT_CONFIG_3FG_DRAG_ENABLED_3FG;
}
可以用 sed 一键修改:
sed -i 's/LIBINPUT_CONFIG_3FG_DRAG_DISABLED/LIBINPUT_CONFIG_3FG_DRAG_ENABLED_3FG/' \
src/evdev-mt-touchpad-gestures.c
说明:
- 只需修改一行代码,将
DISABLED改为ENABLED_3FG - libinput 早就实现了这个功能,只是默认关闭了而已
步骤 5:编译安装
# 配置
meson setup build --prefix=/usr -Ddocumentation=false -Ddebug-gui=false
# 编译
meson compile -C build
# 备份原版本
sudo cp /usr/lib64/libinput.so.10.13.0 /usr/lib64/libinput.so.10.13.0.bak
# 安装
sudo meson install -C build
# 更新动态链接库缓存
sudo ldconfig
说明:
- 备份原版本是个好习惯,万一出问题可以快速恢复
- 如果不确定原库文件路径,可以用
ls /usr/lib64/libinput.so*查看
步骤 6:验证安装
/usr/bin/libinput --version
# 输出: 1.30.1
步骤 7:配置 X11 触控板选项(可选)
创建 /etc/X11/xorg.conf.d/30-touchpad.conf:
Section "InputClass"
Identifier "touchpad"
Driver "libinput"
MatchIsTouchpad "on"
Option "Tapping" "on" # 开启轻触点击
Option "TappingDrag" "false" # 禁用单指拖动(避免误触)
Option "ClickMethod" "clickfinger" # 使用手指数量区分按键
Option "NaturalScrolling" "on" # 自然滚动(可选)
EndSection
说明:
TappingDrag设为false是为了避免单指拖动与三指拖拽冲突NaturalScrolling是 macOS 风格的滚动方向,按需开启
步骤 8:重新登录
注销并重新登录 X11 会话,三指拖拽功能即可生效。
验证效果
| 操作 | 效果 |
|---|---|
| 单指轻触 | 左键点击 |
| 三指轻放并移动 | 拖拽窗口/选中文字 |
现在可以试着用三根手指拖动窗口,感受一下久违的 macOS 体验吧。
故障排除
功能不生效
1、确认使用的是 X11 会话而非 Wayland:
echo $XDG_SESSION_TYPE # 应输出 x11
2、检查 libinput 库是否正确安装:
ls -la /usr/lib64/libinput.so*
恢复原版本
如果出现问题,可以恢复系统原版 libinput:
sudo cp /usr/lib64/libinput.so.10.13.0.bak /usr/lib64/libinput.so.10.13.0
sudo ldconfig
系统更新后失效
Fedora 更新 libinput 包时会覆盖补丁版本。如果三指拖拽失效,需要重新编译。建议保留编译目录以便快速重新安装:
cd ~/libinput-build/libinput-1.30.1
sudo meson install -C build
sudo ldconfig
总结
虽然 Linux 下没有原生支持 macOS 风格的三指拖拽,但 libinput 已经内置了相关代码,只需修改一行代码重新编译即可启用。这个小小的改动能显著提升 MacBook 在 Linux 下的触控板体验。
唯一的缺点是系统更新 libinput 后需要重新安装,不过考虑到这个功能带来的便利,这点麻烦还是值得的。毕竟,能用三指拖拽的日子,才是好日子。

