How to Install Chromium on Ubuntu and CentOS?

A step-by-step guide to install Headless Chromium on Ubuntu and CentOS.

What is Headless Chrome?

Headless Chrome is like running a chrome browser without UI (browser) i.e., it is running in a headless environment, which is very useful for.

So, what does headless Chrome unlock for us?

One of the most exciting things is the ability to test the latest and greatest web platform features like ES6 modules, service workers, and streams. With headless chrome, you can write apps and test those apps with up-to-date rendering. The other thing that it unlocks is these awesome functionalities like network throttling, device emulation, and code coverage.

With headless chrome, you can perform tests without even writing a line of code, isn’t that cool!

You can just execute them through the command line. Below are some of the popularly used flags.

--screenshot #to take a screenshot--print-to-pdf #converting webpage to PDF--dump-dom #dump DOM (document object model) data

Chromium Installation on Ubuntu

Step 1: Update Ubuntu

In the beginning, update the packages in Ubuntu.

:~$ sudo apt-get updateHit:1  bionic InReleaseHit:2  cosmic-security InReleaseHit:3  cosmic InReleaseHit:5  bionic InReleaseIgn:6  binary/ InReleaseHit:7  cosmic InReleaseHit:8  cosmic InReleaseHit:9  binary/ ReleaseHit:10  cosmic-updates InReleaseHit:11  cosmic-backports InReleaseHit:4  kubernetes-xenial InReleaseReading package lists... Done

Step 2: Install Dependencies

Install these dependencies which are required for the installation.

:~$ sudo apt-get install -y libappindicator1 fonts-liberationReading package lists... DoneBuilding dependency treeReading state information... Donefonts-liberation is already the newest version (1:1.07.4-7).fonts-liberation set to manually installed.The following package was automatically installed and is no longer required:chromium-codecs-ffmpeg-extraUse 'sudo apt autoremove' to remove it.The following additional packages will be installed:libdbusmenu-gtk4 libindicator7Suggested packages:indicator-applicationThe following NEW packages will be installed:libappindicator1 libdbusmenu-gtk4 libindicator70 upgraded, 3 newly installed, 0 to remove and 238 not upgraded.Need to get 68.2 kB of archives.After this operation, 280 kB of additional disk space will be used.Get:1  cosmic/universe amd64 libdbusmenu-gtk4 amd64 16.04.1+18.10.20180917-0ubuntu1 [27.1 kB]Get:2  cosmic/universe amd64 libindicator7 amd64 16.10.0+18.04.20180321.1-0ubuntu1 [21.7 kB]Get:3  cosmic/universe amd64 libappindicator1 amd64 12.10.1+18.04.20180322.1-0ubuntu1 [19.4 kB]Fetched 68.2 kB in 1s (61.1 kB/s)Selecting previously unselected package libdbusmenu-gtk4:amd64.(Reading database ... 318270 files and directories currently installed.)Preparing to unpack .../libdbusmenu-gtk4_16.04.1+18.10.20180917-0ubuntu1_amd64.deb ...Unpacking libdbusmenu-gtk4:amd64 (16.04.1+18.10.20180917-0ubuntu1) ...Selecting previously unselected package libindicator7.Preparing to unpack .../libindicator7_16.10.0+18.04.20180321.1-0ubuntu1_amd64.deb ...Unpacking libindicator7 (16.10.0+18.04.20180321.1-0ubuntu1) ...Selecting previously unselected package libappindicator1.Preparing to unpack .../libappindicator1_12.10.1+18.04.20180322.1-0ubuntu1_amd64.deb ...Unpacking libappindicator1 (12.10.1+18.04.20180322.1-0ubuntu1) ...Setting up libindicator7 (16.10.0+18.04.20180321.1-0ubuntu1) ...Setting up libdbusmenu-gtk4:amd64 (16.04.1+18.10.20180917-0ubuntu1) ...Processing triggers for libc-bin (2.28-0ubuntu1) ...Setting up libappindicator1 (12.10.1+18.04.20180322.1-0ubuntu1) ...Processing triggers for libc-bin (2.28-0ubuntu1) ...libappindicator1: This library is used to export menu by an application into a panelfonts-liberation: This library has similar font metrics as Arial, Times and Courier

There might be cases where few dependencies would be missing to install chrome. So, run the command below, it will install all the missing dependencies required to install chromium.

