Pulse Secure Client on Ubuntu Linux

Danny Quah
4 min readJun 5, 2020



Danny Quah

June 2020

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, UWO.ca 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/PulseClient_x86_64.sh 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/libwebp.so.6: 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 UWO.ca 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


2. 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:

$ LD_LIBRARY_PATH=/usr/local/pulse:$LD_LIBRARY_PATH 
$ /usr/local/pulse/pulseUi &

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

3. On Ubuntu 20.04, however, neither of the above works. The key problem is libwebkitgtk-1.0.so.0 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 http://archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu60_60.2-3ubuntu3_amd64.deb
$ sudo wget http://archive.ubuntu.com/ubuntu/pool/universe/w/webkitgtk/libjavascriptcoregtk-1.0-0_2.4.11-3ubuntu3_amd64.deb
$ sudo wget http://archive.ubuntu.com/ubuntu/pool/universe/w/webkitgtk/libwebkitgtk-1.0-0_2.4.11-3ubuntu3_amd64.deb
#Extract those just downloaded into the extra/ folder
$ cd ..
$ sudo dpkg -x debs/ ./extra
$ sudo dpkg -x debs/ ./extra
$ sudo dpkg -x debs/ ./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


  1. UWO.ca
  2. Tribuga
  3. Pulse-Secure-42721

Originally published at http://github.com.



Danny Quah

Danny Quah is Dean and Li Ka Shing Professor in Economics at the Lee Kuan Yew School of Public Policy, NUS.