Windows用マウスカーソル(.ani)をXCursorに変換するメモ
TL;DR
で変換して正しくリネーム + index.themeを作成して~/.local/share/iconsあたりに置いておけばOK
win2xcurのインストール
pip install win2xcurでもインストールできるようです。
いま現在どうかは確認していませんが、参考にした記事には--scale追加前で更新が止まっているとの記載があったので私はソースからインストールしました(最終的に--scaleは使いませんでしたが...)
この場合はpip install git+https://github.com/quantum5/win2xcurでインストールできます。
変換
win2xcur ./*.ani -o ./[出力先]を実行して数秒で変換されたカーソルが./[出力先]に生成されます。
Windows用カーソルは--scaleに2.0~3.0を渡して拡大しないと小さいという情報もありますが、少なくともわたしの環境では--scale 2.0だと約100MBのカーソルを生成した上OOMでハングアップしてしまったので、最初はscaleなしで試すといいかもしれません?

リネーム + エイリアス貼り付け
XCursorはファイル名でカーソルを識別するため、すべて正しい名前にリネームしていく必要があります。
今回は既存の(Breezeデフォルトの)カーソルを参考に作業しました。(できるならドキュメントなどを参考に指定したほうがいいとは思います。)
デフォルトのアイコンセットは/usr/share/icons/*に配置されており、カーソルを含む場合は各ディレクトリ直下のcursorsディレクトリに格納されています。
リネーム
一旦ファイル実体にあわせてリネームしました。

(ちなみにこれはいくつか間違えてalias側の名前をつけています)
エイリアス貼り付け
リネーム後、欠落しているカーソルを存在する物のシンボリックリンクで埋めていきます。
ls -l | grep -s [ファイル名]で貼り付け先を探すと楽かもしれません。
私は追加で./alias.sh [リンク元] [リンク先1] [リンク先2] ...ように一括でリンクを貼る簡単なシェルスクリプトを作成して作業しました。
環境変数CURSOR_WORK_DIRに作業しているディレクトリのパスを指定して使用すればテーマファイル内にスクリプトを配置することなく作業できます。
#!/bin/bash
WORK_DIR="${CURSOR_WORK_DIR:-}"
SOURCE_FILE="$WORK_DIR$1"
shift
for alias in "$@"; do
ln -s "$SOURCE_FILE" "$WORK_DIR$alias"
done
ひたすら必要そうなものにシンボリックリンクを張っていきます。
あまり使われていないものも多くありそうなので、おそらく無理にすべてに貼る必要はありません。

その他メタデータ作成
index.themeにアイコンセットのメタデータを作成していきます。
これは見てのとおりで、好きな名前とコメントをつけておけばOKです。
[Icon Theme]
Name=MyCursor
Comment=My custom cursor theme
これに加え、以下の行を追加することで不足しているものの継承元を明示できるようです。
Inherits=Breeze
ファイルの配置
~/.local/share/icons配下に新しくディレクトリを作成して、index.theme, cursorsディレクトリを配置すればOKです。

設定の適用
ここまで正しく作成できていれば、システムのカーソル設定画面に追加したものが表示されているはずです。

ところでこのカーソル(Rumia cursorsとMiku Cursor)は普通にKDEの公式に落ちていましたけど、大丈夫なんでしょうか...?(たぶん大丈夫ではない)
ミクさんカーソルはご本人様でした、かわいいのでおすすめです(入力カーソルがネギなのかわいい)
その他
ディレクトリ名が既存のものと被ると上書きになる
タイトルの通りですが、他の既存のカーソルのディレクトリ名と被っているとオーバーライドするような動作になるようです。

--scale 2.0を指定するとめちゃくちゃにリソースを消費する
上で書いたとおりですが、少なくとも今回移植したカーソルを私の環境で拡大した場合には毎回起こりました。
(Ryzen9 3900X / DDR4 64GBでハングアップ直前の状態で56GB程度)

エイリアスの貼り方
参考程度ですが、わたしの場合のエイリアスのリストを置いておきます(もう配布されていない, かなり古いカーソルで無理やり埋めているので参考にはならないかもしれません)
| 実ファイル | Alias |
|---|---|
default |
arrow, left_ptr, size-bdiag, size-fdiag, size-hor, size-ver, top_left_arrow
|
ns-resize |
bottom_side, row-resize, size_ver, top_side
|
move |
cell, closedhand, dnd-move, dnd-none, fleur, grab, grabbing, size_all
|
not-allowed |
circle, crossed_circle, dnd-no-drop, forbidden, no-drop
|
ew-resize |
col-resize, e-resize, h_double_arrow, left_arrow, left_side, right_arrow, right_side, sb_h_double_arrow, size_hor, split_h, w-resize
|
crosshair |
cross, tcross
|
progress |
half-busy, left_ptr_watch
|
pointer |
hand1, hand2
|
question_arrow |
help, left_ptr_help, whats_this
|
nesw-resize |
ne-resize, size_bdiag, sw-resize, top_right_corner
|
nwse-resize |
se-resize, size_fdiag, top_left_corner
|
wait |
watch |
Discussion