Loading...

文章背景图

archlinux安装鼠标主题

2026-10-11
9
- 字
- 分钟
|

Arch Linux 安装鼠标主题

说明

Linux 桌面的光标是 XCursor 格式(cursors/ 目录下的一堆文件)。主题分两类:已经能直接用的和Windows 格式需要转换的。下面先讲通用规则(判断 → 安装 → 应用 → 验证),再给一个本次实装的具体案例。以 Arch + niri + DMS 为例,全程普通用户权限,无需 sudo。

一、先判断主题属于哪一类

解压后看里面是什么:

看到的东西 类型 处理
cursors/ 目录(里面直接是 default、pointer…) XCursor 跳到第二节,直接装
Install.inf + 一堆 .ani Windows 格式 跳到第三节,先转换
index.theme + cursors/ XCursor(带元信息) 跳到第二节,index.theme 都不用补

常见后缀:.tar.gz 基本都是 Linux 原生;.zip 两种都可能。没有 unzip 命令时用 Python 解:python3 -c "import zipfile; zipfile.ZipFile('主题.zip').extractall('目录')"。

二、不需要转换的:直接安装

# 1) 放文件
mkdir -p ~/.local/share/icons/my-theme
cp -r 解压目录/cursors ~/.local/share/icons/my-theme/

# 2) 补 index.theme(压缩包里已带就跳过)
#    Inherits 是兜底:主题缺某个光标名就回退,避免光标变隐形
printf '[Icon Theme]\nName=my-theme\nInherits=Adwaita\nExample=default\n' \
  > ~/.local/share/icons/my-theme/index.theme

# 3) 传统路径软链(有些老程序只认 ~/.icons)
ln -sfn ~/.local/share/icons/my-theme ~/.icons/my-theme

把 my-theme、解压目录 换成你自己的。

应用:改三处,一个都不能少

# 1) GTK / GNOME
gsettings set org.gnome.desktop.interface cursor-theme my-theme
gsettings set org.gnome.desktop.interface cursor-size 32

# 2) DMS 设置:改 ~/.config/DankMaterialShell/settings.json 里的 cursorSettings
#    { "theme": "my-theme", "size": 32 }
#    niri 配置 ~/.config/niri/dms/cursor.kdl 由 DMS 自动生成,别手改

# 3) 重启 DMS —— 这步不能省
dms restart

⚠️ dms restart 为什么不能省:DMS 的可选主题列表只在启动时扫描 ~/.local/share/icons 和 ~/.icons。主题是刚装的,不重启它列表里根本没有,打开图形设置还会用内存里的旧值把你的配置覆盖回去(本次实测就被覆盖回过 System Default / Adwaita)。

正确顺序:装主题 → 改配置 → dms restart → 再去设置界面确认,写完盯 12 秒确认不反弹。

验证

gsettings get org.gnome.desktop.interface cursor-theme
grep -A3 '^cursor' ~/.config/niri/dms/cursor.kdl

# 硬核验证:libXcursor 能不能真加载到这个主题
python3 -c "
import ctypes; l=ctypes.CDLL('libXcursor.so.1')
l.XcursorLibraryLoadImages.restype=ctypes.c_void_p
l.XcursorLibraryLoadImages.argtypes=[ctypes.c_char_p,ctypes.c_char_p,ctypes.c_int]
print('OK' if l.XcursorLibraryLoadImages(b'default', b'my-theme', 32) else 'FAIL')"

已经开着的应用不会自动换光标(它们启动时就读完配置了),浏览器、终端、Electron 都要彻底退出重开;niri、DMS 面板和之后新启动的程序立即生效。

三、需要转换的:先转成 XCursor

1. 准备工具

临时用 venv 不污染系统(长期用可 paru -S win2xcur):

mkdir -p /tmp/cur && python3 -m venv /tmp/cur/venv
/tmp/cur/venv/bin/pip install win2xcur

2. 转换

mkdir -p /tmp/cur/src                          # 解压目录
python3 -c "import zipfile; zipfile.ZipFile('主题.zip').extractall('/tmp/cur/src')"
cd /tmp/cur/src/主题目录                        # 进到含 Install.inf 的那一层

