cancel
Showing results for 
Search instead for 
Did you mean: 

Wayland support

okidian
Regular

Wayland support

Hi,

Can you release a linux package with ozone support built so that we can use the client under Wayland? There have been posts requesting this in the past because it is highly anticipated.

 

It shouldn't be that complicated it seems:

https://www.collabora.com/news-and-blog/blog/2019/05/08/cef-on-wayland-upstreamed/

https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/ozone_overview.md

 

Best,

121 REPLIES 121
okidian
Regular

Wayland support

Hi,

Can you release a linux package with ozone support built so that we can use the client under Wayland? There have been posts requesting this in the past because it is highly anticipated.

 

It shouldn't be that complicated it seems:

https://www.collabora.com/news-and-blog/blog/2019/05/08/cef-on-wayland-upstreamed/

https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/ozone_overview.md

 

Best,

joshbode
Newbie

Re: Wayland support

Oh, yes please!

 

This almost works:

spotify --enable-features=UseOzonePlatform --ozone-platform=wayland

 

However, the content ends up "detached" from the main window, though the detached content is using Wayland:

joshbode_0-1625735433997.png

Re: Wayland support

okidian_0-1625799910743.png

I'm running on pure wayland and it simply segfaults. dmesg shows

"spotify[53433]: segfault at 0 ip 00007f0ccf1327d4 sp 00007ffdfabb6710 error 4 in libxcb.so.1.1.0[7f0ccf12f000+13000]". afaics it's making a call to libxcb which is not present in the memory, naturally.

 

people have mixed results tho: https://www.reddit.com/r/swaywm/comments/n7kew4/spotify_seems_to_run_natively_in_wayland/ I guess they have xwayland which spotify resorts as a fallback.

 

I'm hopeful a build with latest cef would solve this. but well, it's only a hope hah!

27supergoats
Newbie

Re: Wayland support

I'm running swaywm on Arch and those chromium flags result in an empty black window. Actual chromium does run with them though, even if not perfectly yet.

jane-0
Newbie

Re: Wayland support

Got it working by writing some stub implementations of some X11 functions spotify tries to call on launch but doesn't actually need. use `cc xstub.c -o xstub.so -shared` and `LD_PRELOAD=xstub.so spotify --enable-features=UseOzonePlatform --ozone-platform=wayland` to launch.

#include <stdio.h>

#define X_FN(f) int f() { puts("called"); return 0; }
X_FN(XInternAtoms)
X_FN(XChangeProperty)
X_FN(XGetGeometry)
X_FN(XInternAtom)
X_FN(XMoveResizeWindow)
X_FN(XSendEvent)
X_FN(XSetClassHint)
X_FN(XSetErrorHandler)
X_FN(XSetIOErrorHandler)
X_FN(XStoreName)
X_FN(XTranslateCoordinates)

 

T64
Newbie

Re: Wayland support

The X11 function stub workaround by @jane-0 works in some conditions to prevent Spotify from segfaulting on startup on Wayland, but for me it doesn't solve the problem of the window content being "detached" from the window itself (see first comment).

This makes Spotify almost unusable on Wayland, the window can't be moved or resized.
I'm on KDE neon dev with KWin Wayland.

RicArch97
Newbie

Re: Wayland support

One issue is that the Spotify client still uses an old version of Electron. The ozone Wayland back-end works really well in newer versions of Chromium, which requires only 1 flag since Chromium 97 to enable Wayland support.  An upgrade to Electron 16 or 17 would be necessary for a mature enough Wayland back-end.

Re: Wayland support

Spotify doesn't use Electron, but Chromium Embedded Framework
Whj_spot
Newbie

Re: Wayland support

Here's a temporary solution, since Spotify is running on CEF anyway:

Open Chrome and set 'Preferred Ozone platform' to Wayland in chrome://flags

Restart Chrome and go to open.spotify.com

'Install Spotify' from Chrome menu.

You'll lose settings, but at least should avoid X11

StarterX4
Casual Listener

Re: Wayland support

Any Spotify dev work on it?