:~$ sudo apt-get install -fThe following additional packages will be installed: at-spi2-core cpp cpp-7 dconf-gsettings-backend dconf-service gcc-7-base glib-networking glib-networking-common glib-networking-services gsettings-desktop-schemas libappindicator3-1 libasound2 libasound2-data libatk-bridge2.0-0 libatspi2.0-0 libauthen-sasl-perl libcairo-gobject2 libcolord2 libdata-dump-perl libdbusmenu-gtk3-4 libdconf1 libdrm-amdgpu1 libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libencode-locale-perl libepoxy0 libfile-basedir-perl libfile-desktopentry-perl libfile-listing-perl libfile-mimeinfo-perl libfont-afm-perl libfontenc1 libgl1 libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libgtk-3-0 libgtk-3-bin libgtk-3-common libhtml-form-perl libhtml-format-perl libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl libhttp-cookies-perl libhttp-daemon-perl libhttp-date-perl libhttp-message-perl libhttp-negotiate-perl libice6 libindicator3-7 libio-html-perl libio-socket-ssl-perl libipc-system-simple-perl libisl19 libjson-glib-1.0-0 libjson-glib-1.0-common liblcms2-2 libllvm9 liblwp-mediatypes-perl liblwp-protocol-https-perl libmailtools-perl libmpc3 libnet-dbus-perl libnet-http-perl libnet-smtp-ssl-perl libnet-ssleay-perl libnspr4 libnss3 libpciaccess0 libproxy1v5 librest-0.7-0 libsensors4 libsm6 libsoup-gnome2.4-1 libsoup2.4-1 libtie-ixhash-perl libtimedate-perl libtry-tiny-perl liburi-perl libwayland-client0 libwayland-cursor0 libwayland-egl1 libwww-perl libwww-robotrules-perl libx11-protocol-perl libx11-xcb1 libxaw7 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-shape0 libxcb-sync1 libxft2 libxkbcommon0 libxml-parser-perl libxml-twig-perl libxml-xpathengine-perl libxmu6 libxpm4 libxshmfence1 libxss1 libxt6 libxtst6 libxv1 libxxf86dga1 libxxf86vm1 perl-openssl-defaults x11-common x11-utils x11-xserver-utils xdg-utilsSuggested packages: cpp-doc gcc-7-locales indicator-application libasound2-plugins alsa-utils libdigest-hmac-perl libgssapi-perl colord gvfs liblcms2-utils libcrypt-ssleay-perl lm-sensors libauthen-ntlm-perl libunicode-map8-perl libunicode-string-perl xml-twig-tools mesa-utils nickle cairo-5c xorg-docs-coreThe following NEW packages will be installed: at-spi2-core cpp cpp-7 dconf-gsettings-backend dconf-service gcc-7-base glib-networking glib-networking-common glib-networking-services gsettings-desktop-schemas libappindicator3-1 libasound2 libasound2-data libatk-bridge2.0-0 libatspi2.0-0 libauthen-sasl-perl libcairo-gobject2 libcolord2 libdata-dump-perl libdbusmenu-gtk3-4 libdconf1 libdrm-amdgpu1 libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libencode-locale-perl libepoxy0 libfile-basedir-perl libfile-desktopentry-perl libfile-listing-perl libfile-mimeinfo-perl libfont-afm-perl libfontenc1 libgl1 libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libgtk-3-0 libgtk-3-bin libgtk-3-common libhtml-form-perl libhtml-format-perl libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl libhttp-cookies-perl libhttp-daemon-perl libhttp-date-perl libhttp-message-perl libhttp-negotiate-perl libice6 libindicator3-7 libio-html-perl libio-socket-ssl-perl libipc-system-simple-perl libisl19 libjson-glib-1.0-0 libjson-glib-1.0-common liblcms2-2 libllvm9 liblwp-mediatypes-perl liblwp-protocol-https-perl libmailtools-perl libmpc3 libnet-dbus-perl libnet-http-perl libnet-smtp-ssl-perl libnet-ssleay-perl libnspr4 libnss3 libpciaccess0 libproxy1v5 librest-0.7-0 libsensors4 libsm6 libsoup-gnome2.4-1 libsoup2.4-1 libtie-ixhash-perl libtimedate-perl libtry-tiny-perl liburi-perl libwayland-client0 libwayland-cursor0 libwayland-egl1 libwww-perl libwww-robotrules-perl libx11-protocol-perl libx11-xcb1 libxaw7 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-shape0 libxcb-sync1 libxft2 libxkbcommon0 libxml-parser-perl libxml-twig-perl libxml-xpathengine-perl libxmu6 libxpm4 libxshmfence1 libxss1 libxt6 libxtst6 libxv1 libxxf86dga1 libxxf86vm1 perl-openssl-defaults x11-common x11-utils x11-xserver-utils xdg-utils0 upgraded, 117 newly installed, 0 to remove and 58 not upgraded.1 not fully installed or removed.Need to get 40.7 MB of archives.After this operation, 369 MB of additional disk space will be used.Do you want to continue? [Y/n] YFetched 40.7 MB in 4s (9470 kB/s)Extracting templates from packages: 100%

Step 3: Download Chrome

Download the google chrome stable package for the Ubuntu system.

:~$ wget  13:58:41--  dl.google.com (dl.google.com)... 172.217.163.78, 2404:6800:4007:80c::200eConnecting to dl.google.com (dl.google.com)|172.217.163.78|:443... connected.HTTP request sent, awaiting response... 200 OKLength: 62204098 (59M) [application/x-debian-package]Saving to: ‘google-chrome-stable_current_amd64.deb’google-chrome-stable_current_amd64. 100%[=================================================================>] 59.32M 11.1MB/s in 29s2020-01-15 13:59:10 (2.04 MB/s) - ‘google-chrome-stable_current_amd64.deb’ saved [62204098/62204098]

Step 4: Install Chrome

Install the stable package.

:~$ sudo dpkg -i google-chrome*.debSelecting previously unselected package google-chrome-stable.(Reading database ... 318285 files and directories currently installed.)Preparing to unpack google-chrome-stable_current_amd64.deb ...Unpacking google-chrome-stable (79.0.3945.117-1) ...Setting up google-chrome-stable (79.0.3945.117-1) ...update-alternatives: using /usr/bin/google-chrome-stable to provide /usr/bin/x-www-browser (x-www-browser) in auto modeupdate-alternatives: using /usr/bin/google-chrome-stable to provide /usr/bin/gnome-www-browser (gnome-www-browser) in auto modeupdate-alternatives: using /usr/bin/google-chrome-stable to provide /usr/bin/google-chrome (google-chrome) in auto modeProcessing triggers for gnome-menus (3.13.3-11ubuntu2) ...Processing triggers for desktop-file-utils (0.23-3ubuntu2) ...Processing triggers for mime-support (3.60ubuntu1) ...Processing triggers for man-db (2.8.4-2) ...

Step 5: Check Chrome Version

To confirm the installation has finished successfully, check the Google Chrome version.

:~$ google-chrome-stable -versionGoogle Chrome 79.0.3945.117

Optional: Run Chrome Headless

Let me show you an example of running chrome in headless mode.

I will run chrome in headless mode, and all the content of will be saved as a pdf file.

:~$ google-chrome-stable --headless --disable-gpu --print-to-pdf [0115/140930.772108:INFO:headless_shell.cc(620)] Written to file output.pdf.

You can see a file output.pdf

:~$ ls -l out*-rw------- 1 geekflare geekflare 80799 Jan 15 14:09 output.pdf:~$ 

Next, I will show you how to do the same setup in the CentOS system.

Chromium Installation on CentOS

Step 1: Update CentOS

Update the CentOS system with the below command.

[~]$ sudo yum update

Step 2: Create Chrome Repository

Add google chrome repository to the system. Create a file google-chrome.repo inside /etc/yum.repos.d/ and add the details below.

[~]$ sudo gedit /etc/yum.repos.d/google-chrome.repo[google-chrome]name=google-chromebaseurl=$basearchenabled=1gpgcheck=1gpgkey=

Step 3: Install Chrome

Run the yum command below to install the google chrome on the CentOS system.

[~]$ sudo yum install google-chrome-stableLast metadata expiration check: 0:04:04 ago on Wed 22 Jan 2020 01:06:24 PM EST.Dependencies resolved.================================================================================Package Arch Version Repository Size================================================================================Installing:google-chrome-stable x86_64 79.0.3945.130-1 google-chrome 60 MInstalling dependencies:libXScrnSaver x86_64 1.2.3-1.el8 AppStream 31 klibappindicator-gtk3 x86_64 12.10.0-19.el8 AppStream 43 klibdbusmenu x86_64 16.04.0-12.el8 AppStream 140 klibdbusmenu-gtk3 x86_64 16.04.0-12.el8 AppStream 41 klibindicator-gtk3 x86_64 12.10.1-14.el8 AppStream 70 kliberation-fonts noarch 1:2.00.3-4.el8 BaseOS 19 kliberation-serif-fonts noarch 1:2.00.3-4.el8 BaseOS 607 kTransaction Summary================================================================================Install 8 PackagesTotal download size: 60 MInstalled size: 213 MIs this ok [y/N]: yDownloading Packages:(1/8): libXScrnSaver-1.2.3-1.el8.x86_64.rpm 146 kB/s | 31 kB 00:00(2/8): libappindicator-gtk3-12.10.0-19.el8.x86_ 171 kB/s | 43 kB 00:00(3/8): libdbusmenu-gtk3-16.04.0-12.el8.x86_64.r 691 kB/s | 41 kB 00:00(4/8): libindicator-gtk3-12.10.1-14.el8.x86_64. 558 kB/s | 70 kB 00:00(5/8): liberation-fonts-2.00.3-4.el8.noarch.rpm 74 kB/s | 19 kB 00:00(6/8): liberation-serif-fonts-2.00.3-4.el8.noar 1.3 MB/s | 607 kB 00:00(7/8): libdbusmenu-16.04.0-12.el8.x86_64.rpm 121 kB/s | 140 kB 00:01(8/8): google-chrome-stable-79.0.3945.130-1.x86 8.4 MB/s | 60 MB 00:07--------------------------------------------------------------------------------Total 6.5 MB/s | 60 MB 00:09warning: /var/cache/dnf/google-chrome-eb0d6f10ccbdafba/packages/google-chrome-stable-79.0.3945.130-1.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 7fac5991: NOKEYgoogle-chrome 49 kB/s | 10 kB 00:00Importing GPG key 0x7FAC5991:Userid : 'Google, Inc. Linux Package Signing Key <>'Fingerprint: 4CCA 1EAF 950C EE4A B839 76DC A040 830F 7FAC 5991From :  this ok [y/N]: yKey imported successfullyImporting GPG key 0xD38B4796:Userid : 'Google Inc. (Linux Packages Signing Authority) <>'Fingerprint: EB4C 1BFD 4F04 2F6D DDCC EC91 7721 F63B D38B 4796From :  this ok [y/N]: yKey imported successfullyRunning transaction checkTransaction check succeeded.Running transaction testTransaction test succeeded.Running transactionPreparing : 1/1Installing : libdbusmenu-16.04.0-12.el8.x86_64 1/8Installing : libdbusmenu-gtk3-16.04.0-12.el8.x86_64 2/8Installing : liberation-serif-fonts-1:2.00.3-4.el8.noarch 3/8Installing : liberation-fonts-1:2.00.3-4.el8.noarch 4/8Installing : libindicator-gtk3-12.10.1-14.el8.x86_64 5/8Installing : libappindicator-gtk3-12.10.0-19.el8.x86_64 6/8Installing : libXScrnSaver-1.2.3-1.el8.x86_64 7/8Running scriptlet: google-chrome-stable-79.0.3945.130-1.x86_64 8/8Installing : google-chrome-stable-79.0.3945.130-1.x86_64 8/8Running scriptlet: google-chrome-stable-79.0.3945.130-1.x86_64 8/8Redirecting to /bin/systemctl start atd.serviceVerifying : libXScrnSaver-1.2.3-1.el8.x86_64 1/8Verifying : libappindicator-gtk3-12.10.0-19.el8.x86_64 2/8Verifying : libdbusmenu-16.04.0-12.el8.x86_64 3/8Verifying : libdbusmenu-gtk3-16.04.0-12.el8.x86_64 4/8Verifying : libindicator-gtk3-12.10.1-14.el8.x86_64 5/8Verifying : liberation-fonts-1:2.00.3-4.el8.noarch 6/8Verifying : liberation-serif-fonts-1:2.00.3-4.el8.noarch 7/8Verifying : google-chrome-stable-79.0.3945.130-1.x86_64 8/8Installed:google-chrome-stable-79.0.3945.130-1.x86_64libXScrnSaver-1.2.3-1.el8.x86_64libappindicator-gtk3-12.10.0-19.el8.x86_64libdbusmenu-16.04.0-12.el8.x86_64libdbusmenu-gtk3-16.04.0-12.el8.x86_64libindicator-gtk3-12.10.1-14.el8.x86_64liberation-fonts-1:2.00.3-4.el8.noarchliberation-serif-fonts-1:2.00.3-4.el8.noarchComplete!

Step 4: Check Chrome Version

To confirm the installation has finished successfully, check the google chrome version.

[~]$ google-chrome -versionGoogle Chrome 79.0.3945.130

Optional: Run Chrome Headless

Let me show you an example of running chrome in headless mode on CentOS.

I will take the example of capturing a screenshot. This command below will run chrome in headless mode, and all the content of will be saved as a pdf file.

[~]$ google-chrome-stable --headless --disable-gpu --print-to-pdf [0122/131602.193881:INFO:headless_shell.cc(620)] Written to file output.pdf.

The output.pdf file got created which has all the content of

[~]$ ls -ltotal 61208drwxr-xr-x. 2 geekflare geekflare 6 Sep 25 11:49 Desktopdrwxr-xr-x. 2 geekflare geekflare 6 Sep 25 11:49 Documentsdrwxr-xr-x. 2 geekflare geekflare 6 Sep 25 11:49 Downloads-rw-rw-r--. 1 geekflare geekflare 180 Jan 22 13:05 google-chrome.repo-rw-------. 1 geekflare geekflare 146776 Jan 22 13:16 output.pdf

That was all about how to install Chrome on Ubuntu & CentOS and run it in the headless mode.