steam-for-linux icon indicating copy to clipboard operation
steam-for-linux copied to clipboard

Steam ignores and/or cannot access cursor icon theme in /usr/local

Open z1atk0 opened this issue 1 year ago • 0 comments

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.

Screenshot from 2024-04-04 05-43-06 Screenshot from 2024-04-04 05-43-28 Screenshot from 2024-04-04 05-44-13

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 Adwaita directory directly to /usr/local/share/icons (instead of having it symlinked there by stow)
  • creating a symlink from one of the actually searched directories (ie. cd ~/.icons; ln -s /usr/local/share/icons/Adwaita/ . or cd /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/* . or mkdir /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 Adwaita folder to either ~/.icons/Adwaita or /usr/share/icons/Adwaita, ie. cp -av /usr/local/share/icons/Adwaita ~/.icons/. or cp -av /usr/local/share/icons/Adwaita /usr/share/icons/.
  • doing a bind mount of /usr/local/share/icons/Adwaita at /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 0 in /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:

  1. Have your system icon theme physically located in /usr/local (or anywhere else, other than ~/.icons and /usr/share/icons, for that matter).
  2. Be a good citizen and set your $XDG_DATA_DIRS accordingly.
  3. Start steam.
  4. Enjoy steam proudly 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

z1atk0 avatar Apr 21 '24 11:04 z1atk0