Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Pulse Secure Client on Ubuntu Linux

Pulse Secure Client on Ubuntu Linux

by Danny Quah, June 2020 (revised Jan 2022)

Pulse Secure Client is a VPN client that allows secure connection to a Pulse Connect Secure SSL VPN gateway. Many universities use that latter for faculty, staff, and student access to their computer systems. However, because Linux comes in many different flavors, the standard Pulse Secure Client installer does not always run to completion. (For one, suggests "PulseSecure's understanding of Linux package managers and distributions in general seems very limited.") The user is then either forced to use a Windows machine, somehow, or fail VPN access when traveling with their Linux notebook.

This Gist describes the steps I took to install Pulse Secure Client on my Ubuntu-based Linux machines, including a Pixelbook running GalliumOS 3.1 and Dell desktops running Ubuntu 18.04 and 20.04. Other writeups elsewhere that I've looked at describe the same problems I encountered, but were either out-dated, overly localised, or did not provide me the critical information I needed to complete the job.

The Pulse Secure Client itself is typically provided somewhere on an organisation's file servers. Retrieve that (sometimes that needs to be unzipped or otherwise extracted, so I don't assume being able to get it using just a wget or curl). In my case, I retrieved onto my local disk from my university's servers the file pulse-9.1R5.x86_64.deb for my 64-bit machines. Of course, by when this Gist is read, the latest version will almost surely have different numbers, but the filename will likely retain still some resemblance.

Start to install Pulse Secure Client with:

sudo dpkg --install pulse-9.1R5.x86_64.deb

If that works with no error messages, you're done.

Typically, however, the script detects missing dependencies and asks that the user execute:

sudo /usr/local/pulse/ install_dependency_packages

Go ahead and try that. Again, if no error messages appear, then you're good to go.

However, all my systems at this point show some combination of errors including:

cannot remove /usr/local/pulse/ No such file or directory

and references to unary operators expected (when, for instance, the shell script is unable to find a correct OS/release label and replaces it instead with just a blank).

From here, I took advice from and Tribuga, but updated and modified to run the following by hand. The critical difference in the below is whether libwebkitgtk-1.0 is available on your system (GalliumOS 3.1; Ubuntu 18.04; and possibly others) or is not (Ubuntu 20.04 and possibly others).

  1. On one of my systems, doing this:
sudo apt install libproxy1-plugin-webkit
sudo apt install libwebkitgtk-1.0


  1. On others I had to execute:
sudo apt install lib32z1 
sudo apt install libwebkitgtk-1.0
sudo apt install libproxy1v5 
sudo apt install libproxy1-plugin-gsettings
sudo apt install libproxy1-plugin-webkit
sudo apt install libdconf1 
sudo apt install dconf-gsettings-backend

(with some systems asserting that some of what I was attempting to install was already present and up to date; this is of course without harm).

Whichever of 1.-2. above works for you, however, Pulse Secure Client is now available.

You'll find that an entry has been created in your App drawer or menu with the appropriate name, and containing:

/usr/bin/env LD_LIBRARY_PATH=/usr/local/pulse:$LD_LIBRARY_PATH /usr/local/pulse/pulseUi

Run that. Alternatively, doing:

/usr/local/pulse/pulseUi &

should give you the VPN sign-on screen, from where you can now fill in your organisation's VPN specifics.

  1. On Ubuntu 20.04, however, neither of the above works. The key problem is is not in Ubuntu 20.04. A number of solutions suggest ways to install that library nonetheless. These proposals range from temporarily telling your system it's an 18.04 machine; to pointing to 18.04 repositories, and then switching back; and so on (e.g., Pulse-Secure-42721).

I prefer not to inter-mingle libraries on my machine. So I chose to install what was needed, not in my general load library locations, but instead only in a subfolder of /usr/local/pulse, and then telling PulseSecure to look there. To do this I followed Tribuga:

cd /usr/local/pulse
sudo mkdir debs extra
# Get needed packages and store them in the debs/ folder
cd ./debs
sudo wget 
sudo wget
sudo wget
# Extract those just downloaded into the extra/ folder
cd ..
sudo dpkg -x debs/libicu60_60.2-3ubuntu3_amd64.deb ./extra
sudo dpkg -x debs/libjavascriptcoregtk-1.0-0_2.4.11-3ubuntu3_amd64.deb ./extra
sudo dpkg -x debs/libwebkitgtk-1.0-0_2.4.11-3ubuntu3_amd64.deb ./extra
# adjust your load library path
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pulse/extra/usr/lib/x86_64-linux-gnu/

My system already had libenchant1c2a. If yours does not, install it with

sudo apt install libenchant1c2a

You're now good to go. However, again as in 1.-2. above, depending on how you launch PulseSecure pulseUi generally, you might want to make your launch script aware of these new load libraries. The leading way of doing this by adjusting the invocation line. On some machines, I right-click PulseSecure in my Apps Launcher and Edit Application to change the command line to

/usr/bin/env LD_LIBRARY_PATH=/usr/local/pulse/extra/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH /usr/local/pulse/pulseUi

On Ubuntu 20.04 more generally, navigate to /usr/share/applications, and sudo edit pulseUi.desktop so its Exec line is, as above,

/usr/bin/env LD_LIBRARY_PATH=/usr/local/pulse/extra/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH /usr/local/pulse/pulseUi


  2. Tribuga
  3. Pulse-Secure-42721
Copy link

L41rx commented Jul 27, 2020

thanks !

Copy link

HugoDL commented Sep 10, 2020

It's AWESOME! Thanks for sharing Danny!

Copy link

philboeselager commented Sep 30, 2020

Thank you VERY much, Danny! sudo apt install lib32z1 did it for me.

Copy link

jcamille91 commented Nov 23, 2020

Thanks a lot! for anyone who makes the same mistake I just did - you need to run the install commands for the libraries listed 1./2. AFTER attempting and failing to install Pulse with the error "cannot remove /usr/local/pulse/ No such file or directory". Even if they're already installed.

Copy link

sirgogo commented Nov 26, 2020

Hi, thanks for this! But, I'm still stuck after step 3:

(base) sirgogo@compy:/usr/local/pulse/debs$ ls
libicu60_60.2-3ubuntu3_amd64.deb  libjavascriptcoregtk-1.0-0_2.4.11-3ubuntu3_amd64.deb  libwebkitgtk-1.0-0_2.4.11-3ubuntu3_amd64.deb
(base) sirgogo@compy:/usr/local/pulse/debs$ cd ..
(base) sirgogo@compy:/usr/local/pulse$ ls
debs  extra  html  postinstall.log  pulsesvc  pulse.tgz  pulseUi  pulseutil  README  version.txt
(base) sirgogo@compy:/usr/local/pulse$ sudo dpkg -x debs/libicu60_60.2-3ubuntu3_amd64.deb ./extra
(base) sirgogo@compy:/usr/local/pulse$ sudo dpkg -x debs/libjavascriptcoregtk-1.0-0_2.4.11-3ubuntu3_amd64.deb ./extra
(base) sirgogo@compy:/usr/local/pulse$ sudo dpkg -x debs/libwebkitgtk-1.0-0_2.4.11-3ubuntu3_amd64.deb ./extra
(base) sirgogo@compy:/usr/local/pulse$ ls
debs  extra  html  postinstall.log  pulsesvc  pulse.tgz  pulseUi  pulseutil  README  version.txt
(base) sirgogo@compy:/usr/local/pulse$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pulse/extra/usr/lib/x86_64-linux-gnu/
(base) sirgogo@compy:/usr/local/pulse$ ls
debs  extra  html  postinstall.log  pulsesvc  pulse.tgz  pulseUi  pulseutil  README  version.txt
(base) sirgogo@compy:/usr/local/pulse$ ./ 
./ line 359: [: =: unary operator expected
./ line 361: [: =: unary operator expected

Any ideas? I'm headless on Ubuntu 20.10, so hoping to run the command line tool.

Copy link

FranciscusRenatus commented Nov 30, 2020

Hi! Thank you for sharing.

Have Ubuntu 20.04 and tried the instructions. However I get this error:
sudo dpkg -x debs/ ./extra dpkg-deb: error: error reading archive magic version number from file debs/: Is a directory

How to fix this?

Copy link

wwebb commented Dec 2, 2020

This is a great solution that worked perfectly for me on Ubuntu 20.04 LTS Desktop. Thank you!

@PowerfulFrank, for those three commands for which you are receiving an error, you need to include the filenames of the libraries you downloaded:

#Extract those just downloaded into the extra/ folder
$ cd ..
$ sudo dpkg -x debs/libicu60_60.2-3ubuntu3_amd64.deb ./extra
$ sudo dpkg -x debs/libjavascriptcoregtk-1.0-0_2.4.11-3ubuntu3_amd64.deb ./extra
$ sudo dpkg -x debs/libwebkitgtk-1.0-0_2.4.11-3ubuntu3_amd64.deb ./extra

Copy link

DannyQuah commented Dec 6, 2020

Thanks, @wwebb, for catching the typos in those three lines (pretty essential typos too!). I've corrected my post. Sorry about that, @PowerfulFrank.

Copy link

DannyQuah commented Dec 6, 2020

@sirgogo - those error messages you're still getting are the same ones that appeared on my system before I ran the fix I describe. I'm not sure what to tell you, unfortunately. I don't know if Ubuntu 20.10 moved some things around, and I don't have a system that I can update to test. Sorry.

Copy link

JonasBanhos commented Dec 7, 2020

Thank You! What a great explanation. It worked exactly as in step 3 for Ubuntu 20.04.1 LTS. By the way my Pulse Secure package is Pulse-linux-9.1r2.0-x64.deb FYI.

Copy link

fcbond commented Dec 11, 2020

Thank you!

Copy link

Asafkbalink commented Dec 31, 2020

Thank you, very useful.

Copy link

Nikouw36 commented Jan 20, 2021

Thanks, love it. Works perfect in xubuntu 20.04

Copy link

ishakantony commented Feb 3, 2021

Thanks for sharing! Works like a charm...

Copy link

danywalls commented Feb 5, 2021

Thanks, works like a charm and save my day 👍

Copy link

jacke88 commented Apr 26, 2021

@DannyQuah, for Ubuntu 21.04 you will need to install libenchant1c2a manually:
cd /usr/local/pulse/debs
cd /usr/local/pulse/extra/
dpkg -x /usr/local/pulse/debs/libenchant1c2a_1.6.0-11.4_amd64.deb .

Copy link

R4YM3 commented Jun 14, 2021

When I try sudo dpkg -i ps-pulse-linux-9.1r11.4-b8575-64-bit-installer.deb and after install go to /user/local then the folder pulse does not exist. Do i have a new version which doesn't work with this fix? I am on Ubuntu 20.04.
Any help would be greatly appreciated

Copy link

d2a-raudenaerde commented Dec 2, 2021

I recently switched (on Ubuntu 21.10) to use the NetworkManager-openconnect VPN plugin. Works like a charm!
See and

sudo apt install network-manager-openconnect
sudo apt install network-manager-openconnect-gnome 


@R4YM3 did you solve it ? I have the same issue. There is no pulse folder in /usr/local
I am on Ubuntu 20.04 as well.

Copy link

DannyQuah commented Jan 13, 2022

@R4YM3 @AsmaaSamyMohamedMahmoud - I'm not sure why that first dpkg didn't put things in /usr/local (never intended for /user/local, that must have been a typo in @R4YM3 's comment). Perhaps one of your ENV variables redirected dpkg output elsewhere in your filesystem; there's no way for me to tell. But you can try doing a find -L to see. You'll notice others have installed this or subsequent versions successfully on 20.04 and 20.10

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