microsoft / wslg

Enabling the Windows Subsystem for Linux to include support for Wayland and X server related scenarios
MIT License
10.26k stars 309 forks source link

WSLg doesn't pick up the actual icons of Linux desktop apps #614

Open bbatsov opened 2 years ago

bbatsov commented 2 years ago

Environment

Windows build number: Microsoft Windows [Version 10.0.22000.348]
Your Distribution version:  Ubuntu 20.04
Your WSLg version: 1.0.26

Steps to reproduce

Just run any Linux GUI from the command line or the Windows start menu. All apps have the generic Linux logo icon, which makes them hard to differentiate.

I've installed all apps with apt install.

Expected behavior

I expect each app to display it's all icon (as defined by appname.desktop).

Actual behavior

image

The same generic icon is displayed in the taskbar as well. Interestingly, when I run Emacs as root it displays the right icon.

image

tcfurrer commented 2 years ago

Exact same issue here. I would like to add that the correct icon shows up separately in the taskbar when the app is running, but the pinned icon and start menu icon is incorrect as already described here. image

seven-mile commented 2 years ago

I've been suffering from this issue for months. I guess it relates to the Ubuntu version (mine is also 20.04).

bbatsov commented 2 years ago

I would like to add that the correct icon shows up separately in the taskbar when the app is running, but the pinned icon and start menu icon is incorrect as already described here.

For me the icon was the correct one initially, but after a while all icons from Ubuntu got replaced with the generic one.

hideyukn88 commented 2 years ago

@bbatsov, @tcfurrer, @seven-mile, would you please share /mnt/wslg/weston.log with us?

Basically there is 2 type of icons, a) icons used in Start Menu (or pinned at taskbar), and b) icons at taskbar when applications are running.

Icon a) is specified at .desktop file for that application, for emacs, typically /usr/share/applications/emacs.desktop, which specify as "Icon=emacs", then Icon file will be loaded from /usr/share/icons. And if no icon is specified at .desktop file, then generic Icon will be used.

image

Icon b) is from "_NET_WM_ICON" for X11 application. So if you are not seeing right Icon here, would you check by running xprop ? Please refer below screen capture. And in case application is Wayland native application, same Icon as a) will be used.

image

Thanks!

seven-mile commented 2 years ago

@hideyukn88 Of course. For (a) icons, on my machine, only gThumb is normal but others are generic icon. Indeed the .desktop configurations correspond with this fact. nautilus's .desktop file gThumb's .desktop file

But the (b) icons of all applications including nautilus are not working in the taskbar. I tried xprop wmctrl and xwininfo. But it seemed none of them worked. You may wait for feedback from others.

Attachment: weston.log.zip

hideyukn88 commented 2 years ago

@seven-mile, thanks for info.

First, for icon a), from your weston.log, the most of your application is using SVG format icon, which is typical in many gnome application, so this is not yet supported. Please see https://github.com/microsoft/wslg/issues/70 and we are working on it (https://github.com/microsoft/CBL-MarinerCoreUI/pull/95)

[13:13:52.657]     Icon file:/usr/share/icons/hicolor/scalable/apps/org.gnome.Nautilus.svg
[13:13:52.658]     Icon file:/usr/share/icons/hicolor/scalable/apps/org.gnome.gedit.svg
[13:13:52.659]     Icon file:/usr/share/icons/hicolor/scalable/apps/org.gnome.Evince.svg

For icon b), if those gnome application is running as Wayland native mode, then without SVG support, it won't be able to obtain Icon for taskbar. You can try running with in X11 mode by "export GDK_BACKEND=x11", then launch your application, please let us know if this helps. Thanks!

seven-mile commented 2 years ago

@hideyukn88 Yes, "export GDK_BACKEND=x11" works well. Looking forward to SVG support in this year!

hideyukn88 commented 2 years ago

@bbatsov, @tcfurrer, I would be interested in the missing icons for Emacs case, if you are still experiencing this issue, please let me know. Thanks!

bbatsov commented 2 years ago

Sure, I've attached my weston.log.

weston.log

I notice in it things like:

image

And I had to do a screenshot as copying from WSLg doesn't work for me either. :-)

The Emacs desktop file is basically the default one and the icon is where it should be. I'm not sure what I'm supposed to do with xprop, so I'll take at look at this later.

kharus commented 2 years ago

It looks like weston doesn't look for icons in /usr/local/share/icons/ As a workaround for emacs I edited file /usr/local/share/applications/emacs.desktop and changed Icon to emacs29 and copied icon files from emacs checkout to /usr/share/icons

cd $EMACS_CODE/etc/images/icons/hicolor/
for d in *                                                                                                                                                                                                                            
do
sudo cp $d/apps/emacs.png /usr/share/icons/hicolor/$d/apps/emacs29.png
done

Restarted wslg and emacs now has emacs icon in windows.

seflerZ commented 2 years ago

