光标主题

出自 ArchWiki

显示服务器 伴随有 光标主题,其帮助 GUI 导航和操作的各个方面。显示服务器包含一个光标主题,然而,可以安装和选择其他光标主题。

安装

安装可以通过软件包完成,或者下载并解压到适当的目录。

软件包

光标主题在以下位置可用

手动安装

如果官方软件仓库或 AUR 中没有可用的光标主题,则可以手动添加。许多网站提供光标主题下载。下载后,它们需要放置在 icons 目录中(因为光标可以与图标主题捆绑在一起)。

一些提供光标主题的网站

对于用户特定的安装,使用 ~/.local/share/icons/ 目录,或为了向后兼容而使用的 ~/.icons/。使用以下命令解压它们,该命令适用于大多数压缩包

$ tar xvf foobar-cursor-theme.tar.gz -C ~/.local/share/icons

光标主题目录结构为 theme-name/cursors,例如:~/.local/share/icons/theme/cursors/;确保解压后的文件遵循此结构。

注意: 对于系统范围的安装,使用 /usr/share/icons 目录。通常不鼓励直接解压到此目录,因为此处的文件不受 pacman 跟踪;建议为光标主题创建一个 软件包

可以使用以下命令查看已安装的光标主题

find /usr/share/icons ~/.local/share/icons ~/.icons -type d -name "cursors"

如果软件包包含 index.theme 文件,请检查其中是否包含 "Inherits" 行。 如果是,请检查继承的主题是否也存在于系统上(如果需要,请重命名)。

配置

有多种方法可以设置光标主题。如果程序未配置为使用相同的光标主题,则光标外观可能会在一个窗口与另一个窗口之间发生变化。

通常可以为每个桌面环境和每个GUI 框架设置已安装的光标。当未设置配置时,光标主题 "default" 是回退选项。

注意: 重启 X 服务器以使所有光标更改生效。 某些应用程序在单独重启时也可能会获取光标更改。

GTK 和 Qt 配置文件

GTK

~/.gtkrc-2.0
gtk-cursor-theme-name="cursor_theme_name"
~/.config/gtk-3.0/settings.ini
[Settings]
gtk-cursor-theme-name=cursor_theme_name

Qt

Qt 没有用于光标的配置。 Qt 程序可能会从桌面环境、X 资源或最后的 "default" 光标主题中获取光标主题(如果没有配置)。 要使 Qt 程序在 ~/.local/share/icons/ 路径中找到光标,它必须在 XCURSOR_PATH 环境变量中。

桌面环境

桌面环境 使用 XSETTINGS 协议,通常通过像 Xsettingsd 这样的设置守护进程来实现。

GNOME

要在 GNOME 中更改主题,请使用 gnome-tweaks 或使用以下命令直接设置配置

$ gsettings set org.gnome.desktop.interface cursor-theme cursor_theme_name

使用以下命令更改光标大小(根据主题,大小为 24、32、48、64)

$ gsettings set org.gnome.desktop.interface cursor-size cursor_theme_size
注意: 默认情况下,在 Wayland 上,GNOME 应用程序应该无法显示位于 ~/.local/share/icons 中的光标主题。 作为一种解决方法,您可以将该路径添加到 XCURSOR_PATH

MATE

MATE 中,可以使用 mate-control-centergsettings(1)。 要更改主题

$ gsettings set org.mate.peripherals-mouse cursor-theme cursor_theme_name

要更改大小

$ gsettings set org.mate.peripherals-mouse cursor_theme_size

Plasma (Wayland)

必须安装 xdg-desktop-portal-gtkGTK 应用程序才能在 Wayland 上正确应用光标主题。

XFCE

要更改 xcursor 主题,请使用

$ xfconf-query --channel xsettings --property /Gtk/CursorThemeName --set cursor_theme_name

要更改大小

$ xfconf-query --channel xsettings --property /Gtk/CursorThemeSize --set cursor_theme_size

X 资源

要本地命名光标主题,请添加到 ~/.Xresources 文件中

Xcursor.theme: cursor-theme

为了正确加载光标主题,窗口管理器需要执行此操作; 如果没有,可以在窗口管理器之前强制加载,方法是将以下命令放入 .xinitrc.xprofile 中(取决于个人设置)

~/.xinitrc or ~/.xprofile
...
xrdb ~/.Xresources
...

可选地,如果您的光标主题支持多种尺寸,请将此行添加到 ~/.Xresources

Xcursor.size: 16
提示: 24、32、48 或 64 也可能是合适的尺寸。

如果不确定支持的光标尺寸,请在不进行此设置的情况下启动 X,并让它自动选择光标尺寸。 (有关详细信息,请参阅窗口管理器文档)。

默认光标主题

如果应用程序无法获取配置,则会使用光标主题名称 "default"。 因此,为了使光标选择在分散的配置中保持一致,最后的手段是将默认主题编辑为所选主题的同义词。

默认光标主题位于通常的主题位置

  • ~/.local/share/icons/default/
  • ~/.icons/default/
  • /usr/share/icons/default/ (系统范围)

别名

可以通过将包含所需光标的目录符号链接/复制到默认主题路径,将默认主题别名为任何其他光标主题

$ ln --symbolic /usr/share/icons/cursor_theme_name ~/.local/share/icons/default

继承

或者,主题可以简单地继承另一个所需的主题

~/.local/share/icons/default/index.theme
[Icon Theme]
Inherits=cursor_theme_name

LXAppearance

LXAppearance 创建一个 ~/.icons/default/index.theme 文件:如果您手动编辑了该文件,LXAppearance 将覆盖它。

环境变量

您可以使用环境变量为单个应用程序设置主题以临时试用,例如

$ XCURSOR_THEME=cursor_theme_name xclock

