Steam ignores and/or cannot access cursor icon theme in /usr/local
Your system information
- Steam client version (build number or date): 1709846872, Wed, Mar 6 21:28 UTC -08:00
- Distribution (e.g. Ubuntu): Slackware64-15.0 (What else?™ :nerd_face: :wink:), GNOME 46
- Opted into Steam client beta?: No
- Have you checked for system updates?: Yes
- Steam Logs: steam-logs.tar.gz
- GPU: Nvidia (NVIDIA GeForce GTX 1660 Ti, driver version 550.76)
Please describe your issue in as much detail as possible:
At some point during the last weeks, my Steam client suddenly started using the old, ugly X11 default icons instead of the system-wide configured default ones from Adwaita.
Slackware does not ship GNOME, so on my system it's all self-compiled and installed into /usr/local via GNU stow. In particular, the Adwaita icon set is located in /usr/local/share/icons/Adwaita, and the cursors are located in the cursors subfolder of that, ie. /usr/local/share/icons/Adwaita/cursors. My $XDG_DATA_DIRS is set accordingly:
[zlatko@disclosure:~]$ echo $XDG_DATA_DIRS
/home/zlatko/.local/share/flatpak/exports/share:/usr/local/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
After a lot of head-scratching, I decided to use strace to see what's going on, and this showed that some Steam (sub)processes do look into /usr/local/share/icons/Adwaita/cursors and are able to access it, some also do look there, but turn up empty handed for some reason (-1 ENOENT), and some don't even bother to look there, and only look into /usr/share/icons/Adwaita, /run/host/user-share/icons/Adwaita and /run/host/share/icons/Adwaita instead. I have no idea where /run/host comes from, this directory does not exist on my system.
# ALL (sub)processes looking for "Adwaita"
[zlatko@disclosure:~]$ grep -l Adwaita steam-strace.*
steam-strace.10227
steam-strace.10471
steam-strace.10596
steam-strace.10718
steam-strace.10805
steam-strace.5223
steam-strace.6017
steam-strace.6177
steam-strace.6278
steam-strace.6401
steam-strace.6481
steam-strace.7118
steam-strace.7163
steam-strace.7164
steam-strace.7270
steam-strace.7281
steam-strace.7366
steam-strace.7599
steam-strace.7962
steam-strace.8060
steam-strace.8141
steam-strace.8258
steam-strace.8342
steam-strace.8425
steam-strace.8558
steam-strace.8719
steam-strace.9679
# (sub)processes actually looking in the CORRECT place
[zlatko@disclosure:~]$ grep -l /usr/local/share/icons/Adwaita steam-strace.*
steam-strace.5223
steam-strace.7118
# (sub)processes looking SOMEWHERE ELSE, ie. ignoring $XDG_DATA_DIRS
[zlatko@disclosure:~]$ grep -l Adwaita steam-strace.* | xargs grep -L /usr/local/share/icons/Adwaita
steam-strace.10227
steam-strace.10471
steam-strace.10596
steam-strace.10718
steam-strace.10805
steam-strace.6017
steam-strace.6177
steam-strace.6278
steam-strace.6401
steam-strace.6481
steam-strace.7163
steam-strace.7164
steam-strace.7270
steam-strace.7281
steam-strace.7366
steam-strace.7599
steam-strace.7962
steam-strace.8060
steam-strace.8141
steam-strace.8258
steam-strace.8342
steam-strace.8425
steam-strace.8558
steam-strace.8719
steam-strace.9679
Of the two processes that do actually follow $XDG_DATA_DIRS, only one of them manages to actually read the files, the other one, for some reason I cannot quite understand (chroot? sandbox? bwrap?), gets -1 ENOENT (No such file or directory) for the very same files that the other process can read just fine.
[zlatko@disclosure:~]$ grep /usr/local/share/icons/Adwaita steam-strace.5223
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/00000000000000000000000000000000", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = 40
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/00000000000000000000000000000000", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = 40
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_ptr", O_RDONLY) = 43
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_ptr", O_RDONLY) = 43
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/top_left_corner", O_RDONLY) = 43
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/top_side", O_RDONLY) = 43
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/top_right_corner", O_RDONLY) = 43
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/right_side", O_RDONLY) = 43
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/bottom_right_corner", O_RDONLY) = 43
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/bottom_side", O_RDONLY) = 43
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/bottom_left_corner", O_RDONLY) = 43
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_side", O_RDONLY) = 43
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_ptr", O_RDONLY) = 44
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_ptr", O_RDONLY) = 44
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/top_left_corner", O_RDONLY) = 44
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/top_side", O_RDONLY) = 44
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/top_right_corner", O_RDONLY) = 44
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/right_side", O_RDONLY) = 44
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/bottom_right_corner", O_RDONLY) = 44
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/bottom_side", O_RDONLY) = 44
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/bottom_left_corner", O_RDONLY) = 44
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_side", O_RDONLY) = 44
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_ptr", O_RDONLY) = 120
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_ptr", O_RDONLY) = 120
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/top_left_corner", O_RDONLY) = 120
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/top_side", O_RDONLY) = 120
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/top_right_corner", O_RDONLY) = 120
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/right_side", O_RDONLY) = 120
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/bottom_right_corner", O_RDONLY) = 120
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/bottom_side", O_RDONLY) = 120
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/bottom_left_corner", O_RDONLY) = 120
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_side", O_RDONLY) = 120
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_ptr", O_RDONLY) = 122
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_ptr", O_RDONLY) = 122
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/top_left_corner", O_RDONLY) = 122
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/top_side", O_RDONLY) = 122
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/top_right_corner", O_RDONLY) = 122
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/right_side", O_RDONLY) = 122
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/bottom_right_corner", O_RDONLY) = 122
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/bottom_side", O_RDONLY) = 122
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/bottom_left_corner", O_RDONLY) = 122
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_side", O_RDONLY) = 122
[zlatko@disclosure:~]$ grep /usr/local/share/icons/Adwaita steam-strace.7118
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_ptr", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_ptr", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_ptr", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_ptr", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/top_left_corner", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/top_left_corner", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/top_side", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/top_side", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/top_right_corner", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/top_right_corner", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/right_side", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/right_side", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/bottom_right_corner", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/bottom_right_corner", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/bottom_side", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/bottom_side", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/bottom_left_corner", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/bottom_left_corner", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_side", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_side", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_side", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/cursors/left_side", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/local/share/icons/Adwaita/index.theme", O_RDONLY) = -1 ENOENT (No such file or directory)
All other (sub)processes are only looking in places which are bound to fail.
[zlatko@disclosure:~]$ grep -l Adwaita steam-strace.* | xargs grep -L /usr/local/share/icons/Adwaita | xargs grep -ho '/.*Adwaita' | sort | uniq
/proc/3772/fd/20", "/usr/local/stow/adwaita-icon-theme-45.0-@GNOME3/share/icons/Adwaita
/run/host/share/icons/Adwaita
/run/host/user-share/icons/Adwaita
/usr/share/icons/Adwaita
Here's a tarball containing the full strace logs, just in case that helps to figure out what's going on:
steam-strace.tar.gz NOTE: this is actually a .tar.xz, but GitHub won't allow me to upload that. However, when compressing with gzip, the tarball is 28MB, and GitHub only allows 25MB for uploads. :roll_eyes: So I compressed it with xz (version 5.2.5, so no worries about backdoors :wink:) and renamed it to .gz.
What does not fix the problem:
- installing the
Adwaitadirectory directly to/usr/local/share/icons(instead of having it symlinked there bystow) - creating a symlink from one of the actually searched directories (ie.
cd ~/.icons; ln -s /usr/local/share/icons/Adwaita/ .orcd /usr/share/icons; ln -s /usr/local/share/icons/Adwaita/ .) - creating symlinks of the cursor contents from one of the actually searched directories (ie.
mkdir ~/.icons/Adwaita/cursors; cd ~/.icons/Adwaita/cursors; ln -s /usr/local/share/icons/Adwaita/cursors/* .ormkdir /usr/share/icons/Adwaita/cursors; cd /usr/share/icons/Adwaita/cursors; ln -s /usr/local/share/icons/Adwaita/cursors*/ .)
What does actually fix the problem:
- physically copying the complete
Adwaitafolder to either~/.icons/Adwaitaor/usr/share/icons/Adwaita, ie.cp -av /usr/local/share/icons/Adwaita ~/.icons/.orcp -av /usr/local/share/icons/Adwaita /usr/share/icons/. - doing a bind mount of
/usr/local/share/icons/Adwaitaat/home/zlatko/.local/share/icons/Adwaita, ie. having a line like/usr/local/share/icons/Adwaita /home/zlatko/.local/share/icons/Adwaita none bind,ro 1 0in/etc/fstab
Sooo ... what's up with that? Why can't I have my system icon & cursor theme in /usr/local anymore, all of a sudden? :thinking: :man_shrugging:
Steps for reproducing this issue:
- Have your system icon theme physically located in
/usr/local(or anywhere else, other than~/.iconsand/usr/share/icons, for that matter). - Be a good citizen and set your
$XDG_DATA_DIRSaccordingly. - Start
steam. - Enjoy
steamproudly showing X11's cursor icons from the late 1980s, instead of your configured modern icon theme. :scream_cat:
If there's anything else you need to know about my system or setup, just let me know. Thanks for listening! :+1: :slightly_smiling_face:
EDIT 2024-06-28: added second workaround