Skip to main content

Install Citrix Workspace on Groovy Gorilla on Raspeberry Pi


Citrix on Ubuntu

How I got Citrix Workspace working on Groovy Gorilla (Ubuntu 20.10) on Raspberry Pi 400

At first installing Citrix on Ubuntu may seem like a no brainer, but because how Ubuntu and Citrix have packaged software for Raspberry Pi, it is pain in the neck to get it working correctly. 

What is the issue?

When I installed Ubuntu on Raspberry Pi hardware, the only package available for Pi 4/400 was 64 bit, but Citrix has only ARMHF packages for raspberry Pi which is 32 bit. Technically 32 bit package should work on 64 bit architecture without a fuss, but for whatever reason Citrix package checks if package to be installed matches OS bit level. Attempting to install the package as well as subsequent system updates report failure. More over Software Center can't install or remove software complaining broken packages on the system. First let me tell you how I installed Citrix then will go on fixing issue.

Prepare system for Citrix installation

  1. Check system architecture using dpkg --print-architecture command

    For me it reported arm64.
  2. As Citrix is available only for armhf, I added support for armhf using command sudo dpkg --add-architecture armhf.
  3. Now checking available architectures I see armhf is reported as foreign architecture, sweet!
  4. For new architecture to take effect, updated packages using sudo apt update and sudo apt upgrade.
Now system is ready to accept armhf packages.

Install Citrix Workspace

  1. Downloaded workspace app from
  2. Installed deb package using sudo dpkg -i icaclient_20.10.0.6_armhf.deb.
  3. Installation reported missing packages. I got these corrected using sudo apt --fix-missing update and sudo apt --fix-broken install.
  4. Linked certificates from Mozilla to Citrix client using sudo ln -s /usr/share/ca-certificates/mozilla/* /opt/Citrix/ICAClient/keystore/cacerts 
At this point I have a functional Citrix workspace but every sudo apt upgrade is reporting icaclient is partially configured package and attempts to configure it and fail. Super annoying! 

Let's get this annoying issue fixed.

Fix Citrix Workspace post installation script

As issue is reported in post-installation script I decided to look in what the script is attempting to do and is failing. 

  1. Opened the script /var/lib/dpkg/info/icaclient.postinst in editor.
  2. After a bit of reading through and running script with debug lines found script is failing to find suitable GStreamer package.
  3. Script is looking for hardware info using uname -m which Ubuntu reports as aarch64 but GStreamer libraries installed for armhf are 32 bit. Script decided not to use libraries.

  4. As I already installed armhf architecture, I see no risk forcing script to assume 32 bit architecture.

  5. Now the GStreamer library issue is resolved, but post install script is still failing.
  6. This time I see it is finding the machine architecture based on which it is decideing to clear cache folders. Once again uname -m is used, which is reporting aarch64 and script is looking for armhf. Updated script to use armhf configuration even when uname is reporting aarch 64. I know, it is not right way of fixing this issue, but knowing I have armhf architecture support installed I see no issue forcing to use it.

That's all it took, now Citrix Workspace is working as expected and system upgrade is also not complaining.

P.S. I saw some blogs fiddling with Kernel to fake architecture as armhf to get armhf packages installed without updating installer, but for one package I am not willing to compromising on everything else.



  1. Harrah's Cherokee Casino & Hotel - MapYRO
    Find your way around the casino, find where everything is located with the most up-to-date information about communitykhabar Harrah's Cherokee Casino 메이피로출장마사지 & Hotel in Cherokee, febcasino NC.


Post a Comment

Popular posts from this blog

Multi threading in SpringBoot Application

How I got my SpringBoot application to execute a service in multiple threads Enabled SpringBoot application run Async tasks Defined a service method which can be invoked asynchronously and returns CompletableFuture object as required by Spring Let Spring manage service component instance Though not required, configured TaskExecutor Spring could use Enable SpringBoot application to run tasks asynchronously To be able to execute tasks using multiple threads asynchronously SpringBoot application must be annotated with @EnableAsync .   I defined this annotation right after   @SpringBootApplication . @SpringBootApplication @EnableAsync public class NosqlApplication implements CommandLineRunner { Logger logger = LoggerFactory. getLogger (NosqlApplication. class ) ; Aync service method returning CompletableFuture object Spring could invoke tasks synchronously and asynchronously. To be able to invoke tasks asynchronously (and let main thread do other things) I annotated the service method

Configuring Spring Framework with YAML

Spring application can be configured using YAML as effectively as using properties file. With YAML file one can, Create environment specific profiles Define properties at application level Define (or override) properties at profile level Spring Framework loads application.yml by default just the way it loads If you want to change the name of the yml file you'll have to use context loader to tell what file to look for. Must knows of the yml based configuration Profiles - YML supports multiple profiles in a single file. One can define environment specific configurations as profiles in a single file. Profiles separator - YML configuration file uses 3 dashes ( --- ) to separate a profile. Every property you define after --- is specific to that profile. Profile name - Give profile a name using spring.config.activate.on-profile property. Active profile(s) - Define which profile or profiles are active using property. More than one profile c