如果您的光标主题支持多种尺寸,则 XCURSOR_SIZE 是可选的。

本文或本节的事实准确性存在争议。

原因: 并非所有图形环境都会获取 shell 初始化文件,应优先链接到 环境变量#图形环境。 还需要解释或链接到“可能的问题”。 (在 Talk:Cursor themes 中讨论)

如果光标主题安装在 ~/.local/share/icons/ 中,为了避免可能的问题,请将该路径添加到 XCURSOR_PATH。 例如

~/.bash_profile
export XCURSOR_PATH=${XCURSOR_PATH}:~/.local/share/icons

显示管理器

通常可以在显示管理器中设置光标主题,但请记住,光标主题可能不会延续到用户会话。

GDM

请参阅 GDM#更改光标主题

Tor Browser

Tor Browser 拥有自己的“虚拟”主目录,并且不读取用户主目录中的文件。 因此,您需要将配置以及必要的图标主题复制到 Tor Browser 安装目录

在 Tor Browser “虚拟”主目录上创建一个 GTK 配置文件

~/.local/share/torbrowser/tbb/x86_64/tor-browser/Browser/.config/gtk-3.0/settings.ini
[Settings]
gtk-cursor-theme-name=cursor_theme_name

如果所需的光标主题未在系统范围内安装,则必须将其复制到 Tor Browser “虚拟”主目录; 例如

$ cp -r ~/.local/share/icons/cursor_theme_name ~/.local/share/torbrowser/tbb/x86_64/tor-browser/Browser/.local/share/icons/

您也可以直接简单地复制整个光标主题文件夹

$ cp -r ~/.local/share/icons ~/.local/share/torbrowser/tbb/x86_64/tor-browser/Browser/.local/share

故障排除

创建缺失光标的链接

当主题缺少某些光标时,应用程序可能会继续使用默认光标。 可以通过添加指向缺失光标的链接来纠正此问题。 例如

$ cd ~/.icons/theme/cursors/
$ ln -s right_ptr arrow
$ ln -s cross crosshair
$ ln -s right_ptr draft_large
$ ln -s right_ptr draft_small
$ ln -s cross plus
$ ln -s left_ptr top_left_arrow
$ ln -s cross tcross
$ ln -s hand hand1
$ ln -s hand hand2
$ ln -s left_side left_tee
$ ln -s left_ptr ul_angle
$ ln -s left_ptr ur_angle
$ ln -s left_ptr_watch 08e8e1c95fe2fc01f976f1e063a24ccd

如果以上方法无法解决问题,请在 /usr/share/icons/whiteglass/cursors 中查找您的主题可能缺少的其他光标,并为这些光标创建链接。

提示: 您也可以删除不需要的光标。 例如,要删除“watch”光标
$ cd ~/.icons/theme/cursors/
$ rm watch left_ptr_watch
$ ln -s left_ptr watch
$ ln -s left_ptr left_ptr_watch

提供缺失的光标

某些程序设置了自己的自定义光标 ~/.Xresources,您可能想要覆盖它们。 rdesktop 是一个常见的例子,它连接到 Microsoft Windows 计算机并使用从远程计算机获得的光标,由于协议限制导致转换质量较差,这些光标通常难以看清。

可以通过将这些光标替换为来自相同(或另一个)光标主题的光标来解决此问题。 为了做到这一点,必须获得图像的哈希值。 这是通过在启动设置这些光标的应用程序之前设置 XCURSOR_DISCOVER 环境变量来完成的

$ XCURSOR_DISCOVER=1 rdesktop ...

第一次(且仅第一次)设置光标时,将显示一些详细信息,如下所示

Cursor image name: 24020000002800000528000084810000
...
Cursor image name: 7bf1cc07d310bf080118007e08fc30ff
...
Cursor hash 24020000002800000528000084810000 returns 0x0

当 Xcursor 查找缺失的光标时,搜索路径包括 ~/.icons/default/cursors,因此可以将图像放置在此处以供 Xcursor 查找。 首先,创建此目录(如果尚不存在)

$ mkdir -p ~/.icons/default/cursors

然后将哈希值链接到目标图像。 这里我们使用 Vanilla-DMZ 光标主题中的 left_ptr 图像

$ ln -s /usr/share/icons/Vanilla-DMZ/cursors/left_ptr ~/.icons/default/cursors/24020000002800000528000084810000

更改将在应用程序重启后立即可见。 无需特殊的应用程序启动方法。

更改 X 形默认光标

默认的 X 形 Xcursor 出现在不将默认光标设置为 left_ptr 的窗口管理器中,或者在使用 XCB(如 awesome)而不是 Xlib 的窗口管理器中。

要修复此问题,只需将以下内容添加到您的 ~/.xinitrc、xsession 或窗口管理器的启动配置中(如果可能,例如 bspwm 的 bspwmrc)。

$ xsetroot -cursor_name left_ptr

光标样式列表在 X 协议的 附录 B 中。

.Xdefaults

如果您有冲突的光标,则可能是因为在 ~/.Xdefaults 文件中设置了不同的光标。

启动时光标大小未更改

如果您尝试通过 ~/.xinitrc 中的 ~/.Xresources 更改光标大小但不起作用,请确保 xrandr 在加载 ~/.Xresources 之前运行。

确保您的 ~/.xinitrc 看起来类似于以下内容

~/.xinitrc
xrandr
...
xrdb -merge ~/.Xresources
exec wm

在 Plasma (Wayland) 上光标大小或主题未更改

当在使用 PlasmaWayland 时更改光标大小或主题时,请确保在应用更改后重启会话 [1] [2]

这是一个 bug。 请参阅 KDE#Plasma 光标有时显示不正确 中的解决方法。

参见