Using Firefox/Advanced

about:config
In Gecko-based browsers, such as Firefox, SeaMonkey, and their derivatives, about:config is a powerful way to tweak preferences in ways that are not normally accessible through the Preferences page (earlier, the Options window).

As in the Firfeox user interface, preferences in about:config apply only to the active browser profile. Different user profiles can have different preferences; though most settings are the same across profiles.

Type about:config into the Firefox address bar, press Enter/Return, and you might first be shown a page to warn you, that these are advanced settings, and changing some of them might break how Firefox works. There is a 'Continue' button and a checkbox not to show the warning page again. After clicking the 'Continue' button, you are then taken to about:config settings.

At the top is is a search bar to allow finding the right preference by filtering the list. Copying and pasting a preference name into the search bar makes it easy to find the right one.

A user is presented with a table-based list of preferences, showing their name, status, type, and value in their respective columns. The list can be sorted in ascending and descending order by clicking on each column's header. One can move around in the list by single-clicking a setting to move cursor focus into the list, and then using the keyboard navigation keys (Up, Down; PgUp, PgDn; Home, End).

Most about:config preferences are built-in and displayed. Some preferences are hidden, and must be added by the user. Other preferences are created by an installed extension, such as NoScript.

A preference status can be one of the following:
 * default
 * modified — if changed from their default value, the entire line is shown in boldface
 * locked — shown in italics. This status is rare and is meant to prevent a preference from being trivially changed. A setting is typically locked by a Linux distribution (to prevent telemetry, for example) or by a system administrator (usually in a corporate environment).

A preference type can be one of the following:
 * a boolean — a true/false setting;
 * an integer — full numbers from 0 to something large. The numbered values can and do have different units;
 * a string — This can be any form of text or numbers, though each string of text usually has its own syntax, as required by each preference.

Changes can be made by double-clicking one of the available options, or selecting them and pressing the Return/Enter key.

That way, via double-click or Enter, the booleans are toggled, as they have only a single value of true or false, and are thus the simplest to change. Other preference types are modified, in which case an input box appears for numbers (integers) or text (strings).

Note: In some preference cases, a string type preference can contain or may require a simple integer number instead of text. Therefore, when changing a respective preference's value, pay attention to its type and documentation.

When right-clicking a preference, a context menu appears with the following commands:
 * Modify/Toggle;
 * Copy — copy the preference name and value separated by a semicolon. It is pasted as
 * Copy Name — copies only the preference name for easy pasting and searching
 * Copy Value — copies only the preference value. Very useful, if the value is a long string of text and extends well outside the display area.
 * New &gt; — Create a new preference that is not listed: a string, integer, or a boolean.
 * Reset — resets the preference value to the default pre-set by the browser or an installed extension. This is useful, should anything go wrong.

A more complete list of about:config settings can be found here, with descriptions and which values the preference will take (where applicable).

Example preferences

 * browser.block.target_new_window &mdash; if set to true, links that normally force a new window to open will open in the current window instead.


 * browser.xul.error_pages.enabled &mdash; if set to true, Firefox displays an error page similar to IE instead of a message box if loading a page fails. This is an older and deprecated preference, as Firefox now uses error or message pages.


 * layout.frames.force_resizability &mdash; if set to true, allows the user to resize frames on any web site that uses them.

Optimise resource usage
Setting some of the settings one or another way is either imperative or recommended for memory-limited devices, such as those with 1 GB or less RAM, especially in a liveCD condition, as liveCD environments might not be able to use swap — specifically with computers that have Windows, where a Linux swap partition does not exist on the hard drive.

Computers with 1 GB RAM or less must have that setting on to reduce memory and resource consumption.

Devices with 1.5–2 GB RAM in a liveCD setting are able to handle greater resource requirements, but not by too much. At this point, the value that is imperative for 1 GB RAM, is only recommended for computers and devices with 2 GB RAM memory.

Disable media
All media functionality is disabled: this includes playback, media capture (audio and video recording), and screen sharing.

Optional, or not required, if computer RAM memory is 2 Gb or greater.

Speed up network access
The following changes can be made to speed up network access.

Usually, the preferences related to network speeds do not need to be changed, unless you know exactly what you want to do with these settings.

Changing these preferences may speed up browsing, but in most cases, the difference is negligible. Some of these settings have also been deprecated in modern Firefox versions.

General browsing speed can be improved through extensions by using an adblocker (such as Adblock Plus or uBlock Origin) and/or a scriptblocker, such as NoScript. As they variously block content, page rendering speeds improve, and network requests to advertisements and trackers are also reduced.

Pipelining
Normally, the browser will make one request to a web page at a time. When you enable pipelining, it will make several requests at a time, which usually speeds up page loading. Make these changes to enable pipelining:

Set "network.http.pipelining" to "true"

Set "network.http.proxy.pipelining" to "true"

[Tip: If your browser is set to connect to an optional http proxy, you can leave "network.http.pipelining" as "false", then add the domains of websites that do not work with pipelining (like images.google.com) to the proxy exclude list.]

Set "network.http.pipelining.maxrequests" to 8. &mdash; This means, that Firefox will make up to 8 requests at once rather than the default 4. This is only an advantage if you have a fast and reliable internet connection.

Maximum number of connections
For broadband users:

Set "network.http.max-connections-per-server" to 14. Many guides recommend setting this figure to 100, but this can have undesirable effects upon webservers.

Set "network.http.max-connections" to 48

Rendering
Right-click anywhere and select New-> Integer. Name it "nglayout.initialpaint.delay" and set its value to "0".

This preference sets the amount of time the browser waits before it acts on information it receives, but it will increase the total time taken to render the page. While this option is more suitable for a faster computer, setting the value to something low, or "0" works better with slow connections.

The default vaue is "250". Try a value of "100", if "0" causes problems.

Introduction
A user agent string (UA string) is a string of text with a specific syntax identifying the user agent &mdash; usually that of a web browser &mdash; which is sent to a website or domain when making a request to download a page or fetch information. Some other user agents are screen readers for blind people, download managers, webcrawlers, indexers, and archivers, each of which send their own unique UA string.

Some sites require specific versions of browser, or a specific browser and operating system combination in order for a web application to offer specific features, or to function at all.

For most sites, user agent strings do not require modification. Such modification is also called user agent spoofing.

There are use cases, where user agent strings do need to be more specific:
 * A particular site requires a specific browser;
 * A user wants their web client to identify as a mobile, tablet, or desktop browser for certain domains and use cases;
 * A user has a legacy browser that needs to identify itself as a newer one for certain sites;
 * A user wants their browser to have the most generic user agent for privacy purposes;
 * Conversely, some people want a very specific user agent string in order to demonstrate to sites the existence of their favourite browser, or a particular OS, or that a certain operating system version is still in use.

The latter example most often applies to people who might use a Firefox derivative (such as GNU IceCat or WaterFox), or who might use older versions of Firefox, or if their operating system is Linux, or if they use a legacy version of Android.

The reason for featuring a specific UA string is to nudge site developers to take note of which configurations visit their site, which browsers and operating systems they should keep testing against, and which they ought to keep supporting.

Thus, promoting a non-generic UA string causes these users to also have a dilemma with regard to having a privacy trade-off, because a very specific user agent string is very unique, and therefore much easier to identify for sites that use browser fingerprinting.

Comparably, the default web browser in many versions of Android even sends the device make and model in their user agent string, while the UA string of Firefox for Android typically contains less information, and has also in past cases been less accurate.

Nevertheles, desktop Firefox alone has become a minority browser &mdash; with its usage share greatly overshadowed by Google Chrome, and Firefox for Android being an even greater minority on phones and tablets. Each Firefox version is therefore more unique, and each version of a Firefox derivative even more unique.

It should be noted, though, that if they wish to do so, advanced users are usually aware of how to properly anonymise the browsing traffic that runs from their computer through the wider Internet.


 * To find out what kind of information web sites can collect about the browser you use and the device you're on, visit the Electronic Frontier Foundation's Panopticlick site at https://panopticlick.eff.org

Modifying
In desktop Firefox, changing the user agent string in about:config preferences does not work, while it works admirably in Firefox for Android.

To change the user agent string in desktop Firefox, one must use extensions.


 * UAControl is a legacy XUL extension for Firefox 56.0 and earlier. It supports user-agent spoofing for specific domains, leaving the default user agent string for all other sites, though it does not have a pre-set list of UA strings (these can be picked up from the web). UAControl requires the User-Agent JS Fixer add-on to work.
 * Custom UserAgent String is a WebExtension that is similarly versatile in employing per-domain user-agent spoofing, but has a clunky user interface. It's available for Firefox 48.0 and greater.

Editing the userChrome.css File
userChrome.css is a file that allows you to change the appearance of Firefox with CSS rules. The actual browser window (i.e., not the webpage, but everything else) is called the "chrome". The file userChrome.css overrides default settings to allow for more customization.

userChrome.css is not created by default. It should be created in your profile folder, which can be found in the following places:

Windows: %appdata%\Roaming\Mozilla\Firefox\Profiles\\ Linux: ~/.Ajay/firefox// Mac OS X: ~/Library/Ajay/Firefox/Profiles// or ~/Library/Application Support/Firefox/Profiles//

In all cases, the profile is randomly named, with 8 characters followed by .default. Inside that folder is another named "chrome". Inside the chrome folder is where userChrome.css needs to be created.

Editing the userContent.css File
The UserContent.css file allows a user to change the general appearance of web pages. This requires knowledge of Cascading Style Sheets (CSS).

Changing the web pages' appearance through this file can be relatively cumbersome, and is limited to CSS only. Using the GreaseMonkey or Stylish extensions is recommended, as each provides a user interface to doing the same things, and are therefore easier to use.

The GreaseMonkey extension is more advanced, as it allows adding JavaScript to downloaded web pages to make a webpage or site function better. With some extra effort, this also includes adorning pages with CSS.

Comparatively, Stylish allows adding only CSS-based modifications to downloaded pages, and unlike GreaseMonkey, Stylish also runs on all versions of Firefox for Android.

Note, that while these extensions only change the appearance of web pages downloaded into the browser; the extensions do not change the pages' and sites' appearance on the web server.

Tips

 * Allowing extension downloads from mozilla.org instead of www.mozilla.org will match all subdomains of mozilla.org, just as blocking cookies from doubleclick.net instead of www.doubleclick.net will allow blocking of all doubleclick.net subdomains. Allowing "www.mozilla.org" would not allow "addons.mozilla.org". However, as a security measure, when whitelisting sites for extensions, the most specific domain available should be used (i.e., addons.mozilla.org instead of mozilla.org) to prevent potentially malicious installs from other subdomains on a site.


 * To get Firefox on a computer without an internet connection, or where internet downloads are blocked, one can download the installer as normal from another computer (usually you can do this at a public library), and then put the *.exe file on some removable media and transfer it to the first computer. Another option is to download Firefox portable on a USB stick or memory card, and run the portable Firefox off external storage.