Cursor themes (简体中文)

From 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/; 请确保解压出文件也是这样的结构。

Note: 如果想要系统范围安装,使用 /usr/share/icons 目录。不推荐直接将文件解压到这个目录, 因为手动添加的文件不会被 pacman 追踪;建议给光标主题创建一个 package

已经安装的光标主题可以通过这条命令查看:

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

如果软件包包含一个 index.theme 文件,检查里面是否有 "Inherits" 这一行。如果有,检查继承的主题是否也存在(有必要时重命名)。

配置

有许多方法设置光标主题。

XDG 规范

这个方法对 X11Wayland 光标主题都有效。

如果想要为指定用户配置,创建并编辑 ~/.icons/default/index.theme;如果想要 系统范围 配置,编辑 /usr/share/icons/default/index.theme

[icon theme] 部分中的 Inherits 选项必须被设置为X光标主题的目录名cursor_theme_name,举个例子 xcursor-breeze-snow:

~/.icons/default/index.theme
[icon theme] 
Inherits=cursor_theme_name

然后你应该编辑 ~/.config/gtk-3.0/settings.ini, 将 cursor_theme_name 替换为你选择的主题:

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

重启 X 以应用更改。

如果还是没用,试着创建一个将~/.icons/default/cursors (假设为指定用户安装)指向.local/share/icons/cursor_theme_name/cursors的符号链接然后再次重启 X。

LXAppearance

LXAppearance通过创建 ~/.icons/default/index.theme设置默认光标主题:如果你手动编辑它,LXAppearance 会覆写它。记得还要按照 #XDG 规范 手动编辑 ~/.config/gtk-3.0/settings.ini,因为有些应用,如 Firefox ,使用这个设置文件。

桌面环境

桌面环境 使用 X设置协议,通常通过设置守护进程达到效果。虽然这允许即时更改光标,但应用的主题在不同应用中可能不一致, 另见 #XDG 规范 来手动更改光标主题.

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
Note: 在 Wayland 上, Gnome 应用默认无法显示位于~/.local/share/icons的光标主题。作为一种解决方法,你可以 add that path to XCURSOR_PATH.

MATE

在 MATE 中可以使用 mate-control-center 或 gsettings 来修改主题:

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

修改尺寸:

gsettings set org.mate.peripherals-mouse theme-size

XFCE

修改 X光标主题 , 使用:

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

修改尺寸:

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

X resources

要想在本地命名光标主题,将下面这一行添加到 ~/.Xresources 文件:

Xcursor.theme: cursor-theme

要想正确地加载光标主题需要通过窗口管理器完成;如果窗口管理器无法完成,可以在输入 ~/.xinitrc.xprofile (使用哪个取决于个人配置)中添加以下命令强制在窗口管理器之前加载:

$ xrdb ~/.Xresources

可选地,如果你的光标主题支持多个尺寸,在 ~/.Xresources 中添加下面这一行:

Xcursor.size: 16
Tip: 32, 48 或 64 也可能是适用的尺寸

如果对支持的光标大小有疑问,在没有这个设置的情况下启动 X 并让它自动选择光标尺寸(查阅你的窗口管理器文档以获得更多细节)。

环境变量

你可以使用一个 环境变量 来为单个应用暂时设置主题,举个例子:

$ XCURSOR_THEME=SomeThemeName xclock

XCURSOR_SIZE 是可选的,如果你的光标主题支持多个尺寸就可以使用。

如果你的光标主题安装在 ~/.local/share/icons,为了避免潜在的问题,将该路径添加到 XCURSOR_PATH 。举个例子:

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

显示管理器

光标主题通常可以通过显示管理器设置,但注意光标主题可能不会跨用户会话延续。

GDM

请见 GDM (简体中文)#更改光标主题.

疑难解答

创建丢失光标的链接

当缺少一些光标时,应用可能使用默认光标。这可以通过创建丢失光标的链接来纠正。举个例子:

$ 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 来获取你的主题丢失的光标,并且给它们也创建链接。

Tip: 你也可以移除不想要的光标。移除 "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 电脑连接并使用远程机器的光标,这个光标因协议限制导致转译质量差,通常很难看清。

这可以通过用相同(或另一个)光标主题替换这些光标来解决。想要达成目的,必须获得图像的hash。这可以通过在启动设置这些光标的程序前设置 XCURSOR_DISCOVER 环境变量来完成:

$ XCURSOR_DISCOVER=1 rdesktop ...

在首次(而且只有首次)光标设置时,一些细节会被展示出来,像这样

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

当X光标寻找丢失的光标时,搜索的路径包含了~/.icons/default/cursors 所以这里可以放置用于X光标搜索的图像。首先,如果还没有这个目录就创建它:

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

然后将hash链接到目标图像。这里我们使用来自 Vanilla-DMZ 光标主题的 left_ptr 图像

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

应用重启后就可以看到更改效果。不需要特殊的启动应用的方法。

rdesktop

这里有一些 rdesktop 连接运行 Windows 7 的远程机器时常见的 Microsoft Windows 光标。不幸的是,动态光标难以被覆盖因为它们是被逐帧发送的,所以每一帧都需要一个映射!

$ ln -s /usr/share/icons/$THEME/cursors/xterm          ~/.icons/default/cursors/00000000017e000002fc000000000000
$ ln -s /usr/share/icons/$THEME/cursors/right_ptr      ~/.icons/default/cursors/00000093000010860000631100006609
$ ln -s /usr/share/icons/$THEME/cursors/plus           ~/.icons/default/cursors/01e00000201c00004038000080300000
$ ln -s /usr/share/icons/$THEME/cursors/left_ptr       ~/.icons/default/cursors/24020000002800000528000084810000
$ ln -s /usr/share/icons/$THEME/cursors/left_ptr_watch ~/.icons/default/cursors/6ce0180090108e0005814700a0021400
$ ln -s /usr/share/icons/$THEME/cursors/hand           ~/.icons/default/cursors/d2201000a2c622004385440041308800
$ ln -s /usr/share/icons/$THEME/cursors/watch          ~/.icons/default/cursors/fc618c00da110f0034fd0e004e082400

更改默认 X 形光标

默认的 X 形光标出现在没有设置默认光标为 left_ptr 的窗口管理器或用 XCB 代替 Xlib 的窗口管理器(如 awesome)中。

要想修复只需将下列内容添加到你的 ~/.xinitrc ,X会话 或 窗口管理器启动配置(如果可以的话,例如 bspwm 的 bspwmrrc)。

$ xsetroot -cursor_name left_ptr

光标风格列表在 X 协议的 appendix B 中。

.Xdefaults

如果你有冲突的光标,它可能是因为一个不同的光标已经在 ~/.Xdefaults 文件中被设置。

光标大小在启动时不会改变

如果你正试着通过你的 ~/.xinitrc 中的 ~/.Xresources 并且它没用的话,确保 xrandr 在加载 ~/.Xresources 运行。

确保你的 ~/.xinitrc 看起来类似于下面这样

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

Plasma (Wayland) 上的光标大小或主题不变

在使用 Wayland 下的 Plasma 修改光标尺寸或主题时,确保在应用更改后重启。[1] [2].

另见

  • Xcursor(3) — 获取有关 X 中光标的更多信息(支持的 目录, 格式, 兼容性等等)。
  • 要想创作光标文件, 请见 Xcursorgen