This is because current WSLg doesn't support SVG icons. Though this function code has been added but the corresponding SVG lib can't be found in Mariner (A Microsfoft linux distro) repository. Refer to this to has more details.

YAmikep commented 1 year ago

I am having the same issue and could not resolve it reading the above. For example, I installed Gitkraken:

wget https://release.gitkraken.com/linux/gitkraken-amd64.deb
sudo apt install ./gitkraken-amd64.deb

Then I launch it:

gitkraken

I see the generic icon.

Here are the logs:

❯ cat /mnt/wslg/weston.log

[13:44:37.885] set_position_from_xwayland: XWM 860, 302; geometry 32, 32; view 828, 270
[13:44:37.901] app_list_monitor_thread: loadIconEvent is signalled. GitKraken
[13:44:37.901] app_list_monitor_thread: entry (nil), image (nil)
[13:44:37.937] Client: ClientGetAppidReq: pid:9707 appId:GitKraken
[13:44:40.489] set_position_from_xwayland: XWM 334, 140; geometry 32, 32; view 302, 108
[13:44:40.548] app_list_monitor_thread: loadIconEvent is signalled. GitKraken
[13:44:40.548] app_list_monitor_thread: entry (nil), image (nil)
[13:44:40.649] Client: ClientGetAppidReq: pid:9707 appId:GitKraken

Any idea how to fix this?

Should I add a /usr/share/applications/GitKraken.desktop icon? What format should the icon be?


ANSWER: Nevermind, I was able to find the solution. There was a gitkraken.desktop file, so I renamed it to match the AppId GitKraken.desktop and it works.

That being said, is there a way to change the generic linux icon displayed on top of the icon based on the distro? When using the same softwares in different distros, it's impossible to know which one is which as they all look the same.

Yzs8B5Jwxp

YAmikep commented 1 year ago

Another use case is when using an AppImage. In that case, there is no entry in /usr/share/applications/ so it's not a mismatch of AppId. Any workaround to this?

Thanks

Andrew-J-Larson commented 1 year ago

Hey guys, at least for me using Ubuntu, running sudo update-icon-caches /usr/share/icons/* seems to fix the icons for me.

andnig commented 10 months ago

EDIT: For reasons I can't comprehend, the taskbar shows the correct window just as of today. 3 windows restarts (not weston, the full OS) were in between but nothing else was changed. So my below comment is not valid anymore. Quick recap what I did and what works now:

EDIT2: Ok there seems to be an icon cache in windows, didn't know that. So, after following the steps above, make sure to refresh the icon cache. Follow the second answer (user Omoikane1122) in this MS answer

------------ original comment -----------------

I have a similar issue, but none of the workarounds helped so far. All the icons are correctly set in the start menu, however not in the task bar. image

Task bar: image

WSL version: 2.0.14.0 WSLg version: 1.0.59

For eg. for kitty, my desktop file is at /usr/share/applications/kitty.desktop, Icon is set to 'kitty' and there is an appropriately sized 'kitty.png' file in folders /usr/share/icons/hicolor/$size/apps/ (with size being 128x128, 16x16, 256x256, 32x32, 512x512, 64x64)

Is there a chance to get the icons also working on the task bar? Where do we need to put the icons so that they are used in the taskbar?

lxg208 commented 10 months ago

This problem has puzzled me for a while and I think I found a solution. The cause is the missing .desktop file. On a new machine I installed Ubuntu 23.10. I compiled emacs from the source and it suffers the same issue. Then I created the missing .desktop file and I have the emacs icon. Back to wsl, I created the same desktop file and it worked as well. Following is my /usr/share/applications/emacs.desktop file, notice the location of emacs and icon file:

[Desktop Entry]
Version=1.0
Name=Emacs (GUI)
GenericName=Text Editor
Comment=GNU Emacs is an extensible, customizable text editor - and more
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
TryExec=/home/myuser/local/emacs/bin/emacs
Exec=/home/myuser/local/emacs/bin/emacs %F
Icon=/home/myuser/local/emacs/share/icons/hicolor/scalable/apps/emacs.svg
Type=Application
Terminal=false
Categories=Utility;Development;TextEditor;
StartupWMClass=Emacs
Keywords=Text;Editor;
terlar commented 10 months ago

Thank you very much @andnig, following the cache refresh tip from that MS answer I finally got the icons to work for the task bar as well.

antonio-petricca commented 2 months ago

I have the same issue, and none of the above solutions worked for me.

JotaRata commented 2 months ago

I have the same issue and so far nothing has worked for me but I noticed that the correct icons are displayed in the taskbar when running the app with sudo.

imagen

Running the same app without using sudo makes the taskbar to show the default icon.

EDIT: Now I realize this happens because GNOME apps are using X11 when launched with root privileges. SO I assume the issue occuurs when in Wayland mode (the default). I also exported every GNOME icon as a *.png image in their respective folders and it doesn't work, even though they appear as loaded in the weston.log file. imagen