@jane-O solution doesn't seem to work for me.
Also using Spotify Web in browser isn't a solution.

Highlighted
snizovtsev
Newbie

Re: Wayland support

Hello,

 

As a temporary solution to annoying "detached window" problem I've traced library calls to stub the places where it were created. Here is the result:

 

Spoiler
// compile as: gcc xcbstub.c -o xcbstub.so -fPIC -shared

#include <stddef.h>
#include <stdlib.h>
#include <stdbool.h>
#include <stdint.h>

void gtk_init(int *argc, char ***argv) { }
void* gdk_pixbuf_loader_new() { return NULL; }

typedef struct xcb_connection {
    int has_error;
} xcb_connection_t;

xcb_connection_t*
xcb_connect(const char *displayname, int *screenp)
{
    xcb_connection_t *conn = calloc(1, sizeof(xcb_connection_t));
    conn->has_error = 1;
    return conn;
}

int xcb_connection_has_error(xcb_connection_t *c)
{
    return 1;
}

int xcb_flush(xcb_connection_t *c)
{
    return 0;
}

uint32_t xcb_generate_id(xcb_connection_t *c)
{
    return 42;
}

void xcb_disconnect(xcb_connection_t *c)
{
    free(c);
}

void* cef_get_xdisplay() {
    return NULL;
}

void *XOpenDisplay(const char *display_name)
{
    return NULL;
}

typedef unsigned long Atom;
typedef unsigned long Window; /*?*/

int XInternAtoms(void *display, char **names, int count, bool only_if_exists, Atom *atoms_return)
{
    return -1;
}

int XChangeProperty(void *display, Window w, Atom property, Atom type, int format, int mode, const unsigned  char
        *data, int nelements)
{
    return  0;
}

 

 

 

After preloading this library X11 window disappears. However Spotify remains running after closing Wayland window. So you must kill the process manually.

 

mfeltmann
Newbie

Re: Wayland support

I'd totally love to see a functional version on Debian with Wayland on Sway, too.

In Firefox the webplayer sometimes simply stops outputting music, in Chromium I can't even get behind that "browser not supported" view.

 

I'd love a CLI or at least TUI most, but that's just dreaming.

pgomes
Roadie

Re: Wayland support

Engineer here. Wayland support has been implemented and is being tested. It will be available in a near release, though I can't promise dates

Re: Wayland support

First version of Wayland support is available for Snap/Edge (version 1.1.99)

Joan31
Casual Listener

Re: Wayland support

Oh nice.
Can you put this version on the repository please ?

http://repository.spotify.com/pool/non-free/s/spotify-client/

 

The last version in the official repository is 1.1.84.716

Thank you so much

Swivelgames
Music Fan

Re: Wayland support

I was actually going to ask the same thing a couple weeks ago. Publishing it to the Repository would be great! Especially for people like Arch users.

Presently, Spotify is the 8th most popular Arch Linux package in the AUR.

fabiscafe
Gig Goer

Re: Wayland support

If it's still a testing version it's absolutely understandable that is currently sits only in a controlled environment (snap). If only spotify would official support the flatpak as well (: (btw we can have verification-badged now on flathub)

 

flathub-flatpak-manifest 

Re: Wayland support

There's an ongoing effort by someone in Spotify to create flatpaks.
But just like everything else that involves the Linux client, it
depends on the extra time that engineers find outside of their main
tasks. So unfortunately there's no prediction on when this will be
available.
Joan31
Casual Listener

Re: Wayland support

Thanks pgomes for your work

I tried this version 1.1.99.
I've downloaded the snap, mounted the snap, and executed this new version.

After testing it with no issues, I've installed manualy on my system and it is working like a charm with wayland !!!!!!

Good work and thanks to support Linux !!!!

iiiian
Visitor

Re: Wayland support

Thanks !drop down menu and chinese/japanese input work like a charm now!. I also test with

--enable-features=UseOzonePlatform --ozone-platform=wayland

this eliminate blurry app on fractional scaling, but chinese/japanese input will not work, which is understandable since chromium doesn't implement it. Anyway, thanks for the update.