# 输出目录必须先建好,否则报 FileNotFoundError: .../pencil
mkdir -p ~/.local/share/icons/my-theme/cursors
/tmp/cur/venv/bin/win2xcurtheme Install.inf -o ~/.local/share/icons/my-theme/cursors

# 抽查:几个文件的 md5 应互不相同,防止全都转成同一张图
md5sum ~/.local/share/icons/my-theme/cursors/default \
       ~/.local/share/icons/my-theme/cursors/pointer \
       ~/.local/share/icons/my-theme/cursors/wait

产物是"少量真实文件 + 大量别名软链"(left_ptr、ibeam、hand2 之类指向真实文件),.ani 的动画帧会完整保留。

3. 安装

输出目录已经直接是 ~/.local/share/icons/my-theme/cursors,所以只剩两步,然后完全照第二节走:

printf '[Icon Theme]\nName=my-theme\nInherits=Adwaita\nExample=default\n' \
  > ~/.local/share/icons/my-theme/index.theme
ln -sfn ~/.local/share/icons/my-theme ~/.icons/my-theme

接着就是第二节的"改三处 + dms restart + 验证"。

四、具体案例:Sunna Cursor

主题:/home/zhou/Downloads/Sunna Cursor.zip(作者 NOIIRE,Windows 格式,17 个 .ani + Install.inf)。按第三节走,实际执行的是:

# 转换
mkdir -p /tmp/sunna/src /tmp/sunna/out
python3 -c "import zipfile; zipfile.ZipFile('/home/zhou/Downloads/Sunna Cursor.zip').extractall('/tmp/sunna/src')"
cd "/tmp/sunna/src/Sunna Cursor"
/tmp/sunna/venv/bin/win2xcurtheme Install.inf -o /tmp/sunna/out

# 安装
mkdir -p ~/.local/share/icons/Sunna-Cursor
cp -r /tmp/sunna/out/* ~/.local/share/icons/Sunna-Cursor/cursors/
printf '[Icon Theme]\nName=Sunna-Cursor\nInherits=Adwaita\nExample=default\n' \
  > ~/.local/share/icons/Sunna-Cursor/index.theme
ln -sfn ~/.local/share/icons/Sunna-Cursor ~/.icons/Sunna-Cursor

# 应用
gsettings set org.gnome.desktop.interface cursor-theme 'Sunna-Cursor'
gsettings set org.gnome.desktop.interface cursor-size 32
# settings.json 的 cursorSettings → { theme: "Sunna-Cursor", size: 32 }
dms restart

实测结果:

  • ls ~/.local/share/icons/Sunna-Cursor/cursors | wc -l → 148(15 个真实文件 + 133 条别名软链),9.5M
  • 每个光标 3 档尺寸(32/48/64),default 是蓝箭头、pointer 是手型图,抽帧比对无误
  • 主题只有 32/48/64 三档,所以 cursor-size 取 32,三处保持一致

本次踩的坑:写完配置直接打开 DMS 图形设置确认,结果被 DMS 用内存里的旧状态覆盖回 System Default,cursor.kdl 也被写回 Adwaita。原因就是上面那条——dms restart 没先做。重来一遍(改配置 → dms restart → 再确认)就稳定了。

后续问题:桌面其他地方都好了,只有微信(Flatpak)里还是黑箭头 —— 那是另一个原因,见《微信 Linux 光标主题不生效.md》的情况二。

卸载

rm -rf ~/.local/share/icons/my-theme ~/.icons/my-theme
gsettings set org.gnome.desktop.interface cursor-theme Adwaita
gsettings set org.gnome.desktop.interface cursor-size 24
# DMS 里改回 System Default,或直接 dms restart 让列表重新扫描

常见问题

  • 光标变隐形:index.theme 缺了,或没写 Inherits,补上即可。
  • DMS 总把设置改回去:dms restart 没做,见第二节的提醒。
  • 光标太小/太大:主题一般只有 32/48/64 三档,选一档后三处保持一致。
  • 转换报 FileNotFoundError: .../pencil:输出目录没提前 mkdir -p。
  • 某个应用死活不认主题:它可能没跑在 Wayland 上,见 微信 Linux 光标主题不生效。

资源

这是我使用的光标
https://ko-fi.com/s/584fe95124
效果图

原创

archlinux安装鼠标主题

本文链接: archlinux安装鼠标主题

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

评论交流

文章目录