Skip to content

Instantly share code, notes, and snippets.

@nhira
Last active June 19, 2024 01:41
Show Gist options
  • Save nhira/203cd72388e1332cccaf2d9d86742101 to your computer and use it in GitHub Desktop.
Save nhira/203cd72388e1332cccaf2d9d86742101 to your computer and use it in GitHub Desktop.
How to install Amazon Workspaces Linux Client for Fedora

Amazon WorkSpaces Linux client - RPM installation

Overview

The good news is that there is an Amazon WorkSpaces Linux client. If you happen to use Ubuntu, you can use the official instructions from the documentation. But what if you're on an rpm-friendly distribution like Fedora or CentOS?

alien to the rescue.

How to

You can use these steps to build a PCoIP client (not the 2023 WSP client) RPM from the original .deb package.

(Tested using a Lubuntu 23.10 image to build the RPM and Fedora 39 to install it.)

Get the .deb package

Download the file from the Workspaces Linux client page.

wget "https://d3nt0h4h6pmmc4.cloudfront.net/workspacesclient_focal_amd64.deb"

Create rpm

If you don't have alien, get it.

sudo apt install alien

To avoid some errors, we need to repackage manually.

sudo alien -rgv workspacesclient_focal_amd64.deb

Fedora now ships liblttng-ust0-2.13 and the package was built with 2.12, so we'll omit coreclrtraceprovider.so. See this issue for an unrelated project for a better explanation of the problem and the solution.

sudo sed -i '/"\/opt\/workspacesclient\/libcoreclrtraceptprovider.so"$/d' workspacesclient-4.7.0.4312/workspacesclient-4.7.0.4312-2.spec

Build the rpm package.

cd workspacesclient-4.7.0.4312 && \
    sudo rpmbuild --buildroot `pwd` -bb workspacesclient-4.7.0.4312-2.spec && \
    cd -

Did it work?

sudo rpm --query --info --package ./workspacesclient-4.7.0.4312-2.x86_64.rpm 

You should see output like this...

Name        : workspacesclient
Version     : 4.7.0.4312
Release     : 2
Architecture: x86_64
Install Date: (not installed)
Group       : Converted/misc
Size        : 162134366
License     : see /usr/share/doc/workspacesclient/copyright
Signature   : (none)
Source RPM  : workspacesclient-4.7.0.4312-2.src.rpm
Build Date  : Sat Nov 18 05:21:48 2023
Build Host  : lubuntu
Summary     : Amazon WorkSpaces Client for Ubuntu 20.04
Description :


(Converted from a deb package by alien version 8.95.6.)

Install

Copy over this rpm to your RPM-based host. Install it and try it out.

sudo dnf localinstall ./workspacesclient-4.7.0.4312-2.x86_64.rpm
/opt/workspacesclient/workspacesclient

Challenges

If you run into dependency errors for some packages that aren't in Fedora, you can try installing them yourself. These are not authoritative recommendations; they're just what others have found. Be careful about adding foreign packages to your installation.

# last confirmed on 24-Jun-2023 (includes libhiredis.so.0.13 and libhiredis.so.0.14)
sudo dnf install https://rpmfind.net/linux/openmandriva/4.3/repository/x86_64/main/release/lib64hiredis0.13-0.14.1-1-omv4050.x86_64.rpm

The spec also introduces an incorrect dependency error.

Error: 
 Problem: conflicting requests
  - nothing provides libbz2.so.1.0()(64bit) needed by workspacesclient-4.7.0.4312-2.x86_64 from @commandline
  - nothing provides libcurl.so.4(CURL_OPENSSL_4)(64bit) needed by workspacesclient-4.7.0.4312-2.x86_64 from @commandline
(try to add '--skip-broken' to skip uninstallable packages)

If these are the only dependencies you need, they're in the package, so we can use rpm to skip past them.

sudo rpm -ivh --nodeps ./workspacesclient-4.7.0.4312-2.x86_64.rpm

If the login doesn't render, you might be missing some packages.

sudo dnf install javascriptcoregtk4.0-devel webkit2gtk4.0-devel

If you run into a globalization related error, this invocation should help.

DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1 /opt/workspacesclient/workspacesclient 
@BOPOHA
Copy link

BOPOHA commented Dec 30, 2023

@nhira could you please show me your rpm's provides and dependencies?
just run rpm -qP ./workspacesclient-4.7.0.4312-2.x86_64.rpm and rpm -qR ./workspacesclient-4.7.0.4312-2.x86_64.rpm

@BOPOHA
Copy link

BOPOHA commented Dec 30, 2023

@nhira
i just want to say that alien is not a rescue, it is evil in case of AWS packages. You can get a crash on your system during next upgrade.

this is provides of healthy rpm:

rpm -qP ~/rpmbuild/RPMS/x86_64/workspacesclient-4.7.0.4312-5.x86_64.rpm
application()
application(workspacesclient.desktop)
mimehandler(x-scheme-handler/workspaces)
workspacesclient = 4.7.0.4312-5
workspacesclient(x86-64) = 4.7.0.4312-5

and its requirements:

bzip2-libs
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.16)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libdl.so.2()(64bit)
libdl.so.2(GLIBC_2.2.5)(64bit)
libgcc_s.so.1()(64bit)
libgcc_s.so.1(GCC_3.0)(64bit)
libm.so.6()(64bit)
libpthread.so.0()(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
libstdc++.so.6()(64bit)
libstdc++.so.6(CXXABI_1.3)(64bit)
libstdc++.so.6(GLIBCXX_3.4)(64bit)
libstdc++.so.6(GLIBCXX_3.4.11)(64bit)
libstdc++.so.6(GLIBCXX_3.4.9)(64bit)
openssl1.1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsZstd) <= 5.4.18-1
rtld(GNU_HASH)
webkit2gtk4.0

@nhira
Copy link
Author

nhira commented Dec 30, 2023

@BOPOHA -- would appreciate your feedback on this. I use this app daily so if we can make it more stable, that would be great. Thanks for taking a look!
(On my Fedora 39, it does not handle suspend/resume in full-screen mode consistently, but generally works.)

requires:

$ rpm -qR ./workspacesclient-4.7.0.4312-2.x86_64.rpm
ld-linux-x86-64.so.2()(64bit)
ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)
libEGL.so.1()(64bit)
libGLX.so.0()(64bit)
libGraphicsMagick++-Q16.so.12()(64bit)
libX11.so.6()(64bit)
libavcodec.so.58()(64bit)
libavcodec.so.58(LIBAVCODEC_58)(64bit)
libavfilter.so.7()(64bit)
libavfilter.so.7(LIBAVFILTER_7)(64bit)
libavformat.so.58()(64bit)
libavformat.so.58(LIBAVFORMAT_58)(64bit)
libavutil.so.56()(64bit)
libavutil.so.56(LIBAVUTIL_56)(64bit)
libbz2.so.1.0()(64bit)
libc.so.6()(64bit)
libc.so.6(GLIBC_2.10)(64bit)
libc.so.6(GLIBC_2.11)(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.15)(64bit)
libc.so.6(GLIBC_2.16)(64bit)
libc.so.6(GLIBC_2.17)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.25)(64bit)
libc.so.6(GLIBC_2.27)(64bit)
libc.so.6(GLIBC_2.28)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.2)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libc.so.6(GLIBC_2.6)(64bit)
libc.so.6(GLIBC_2.7)(64bit)
libc.so.6(GLIBC_2.9)(64bit)
libcurl.so.4()(64bit)
libcurl.so.4(CURL_OPENSSL_4)(64bit)
libdl.so.2()(64bit)
libdl.so.2(GLIBC_2.2.5)(64bit)
libgcc_s.so.1()(64bit)
libgcc_s.so.1(GCC_3.0)(64bit)
libhiredis.so.0.14()(64bit)
liblzma.so.5()(64bit)
liblzma.so.5(XZ_5.0)(64bit)
libm.so.6()(64bit)
libm.so.6(GLIBC_2.2.5)(64bit)
libm.so.6(GLIBC_2.27)(64bit)
libm.so.6(GLIBC_2.29)(64bit)
libmscordaccore.so()(64bit)
libmscordaccore.so(V1.0)(64bit)
libpcoip_core.so()(64bit)
libpthread.so.0()(64bit)
libpthread.so.0(GLIBC_2.12)(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
libpthread.so.0(GLIBC_2.3.2)(64bit)
libpthread.so.0(GLIBC_2.3.3)(64bit)
libpthread.so.0(GLIBC_2.3.4)(64bit)
libpulse.so.0()(64bit)
libpulse.so.0(PULSE_0)(64bit)
librt.so.1()(64bit)
librt.so.1(GLIBC_2.2.5)(64bit)
libstdc++.so.6()(64bit)
libstdc++.so.6(CXXABI_1.3)(64bit)
libstdc++.so.6(CXXABI_1.3.11)(64bit)
libstdc++.so.6(CXXABI_1.3.2)(64bit)
libstdc++.so.6(CXXABI_1.3.3)(64bit)
libstdc++.so.6(CXXABI_1.3.5)(64bit)
libstdc++.so.6(CXXABI_1.3.7)(64bit)
libstdc++.so.6(CXXABI_1.3.8)(64bit)
libstdc++.so.6(CXXABI_1.3.9)(64bit)
libstdc++.so.6(GLIBCXX_3.4)(64bit)
libstdc++.so.6(GLIBCXX_3.4.11)(64bit)
libstdc++.so.6(GLIBCXX_3.4.13)(64bit)
libstdc++.so.6(GLIBCXX_3.4.14)(64bit)
libstdc++.so.6(GLIBCXX_3.4.15)(64bit)
libstdc++.so.6(GLIBCXX_3.4.18)(64bit)
libstdc++.so.6(GLIBCXX_3.4.19)(64bit)
libstdc++.so.6(GLIBCXX_3.4.20)(64bit)
libstdc++.so.6(GLIBCXX_3.4.21)(64bit)
libstdc++.so.6(GLIBCXX_3.4.22)(64bit)
libstdc++.so.6(GLIBCXX_3.4.26)(64bit)
libstdc++.so.6(GLIBCXX_3.4.9)(64bit)
libswresample.so.3()(64bit)
libswresample.so.3(LIBSWRESAMPLE_3)(64bit)
libswscale.so.5()(64bit)
libswscale.so.5(LIBSWSCALE_5)(64bit)
libusb-1.0.so.0()(64bit)
libva.so.2()(64bit)
libwolfssl.so.35()(64bit)
libxcb-res.so.0()(64bit)
libxcb-shm.so.0()(64bit)
libxcb-util.so.1()(64bit)
libxcb-xfixes.so.0()(64bit)
libxcb.so.1()(64bit)
libz.so.1()(64bit)
libz.so.1(ZLIB_1.2.0)(64bit)
libz.so.1(ZLIB_1.2.0.2)(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)

provides:

$ rpm -qP ./workspacesclient-4.7.0.4312-2.x86_64.rpm
application()
application(workspacesclient.desktop)
libPcoipCoreWrapper.so()(64bit)
libSystem.Globalization.Native.so()(64bit)
libSystem.IO.Compression.Native.so()(64bit)
libSystem.IO.Compression.Native.so(V1.0)(64bit)
libSystem.Native.so()(64bit)
libSystem.Net.Security.Native.so()(64bit)
libSystem.Security.Cryptography.Native.OpenSsl.so()(64bit)
libavcodec.so.58()(64bit)
libavcodec.so.58(LIBAVCODEC_58)(64bit)
libavdevice.so.58()(64bit)
libavdevice.so.58(LIBAVDEVICE_58)(64bit)
libavfilter.so.7()(64bit)
libavfilter.so.7(LIBAVFILTER_7)(64bit)
libavformat.so.58()(64bit)
libavformat.so.58(LIBAVFORMAT_58)(64bit)
libavutil.so.56()(64bit)
libavutil.so.56(LIBAVUTIL_56)(64bit)
libclrgc.so()(64bit)
libclrjit.so()(64bit)
libclrjit.so(V1.0)(64bit)
libcoreclr.so()(64bit)
libcoreclr.so(V1.0)(64bit)
libhostfxr.so()(64bit)
libhostfxr.so(V1.0)(64bit)
libhostpolicy.so()(64bit)
libhostpolicy.so(V1.0)(64bit)
libmscordaccore.so()(64bit)
libmscordaccore.so(V1.0)(64bit)
libmscordbi.so()(64bit)
libmscordbi.so(V1.0)(64bit)
libpcoip_core.so()(64bit)
libswresample.so.3()(64bit)
libswresample.so.3(LIBSWRESAMPLE_3)(64bit)
libswscale.so.5()(64bit)
libswscale.so.5(LIBSWSCALE_5)(64bit)
libvchan-plugin-clipboard.so()(64bit)
libwolfssl.so.35()(64bit)
mimehandler(x-scheme-handler/workspaces)
workspacesclient = 4.7.0.4312-2
workspacesclient(x86-64) = 4.7.0.4312-2

@OkButWine
Copy link

OkButWine commented Feb 9, 2024

Found the issue is most like Amazon doing an OS detection on the new client. Got Workspaces working through distrobox instead

@JHBoricua
Copy link

@OkButWine Can you detail how did you get this working via distrobox? I tried going that route and the client won't launch. I'm on Fedora 40.

@Clifra-Jones
Copy link

@JHBoricua Just use the FlatPak. it works. Well, it does crash on exit but that's a FlatPak issue.
I use this every day without issue.

@JHBoricua
Copy link

JHBoricua commented Jun 13, 2024

I was using the Flatpak, but on Fedora 40 the latest release of the Flatpak crashes on startup. Not to mention it is unverified. There's not even a changelog for the latest update. If using Distrobox allows the use of the official package from Amazon, then IMHO it is less risky than using the Flatpak. In any case, I figured out how to make it work a few hours ago thanks to this Reddit post. Basically, I needed to also install the ubuntu-desktop package in addition to the workspaces one.

In my Fedora 40 I installed the client for ubunto 20.04 did the following:

distrobox create --image ubuntu:20.04 --name Amazon-Workspaces
distrobox enter Amazon-Workspaces
sudo apt update && sudo apt-get install --no-install-recommends ubuntu-desktop -y
wget -q -O - https://workspaces-client-linux-public-key.s3-us-west-2.amazonaws.com/ADB332E7.asc | sudo apt-key add -
echo "deb [arch=amd64] https://d3nt0h4h6pmmc4.cloudfront.net/ubuntu focal main" | sudo tee /etc/apt/sources.list.d/amazon-workspaces-clients.list
sudo apt-get update
sudo apt install workspacesclient -y
distrobox-export --app workspacesclient

So far it's been working flawlessly. No crashes on exit either.

@OkButWine
Copy link

Late to the party but I agree that distrobox is the best way to go. The flatpak either will crash and/or be incompatible with the latest version of AWS Workspaces. Distrobox allows you to run Ubuntu and the install and run the latest version of AWS Workspaces from https://clients.amazonworkspaces.com/linux-install.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment