Chromium

From ArchWiki
Jump to navigation Jump to search

Chromium is an open-source graphical web browser based on the Blink rendering engine. It is the basis for the proprietary Google Chrome browser.

Google Chrome has following notable built-in features over Chromium:

See these two articles [2] [3] for an explanation of the differences between Chromium and Chrome.

See List of applications/Internet#Blink-based for other browsers based on Chromium.

Contents

Installation

There are several packages available to install Chromium with:

Google Chrome packages:

Configuration

Default applications

To set Chromium as the default browser and to change which applications Chromium launches when opening downloaded files, see default applications.

Certificates

Chromium uses Network Security Services for certificate management. Certificates can be managed in chrome://settings/certificates.

Force GPU acceleration

Warning: Disabling the rendering blacklist may cause unstable behavior, including crashes of the host. See the bug reports in chrome://gpu for details.

By default Chromium on Linux doesn't use any GPU acceleration. To force GPU acceleration, append the following flags to persistent configuration:

~/.config/chromium-flags.conf
--ignore-gpu-blocklist
--enable-gpu-rasterization
--enable-zero-copy

Additionally the flag --disable-gpu-driver-bug-workarounds may need to be passed to prevent GPU workaround from being used. Flags in chrome://gpu should state "Hardware accelerated" when configured and available.

--enable-native-gpu-memory-buffers is broken since mesa 20.1.1 [4]

Hardware video acceleration

Note:
  • There is no official support from Chromium or Arch Linux for this feature [5], but you may ask for help in the dedicated forum thread.
  • chromium from official repositories is compiled with VA-API support.
  • For proprietary NVIDIA support via VDPAU install chromium-vaapiAUR or get compiled version from Unofficial user repositories instead. Additionally installing libva-vdpau-driver-chromiumAUR or libva-vdpau-driver-vp9-gitAUR is required.
  • Wayland is not supported.
  • To use VA-API on XWayland, use the --use-gl=egl flag. Currently exhibits choppiness FS#67035.
  • To use VA-API on Xorg, use the --use-gl=desktop flag.
  • Starting in Chromium 86, there will be support for VA-API when using the ANGLE gl renderer. Use the --enable-accelerated-video-decode to enable it on an intel GPU.


Before trying VA-API support in Chromium, be sure to:

To check if it's working play a video which is using a codec supported by your VA-API driver (vainfo tells you which codecs are supported, but chrome will only support VP9 and h264):

  • With the Media Internals tab: Go to chrome://media-internals/ and check video_decoder field:
    • Hardware accelerated: MojoVideoDecoder, GpuVideoDecoder.
    • In-software decoding: VpxVideoDecoder, FFmpegVideoDecoder, Dav1dVideoDecoder.
  • With Chrome DevTools:
    • Open the DevTools by pressing Ctrl+Shift+I or on the Inspect button of the context (right-click) menu
    • (Version 84 and below only) Enable the media inspection experiment: Settings (F1 or menu) > Experiments > Media Element Inspection
    • Add the Media inspection tab: menu > More tools > Media
    • In the newly opened Media tab, look at the hardware decoder state of the video decoder

To reduce CPU usage while watching YouTube where VP8/VP9 hardware decoding is not available use the h264ify or enhanced-h264ify extension.

Making flags persistent

Note: The chromium-flags.conf file and the accompanying custom launcher script are specific to the Arch Linux chromium package. For google-chromeAUR, use chrome-flags.conf instead.

You can put your flags in a chromium-flags.conf file under $HOME/.config/ (or under $XDG_CONFIG_HOME if you have configured that environment variable).

No special syntax is used; flags are defined as if they were written in a terminal.

  • The arguments are split on whitespace and shell quoting rules apply, but no further parsing is performed.
  • In case of improper quoting anywhere in the file, a fatal error is raised.
  • Flags can be placed in separate lines for readability, but this is not required.
  • Lines starting with a hash symbol (#) are skipped.

Below is an example chromium-flags.conf file that defines the flags --start-maximized --incognito:

~/.config/chromium-flags.conf
# This line will be ignored.
--start-maximized
--incognito

PDF viewer plugin

Chromium and Google Chrome are bundled with the Chromium PDF Viewer plugin. If you don't want to use this plugin, check Open PDFs using a different application in chrome://settings/content/pdfDocuments.

Flash Player plugin

Note: Support for Flash Player will be completely removed from Chromium and Google Chrome in December 2020.

Flash Player is automatically installed when using Google Chrome.

To install it for Chromium, install the pepper-flash package.

Make sure Flash is allowed to run in chrome://settings/content/flash.

Tips and tricks

The following tips and tricks should work for both Chromium and Chrome unless explicitly stated.

Browsing experience

chrome:// URLs

A number of tweaks can be accessed via Chrome URLs. See chrome://chrome-urls for a complete list.

  • chrome://flags - access experimental features such as WebGL and rendering webpages with GPU, etc.
  • chrome://extensions - view, enable and disable the currently used Chromium extensions.
  • chrome://gpu - status of different GPU options.
  • chrome://sandbox - indicate sandbox status.
  • chrome://version - display version and switches used to invoke the active /usr/bin/chromium.

An automatically updated, complete listing of Chromium switches (command line parameters) is available here.

Chromium task manager

Shift+ESC can be used to bring up the browser task manager wherein memory, CPU, and network usage can be viewed.

Chromium overrides/overwrites Preferences file

If you enabled syncing with a Google Account, then Chromium will override any direct edits to the Preferences file found under ~/.config/chromium/Default/Preferences. To work around this, start Chromium with the --disable-sync-preferences switch:

$ chromium --disable-sync-preferences

If Chromium is started in the background when you login in to your desktop environment, make sure the command your desktop environment uses is:

$ chromium --disable-sync-preferences --no-startup-window

Search engines

Make sites like wiki.archlinux.org and wikipedia.org easily searchable by first executing a search on those pages, then going to Settings > Search and click the Manage search engines.. button. From there, "Edit" the Wikipedia entry and change its keyword to w (or some other shortcut you prefer). Now searching Wikipedia for "Arch Linux" from the address bar is done simply by entering "w arch linux".

Note: Google search is used automatically when typing something into the URL bar. A hard-coded keyword trigger is also available using the ? prefix.

Tmpfs

Cache in tmpfs
Note: Chromium stores its cache separate from its browser profile directory.

To limit Chromium from writing its cache to a physical disk, one can define an alternative location via the --disk-cache-dir flag:

$ chromium --disk-cache-dir="$XDG_RUNTIME_DIR/chromium-cache"

Cache should be considered temporary and will not be saved after a reboot or hard lock. Another option is to setup the space in /etc/fstab:

/etc/fstab
tmpfs	/home/username/.cache	tmpfs	noatime,nodev,nosuid,size=400M	0	0
Profile in tmpfs

Relocate the browser profile to a tmpfs filesystem, including /tmp, or /dev/shm for improvements in application response as the entire profile is now stored in RAM.

Use an active profile management tool such as profile-sync-daemon for maximal reliability and ease of use. It symlinks or bind mounts and syncs the browser profile directories to RAM. For more, see Profile-sync-daemon.

Launch a new browser instance

When you launch the browser, it first checks if another instance using the same data directory is already running. If there is one, the new window is associated with the old instance. If you want to launch an independent instance of the browser, you must specify separate directory using the --user-data-dir parameter:

$ chromium --user-data-dir=/path/to/some/directory
Note: The default location of the user data is ~/.config/chromium/.

Directly open *.torrent files and magnet links with a torrent client

By default, Chromium downloads *.torrent files directly and you need to click the notification from the bottom-left corner of the screen in order for the file to be opened with your default torrent client. This can be avoided with the following method:

  • Download a *.torrent file.
  • Right-click the notification displayed at the bottom-left corner of the screen.
  • Check the "Always Open Files of This Type" checkbox.

See xdg-open to change the default assocation.

Touch Scrolling on touchscreen devices

You may need to specify which touch device to use. Find your touchscreen device with xinput list then launch Chromium with the --touch-devices=x parameter, where "x" is the id of your device.

Note: If the device is designated as a slave pointer, using this may not work, use the master pointer's ID instead.

Reduce memory usage

By default, Chromium uses a separate OS process for each instance of a visited web site. [6] However, you can specify command-line switches when starting Chromium to modify this behaviour.

For example, to share one process for all instances of a website:

$ chromium --process-per-site

To use a single process model:

$ chromium --single-process
Warning: The single-process model is discouraged because it is unsafe and may contain bugs not present in other models.[7]

In addition, you can suspend or store inactive Tabs with extensions such as Tab Suspender, The Great Suspender(GPLv2) and OneTab.

User Agent

The User Agent can be arbitrarily modified at the start of Chromium's base instance via its --user-agent="[string]" parameter.

DOM Distiller

Chromium has a similar reader mode to Firefox. In this case it's called DOM Distiller, which is an open source project. It is disabled by default, but can be enabled using the chrome://flags/#enable-reader-mode flag, which you can also make persistent. Not only does DOM Distiller provide a better reading experience by distilling the content of the page, it also simplifies pages for print. Even though the latter checkbox option has been removed from the print dialog, you can still print the distilled page, which basically has the same effect.

After enabling the flag, you will find a new "Toggle reader mode" menu item and corresponding icon in the address bar when Chromium thinks the website you're visiting could do with some distilling.

Forcing specific GPU

In multi-GPU systems, Chromium automatically detects which GPU should be used for rendering (discrete or integrated). This works 99% of the time, except when it doesn't - if a unavailable GPU is picked (for example, discrete graphics on VFIO GPU passthrough-enabled systems), chrome://gpu will complain about not being able to initialize the GPU process. On the same page below Driver Information there'll be multiple GPUs shown (GPU0, GPU1, ...). There's no way to switch between them in a user-friendly way, but you can read the device/vendor IDs present there and configure Chromium to use a specific GPU with flags:

$ chromium --gpu-testing-vendor-id=0x8086 --gpu-testing-device-id=0x1912

...where 0x8086 and 0x1912 is replaced by the IDs of the GPU you want to use (as shown on the chrome://gpu page).

Import bookmarks from Firefox

To ease the transition, you can import bookmarks from Firefox into Chromium.

Navigate Chromium to chrome://settings/importData

If Firefox is already installed on your computer, you can directly import bookmarks as well as many other things from Firefox.

Make sure Mozilla Firefox is selected. Optionally, you can uncheck some unwanted items here. Click the Import and then Done. You're done with it.

Note: If you haven't created any bookmarks in Chromium yet, the bookmarks will show up in your bookmarks bar. If you already have bookmarks, the bookmarks will be in a new folder labeled "Imported From Firefox"

If you import bookmarks from another PC, you have to export bookmarks from Firefox first.

Ctrl + Shift + O > Import and Backup > Export Bookmarks To HTML in Firefox

The procedure is pretty much the same. You need to go to chrome://settings/importData. However, this time, in the From drop-down menu, select Bookmarks HTML File and click the Choose File button and upload the desired bookmark file.

Enabling native notifications

Go to chrome://flags#enable-native-notifications and select Enabled.

U2F authentication

In order for the U2F functionality to work with Chromium you need to install the libu2f-host library. This provides the udev rules required to enable access to the U2F key as a user. U2F keys are by default only accessible by root, and without these rules Chromium will give an error.

Dark mode

To enable dark mode (used in prefers-color-scheme in CSS, JavaScript, Settings and Dev-Tools) and enable the dark theme (normally used for incognito mode) append the following flag to persistent configuration:

~/.config/chromium-flags.conf
--force-dark-mode
--enable-features=WebUIDarkMode
Dark mode by system preference

This Chromium issue aims to bring dark mode based on GTK theme selection into Chromium.

In the future, all that will be required to properly use system preference, is setting Designs to GTK in chrome://settings/appearance.

Profile maintenance

Chromium uses SQLite databases to manage history and the like. Sqlite databases become fragmented over time and empty spaces appear all around. But, since there are no managing processes checking and optimizing the database, these factors eventually result in a performance hit. A good way to improve startup and some other bookmarks- and history-related tasks is to defragment and trim unused space from these databases.

profile-cleaner and browser-vacuumAUR in the AUR do just this.

Security

WebRTC

WebRTC is a communication protocol that relies on JavaScript that can leak one's actual IP address and hardware hash from behind a VPN. While some software may prevent the leaking scripts from running, it's probably a good idea to block this protocol directly as well, just to be safe. As of October 2016, there is no way to disable WebRTC on Chromium on desktop, there are extensions available to disable local IP address leak, one is this extension.

One can test WebRTC via this page.

Warning: Even though IP leak can be prevented, Chromium still sends your unique hash, and there is no way to prevent this. Read more on https://www.browserleaks.com/webrtc#webrtc-disable

SSL certificates

Chromium does not have an SSL certificate manager. It relies on the NSS Shared DB ~/.pki/nssdb. In order to add SSL certificates to the database, users will have to use the shell.

Adding CAcert certificates for self-signed certificates

Grab the CAcerts and create an nssdb, if one does not already exist. To do this, first install the nss package, then complete these steps:

$ mkdir -p $HOME/.pki/nssdb
$ cd $HOME/.pki/nssdb
$ certutil -N -d sql:.
$ curl -k -o "cacert-root.crt" "http://www.cacert.org/certs/root.crt"
$ curl -k -o "cacert-class3.crt" "http://www.cacert.org/certs/class3.crt"
$ certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "CAcert.org" -i cacert-root.crt 
$ certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "CAcert.org Class 3" -i cacert-class3.crt
Note: Users will need to create a password for the database, if it does not exist.

Now users may manually import a self-signed certificate.

Example 1: Using a shell script to isolate the certificate from TomatoUSB

Below is a simple script that will extract and add a certificate to the user's nssdb:

#!/bin/sh
#
# usage:  import-cert.sh remote.host.name [port]
#
REMHOST=$1
REMPORT=${2:-443}
exec 6>&1
exec > $REMHOST
echo | openssl s_client -connect ${REMHOST}:${REMPORT} 2>&1 |sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n "$REMHOST" -i $REMHOST 
exec 1>&6 6>&-

Syntax is advertised in the commented lines.

References:

Example 2: Using Firefox to isolate the certificate from TomatoUSB

The firefox browser can be used to save the certificate to a file for manual import into the database.

Using firefox:

  1. Browse to the target URL.
  2. Upon seeing the "This Connection is Untrusted" warning screen, click: I understand the Risks > Add Exception...
  3. Click: View > Details > Export and save the certificate to a temporary location (/tmp/easy.pem in this example).

Now import the certificate for use in Chromium:

$ certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "easy" -i /tmp/easy.pem
Note: Adjust the name to match that of the certificate. In the example above, "easy" is the name of the certificate.

Reference:

Canvas Fingerprinting

Canvas fingerprinting is a technique that allows websites to identify users by detecting differences when rendering to an HTML5 canvas. This information can be made inaccessible by using the --disable-reading-from-canvas flag.

To confirm this is working run this test and make sure "hash of canvas fingerprint" is reported as undetermined in the full results.

Note:
  • Some extensions require reading from canvas and may be broken by setting --disable-reading-from-canvas.
  • YouTube player does not work properly without canvas reading. [8][9]

Privacy extensions

See Browser extensions#Privacy.

Tip: Installing too many extensions might take up much space in the toolbar. Those extensions which you wouldn't interact with anyway (e.g. HTTPS Everywhere) can be hidden by right-clicking on the extension and choosing Hide in Chromium menu.

Do Not Track

To enable Do Not Track, visit chrome://settings, scroll down to Advanced and under Privacy and security, check Send a "Do Not Track" request with your browsing traffic.

Force a password store

Chromium uses a password store to store your passwords and the Chromium Safe Storage key, which is used to encrypt cookie values. [10]

By default Chromium auto-detects which password store to use, which can lead to you apparently losing your passwords and cookies when switching to another desktop environment or window manager.

You can force Chromium to use a specific password store by launching it with the --password-store flag with one of following the values [11][dead link 2020-03-28 ⓘ]:

  • gnome, uses Gnome Keyring
  • kwallet5, uses KDE Wallet
  • basic, saves the passwords and the cookies' encryption key as plain text in the file Login Data
  • detect, the default auto-detect behavior

For example, to force Chromium to use Gnome Keyring in another desktop or WM use --password-store=gnome, see #Making flags persistent for making it permanent.

When using a password store of another desktop environment you probably also want to unlock it automatically see: GNOME/Keyring#Using the keyring outside GNOME and KDE Wallet#Unlock KDE Wallet automatically on login.

Troubleshooting

Fonts

Note: Chromium does not fully integrate with fontconfig/GTK/Pango/X/etc. due to its sandbox. For more information, see the Linux Technical FAQ.

Font rendering issues in PDF plugin

To fix the font rendering in some PDFs one has to install the ttf-liberation package, otherwise the substituted font causes text to run into other text. This was reported on the chromium bug tracker by an Arch user.

Font rendering issues of UTF characters

UTF characters may render as boxes (e.g. simplified Chinese characters). Installing ttf-liberation or another Unicode font will allow for the characters to be rendered as expected.

Tab font size is too large

Chromium will use the GTK settings as described in GTK#Configuration. When configured, Chromium will use the gtk-font-name setting for tabs (which may mismatch window font size). To override these settings, use --force-device-scale-factor=1.0.

WebGL

There is the possibility that your graphics card has been blacklisted by Chromium. See #Force GPU acceleration.

If you are using Chromium with Bumblebee, WebGL might crash due to GPU sandboxing. In this case, you can disable GPU sandboxing with optirun chromium --disable-gpu-sandbox.

Visit chrome://gpu/ for debugging information about WebGL support.

Chromium can save incorrect data about your GPU in your user profile (e.g. if you use switch between an Nvidia card using Optimus and Intel, it will show the Nvidia card in chrome://gpu even when you're not using it or primusrun/optirun). Running using a different user directory, e.g, chromium --user-data-dir=$(mktemp -d) may solve this issue. For a persistent solution you can reset the GPU information by deleting ~/.config/chromium/Local\ State.

Incorrect HiDPI rendering

Chromium will automatically scale for a HiDPI display, however, this may cause an incorrect rendered GUI.

The flag --force-device-scale-factor=1 may be used to overrule the automatic scaling factor.

On Wayland, the chromium-ozoneAUR package will automatically scale based on the configured scale of each monitor.

Password prompt on every start with GNOME Keyring

See GNOME/Keyring#Passwords are not remembered.

Chromecasts in the network are not discovered

You will need to enable the Media Router Component Extension in chrome://flags/#load-media-router-component-extension.

Everything is syncing except for password

If synchronization is not working for password only (you can check it on chrome://sync-internals/) delete profile login data:

$ rm ~/.config/chromium/Default/Login\ Data*

See Google Chrome Help forum for details.

Losing cookies and passwords when switching between desktop environments

If you see the message Failed to decrypt token for service AccountId-* in the terminal when you start Chromium, it might try to use the wrong password storage backend. This might happen when you switch between Desktop Environments.

See #Force a password store.

Hang on startup when Google Sync enabled

Try launching Chrome with --password-store=basic or another appropriate password store.

See #Force a password store.

Chromium asks to be set as the default browser every time it starts

If you are using KDE and have once set Firefox as the default browser (by clicking the button inside Firefox), you might find Chromium asks to be set as the default browser every time it starts, even if you click the "set as default" button.

Chromium checks for this status by running xdg-settings check default-web-browser chromium.desktop. If the output is "no", it is not considering itself to be the default browser. The script xdg-settings checks for the following MIME associations and expect all of them to be chromium.desktop:

x-scheme-handler/http
x-scheme-handler/https
text/html

To fix it, go to System settings > Applications > Default applications > Web browser and choose Chromium. Then, set the MIME association for text/html:

$ xdg-mime default chromium.desktop text/html

Finally, update the MIME database:

$ update-mime-database ~/.local/share/mime

"This browser or app may not be secure" error logging in to Google

As of 2020.04.20 if you run chromium with --remote-debugging-port=9222 flag for web development, you can't log in to your Google account. Temporarily disable this flag to login and then you can enable it back.

Chromium stuck at 60fps when using a 144Hz + 60Hz monitor

There's a suitable workaround for this issue, append the following flags to persistent configuration:

~/.config/chromium-flags.conf
--use-gl=egl
--ignore-gpu-blocklist
--enable-gpu-rasterization

This should make Chromium run at 144fps when used on your 144hz display, assuming your compositor is refreshing at 144fps. Keep in mind it might be a little choppy FS#67035, but this is way better than it being stuck at 60fps.

See also