*注意*
難航したので、最後はClaude Codeに投げてテキトーにやってしまった。
なのであんまり役に立ちません。
デクストップ環境のCOSMICがまだ開発段階のため、そこらへんのフワフワ設計と衝突したっぽい。
タイトル通り。
`.ani` のカーソルをLinuxで使いたい。
夜夢さんという、動くドット絵のカーソルをたくさん作っている偉人から、なんとモニカさんのカーソルが出ていたので使ってみる。
[booth.pm/items/5551284](https://booth.pm/ja/items/5551284)
## win2xcurインストール
普通にAURから。
```
yay -S win2xcur
# もちろんparuでもOK
# paru -S win2xcur
```
debianやfedoraはpipから
```
pip3 install win2xcur
```
## 変換する
では変換してみる
### 変換元もをインストール
各々使いたいカーソルを持ってくる。
今回はモニカさんの `.ani` ...文字化けしてる〜〜
(のちのちの変換に影響が出る可能性があるので、文字化け部分を削ったりなおしたりしておく。)

### 変換する
基本的なコマンドはこう
```
win2xcur 入力ファイル.ani 出力ファイル名
```
一個ずつやっていたら人生の浪費なので、ディレクトリを指定して、ワイルドカードで実行。
出力ディレクトリの名前はわかりやすいテーマ名にしておけばOK。
```
mkdir -p ~/.local/share/icons/出力ディレクトリ/
win2xcur '入力ディレクトリ/'*.{ani} -o ~/.local/share/icons/出力ディレクトリ/
# 拡張子がcurなどani以外のときは適宜変更
# bashではなくfishの場合は{}を取って *.ani にする。
```
また、引数をつけることで windows っぽく影をつけられる。

```
-s, --shadow 影を付けるかどうか(Windows風の影効果をエミュレート)
-O, --shadow-opacity SHADOW_OPACITY
影の不透明度(0〜255)
-r, --shadow-radius SHADOW_RADIUS
影のぼかし半径(カーソル幅に対する割合)
-S, --shadow-sigma SHADOW_SIGMA
影のぼかしシグマ(カーソル幅に対する割合)
-x, --shadow-x SHADOW_X
影のx方向オフセット(カーソル幅に対する割合)
-y, --shadow-y SHADOW_Y
影のy方向オフセット(カーソル高さに対する割合)
-c, --shadow-color SHADOW_COLOR
影の色
```
エラーなく走って、出力ディレクトリに生成されていればOK。

### 命名
落としてきたマウスカーソルにもよるが、基本的にwindows用の命名になっているので、Linux用の命名にする。
こんな感じ
```
cd ~/.local/share/icons/テーマ名/cursors
for n in left_ptr top_left_arrow
ln -sf arrow $n
end
for n in text xterm ibeam
ln -sf beam $n
end
for n in wait watch
ln -sf busy $n
end
for n in progress left_ptr_watch
ln -sf working $n
end
for n in crosshair
ln -sf cross $n
end
for n in ew-resize sb_h_double_arrow h_double_arrow
ln -sf ew $n
end
for n in ns-resize sb_v_double_arrow v_double_arrow
ln -sf ns $n
end
for n in nwse-resize bd_double_arrow size_fdiag
ln -sf nwse $n
end
for n in nesw-resize fd_double_arrow size_bdiag
ln -sf nesw $n
end
for n in move fleur all-scroll size_all grabbing
ln -sf move $n
end
for n in pointer hand hand1 hand2 pointing_hand
ln -sf link $n
end
for n in help question_arrow whats_this
ln -sf help $n
end
for n in not-allowed forbidden crossed_circle no-drop
ln -sf no $n
end
for n in up_arrow sb_up_arrow center_ptr
ln -sf up $n
end
```
### 設定
実際にカーソルテーマを設定する
```
gsettings set org.gnome.desktop.interface cursor-theme テーマ名
# 確認
# gsettings get org.gnome.desktop.interface cursor-theme
```
## できません!!
できなすぎたので、Claude Code に丸投げ。
```
❯ マウスカーソルを変えたくてさ、設定したんだけど変わらない.../home/shiroka/.icons/monikarsor/と/home/shiroka/.local/share/icons/monikarsor/を置いてみたんだけど反映されない
カーソルが反映されない原因を調べてみます。まず環境とファイル構成を確認しますね。
Listed 1 directory, ran 1 shell command
COSMIC デスクトップ(Wayland)を使ってますね。COSMIC は独自の設定方式なので、それに合わせる必要があります。もう少し確認します。
Listed 1 directory
原因が2つ見つかりました。1つは index.theme の中身が壊れています。COSMIC の設定ファイルも確認します。
Ran 2 shell commands
原因が2つ判明しました。説明します。
問題1: index.theme の中身が壊れている
ファイルを作るための cat > ... <<'THEME' というコマンド文字列が、そのまま中身として保存されてしまっています。本来の [Icon Theme] セクションになっていません。
問題2: COSMIC のカーソルテーマの指定方法が違う
com.system76.CosmicTk/v1/icon_theme に "monikarsor" を入れていますが、これはアプリのアイコンテーマ用で、マウスカーソルとは別物です。COSMIC(cosmic-comp 1.0)にはまだカーソルテーマのGUI設定がなく、XCURSOR_THEME 環境変数で指定する必要があります。
セッションの起動方式を確認します。
Ran 1 shell command
テーマ自体は正常です(default→arrow のシンボリックリンクあり)。修正していきます。
まず壊れた index.theme を両方とも正しい内容に直し、XCURSOR_THEME を environment.d で設定します。
Ran 1 shell command
完了しました。2つの問題を修正しました。
直した内容
① 壊れていた index.theme を修正
両方のファイルの中身が、ファイルを作るためのコマンド文字列(cat > ... <<'THEME')そのものになっていました。正しい [Icon Theme] 形式に書き直しました。
② カーソルテーマを XCURSOR_THEME で指定
~/.config/environment.d/cursor.conf を新規作成し、XCURSOR_THEME=monikarsor を設定しました。COSMIC(cosmic-comp 1.0)にはまだカーソルテーマのGUI設定がなく、この環境変数で指定するのが正しい方法です。
反映させる手順
環境変数はセッション起動時に読み込まれるので、一度ログアウト → 再ログインしてください(確実にするなら再起動)。これでカーソルが変わります。サイズは 24 にしてあるので、好みで cursor.conf の XCURSOR_SIZE を変えてください。
ひとつ注意点
com.system76.CosmicTk/v1/icon_theme に "monikarsor" が入っていますが、これはアプリのアイコンテーマ(ファイルやアプリのアイコン)用の設定で、マウスカーソルとは無関係です。カーソルのつもりで設定したものだと思います。このままだとアプリのアイコンが「monikarsor」を探して見つからず、デフォルトにフォールバックします。元のアイコンテーマ(例:Pop、Adwaita など)に戻したい場合は、COSMIC設定の「外観 → アイコンとテーマ」から選び直すか、教えてくれれば戻します。
---再ログイン後もまだ変わらないようなら、cosmic-session が environment.d を読まない構成の可能性があるので、別の方法(/etc/environment への記述など)を案内します。まず再ログインで試してみてください。
✻ Crunched for 1m 50s
❯ 再ログインしたけどだめでした
再ログイン後の状態を確認します。
Ran 1 shell command
重要な手がかりが分かりました。systemd --user には XCURSOR_THEME=monikarsor が入っているのに、実際の cosmic-comp プロセスにはその環境変数が渡っていません。つまり cosmic-session が systemd user の環境を引き継がずに起動しています。これが反映されない理由です。
起動チェーンを詳しく調べます。
Ran 1 shell command
起動の仕組みが分かりました。これが原因です。
あなたの環境は greetd + agreety(テキストgreeter)→ fishログインシェル → cosmic-session という流れで起動しています。cosmic-session は fishログインシェルから直接 起動されているため、systemd user の環境(environment.d で設定した変数)を引き継ぎません。だから反映されなかったのです。
/etc/environment に書けば確実ですが root が必要です。それより、cosmic-session を起動している fish の設定に環境変数を入れるのが確実です。fish の設定を確認します。
Listed 1 directory
config.fish には cosmic-session の起動が無いですね。どうやって起動しているか(手動入力か自動か)を確認します。
Searched for 1 pattern
/usr/bin/start-cosmic というランチャースクリプト経由で起動していますね。中身を確認します。
Read 1 file
完全に原因が分かりました。start-cosmic の核心はこのコメント部分です:
# use the user's preferred shell to acquire environment variables
exec bash -c "exec -l '${SHELL}' -c '${0} --in-login-shell'"
つまり start-cosmic は わざわざあなたのログインシェル(fish)を経由して環境変数を取り込む設計になっています。fish のログインシェルは config.fish を読み込むので、config.fish で環境変数を export すれば cosmic-comp に渡ります。これが正しい設定場所でした(environment.d ではなく)。
config.fish に追記します。
Read 1 file
● Update(.config/fish/config.fish)
Added 4 lines
# # smth smth
#end
fish_add_path ~/.npm-global/bin
# マウスカーソルテーマ(COSMIC は start-cosmic がログインシェル経由で env を取り込む)
set -gx XCURSOR_THEME monikarsor
set -gx XCURSOR_SIZE 24
追記しました。設計どおりに環境変数が渡るか、start-cosmic と同じ「ログインシェル経由」を再現してテストします。
Ran 1 shell command
検証OKです。start-cosmic と同じ「ログインシェル経由」で XCURSOR_THEME=monikarsor が正しく見えるようになりました。テーマも標準の検索パス(~/.icons と ~/.local/share/icons)にあるので、cosmic-comp が見つけられます。
今度こそ反映されます
もう一度 ログアウト → 再ログインしてください。今回は cosmic-comp に環境変数が渡るので、カーソルが monikarsor になります。
まとめ(なぜ前回ダメだったか)
- 前回設定した ~/.config/environment.d/cursor.conf は systemd user 用。でもあなたの COSMIC は greetd → fishログインシェル → start-cosmic → cosmic-session という流れで、systemd user 経由ではなかったため引き継がれなかった。
- start-cosmic は「ログインシェルを実行して環境変数を取り込む」設計なので、fish の config.fish に書くのが正解でした。← 今回そこに追記済み。
```
できた。

以上!(なにもわかってない)