Zoom.us not working on Fedora 30 and Ubuntu 19.04 w Wayland

1

When screensharing I get this message:

Can not start share, we only support wayland on 
GNOME with Ubuntu(17,18), Fedora (25 to 29), 
Debian9, openSUSE Leap 15, Arch Linux. If your 
OS is not on the list, please use x11 instead.

Any workarounds that don't involved disabling all Wayland features?

zoom pic

Ray Foss

Posted 2019-08-08T19:01:25.280

Reputation: 884

Answers

0

update

https://www.dropbox.com/sh/3klzwv3n3xn09s4/AAD28SF62Z9cXKCSCxz6SOb5a?dl=0

This is a dev version that works fine. See other solutions if you don't trust it. Should be fixed soon hopefully.


You can edit your os-release file to fool zoom into thinking your os is old. I would undo the change as soon as the screencast starts, as it could lead to OS corruption.

So for Fedora 30 change

$ cat /etc/os-release
NAME=Fedora
VERSION="30 (Workstation Edition)"
ID=fedora
VERSION_ID=30

to

$ cat /etc/os-release
NAME=Fedora
VERSION="30 (Workstation Edition)"
ID=fedora
VERSION_ID=29

Similar changes should work on Ubuntu 19,04+

Here are bash aliases to expedite the process. https://gitlab.com/snippets/1883723

Ray Foss

Posted 2019-08-08T19:01:25.280

Reputation: 884

1

There are some good tricks in this reddit thread as well. Specifically the library override for the call to the specific file:

I think the most profitable use of your time be to swap some underlying method Zoom is using to get OS data.

You start with what you want your 'hook' to do and what you want to hook. This is a simple hook that just swaps out whatever really is in /etc/os-release with a short string "ZV" by replacing the implementation of open. You need to use the program strace to really figure out how Zoom is doing it.

#define _GNU_SOURCE
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <dlfcn.h>

int open(const char *path, int oflag) {
    if (strcmp(path, "/etc/os-release")) {
        int (*nopen)(const char *path, int oflag);
        nopen = dlsym(RTLD_NEXT, "open");
        return nopen(path, oflag);
    } else {
        int *fildes = calloc(2, sizeof(int));
        pipe(fildes);
        const char *fake = "ZV";
        write(fildes[1], fake, strlen(fake));
        return fildes[0];
    }
}

To use this, you must write out the file you've created from the code above to a file (I've named it fakeread.c) and compile it:

$ gcc -shared -fPIC -ldl -o fakeread.so fakeread.c

Then you just need to call your command with an environment variable that instructs the dynamic linker to preferentially use the symbols exported by your new shared object.

$ LD_PRELOAD=`pwd`/fakeread.so WHATEVER_ZOOM_COMMAND_IS

You can hook other library functions like exec or even system calls like uname with the same principle.

https://www.reddit.com/r/archlinux/comments/8winpp/tricking_application_into_thinking_im_on_fedora/?st=jzmuc1b0&sh=20c82d5d

Adam Chasen

Posted 2019-08-08T19:01:25.280

Reputation: 11

Good job on the work... I've attached an official dev build that works to my answer... – Ray Foss – 2019-08-22T19:34:09.430