Tutorial

How to Set Up a Proxy on Pop!_OS

Set a proxy on Pop!_OS 24.04 (COSMIC) and 22.04: gsettings for Chrome and Firefox, apt's proxy file, /etc/environment, passwords, SOCKS5, and turning it off.

HProxy Team··Updated October 4, 2026·8 min read
HProxy.Tutorial

Free proxies won't hold up here.

Shared datacenter IPs get flagged and dropped fast. When it has to hold, gaming, streaming, accounts, you need mobile and residential IPs that read as a real device, from $0.44/GB, pay as you go.

See plans & pricing→

Pop!_OS 24.04 replaced GNOME with System76's own COSMIC desktop, and COSMIC Settings has no proxy screen. Two issues asking for one have been open on COSMIC Settings since August 2025 and March 2026. The proxy still works on Pop!_OS, but each part of the system reads it from a different place, and the two browsers read different places too.

We did not install Pop!_OS for this page. Every statement comes from code, read on 4 October 2026: COSMIC Settings' network pages, Chromium's and Firefox's Linux proxy code, GNOME's proxy settings schema, the build files of the Pop!_OS 24.04 image, the COSMIC login screen's login rules, and apt 2.7.14, the apt in Pop!_OS 24.04.

Part of Pop!_OSWhere it takes the proxy fromSet it with
Chrome and ChromiumGNOME's proxy keys onlygsettings (Step 1)
FirefoxProxy variables first, then GNOME's keysgsettings (Step 1)
aptIts own config file/etc/apt/apt.conf.d/95proxy (Step 2)
Terminal programsProxy variables/etc/environment (Step 3)
COSMIC SettingsNothing
Who reads what on Pop!_OS 24.04

GNOME proxy keys (gsettings)

  • Chrome and Chromium

    the only place they look on COSMIC

  • Firefox

    when no proxy variables are set

Files

  • apt

    /etc/apt/apt.conf.d/

  • Terminals and Firefox

    /etc/environment, at login

Source: Chromium proxy_config_service_linux.cc, Firefox nsUnixSystemProxySettings.cpp, apt 2.7.14, cosmic-greeter's PAM file

What you need before you start

One proxy line, four parts

198.51.100.7Host:8080Port:hp_ir4k2Username:9fa2c1Password
  • 198.51.100.7:8080:hp_ir4k2:9fa2c1host:port:user:passMost proxy tools and checkers
  • hp_ir4k2:9fa2c1@198.51.100.7:8080user:pass@host:portcurl, requests, most HTTP clients
  • http://hp_ir4k2:9fa2c1@198.51.100.7:8080http://user:pass@host:portAnything taking a full proxy URL

gsettings takes host and port separately; apt and the variables take all four as http://user:pass@host:port. Values shown are examples.

  • A proxy address as host:port, plus a user name and password if the proxy needs a login. If your provider sent the parts in another order, the proxy format guide sorts them out.
  • A terminal (COSMIC Terminal is fine) and sudo rights for Steps 2 and 3.
  • For a first test, any HTTP entry from our free proxy list will do. Free entries come and go, so test one first; the check further down shows how.
  • Our free proxy setup generator writes the address with the password encoded where it has to be.
Our free proxy list filtered to HTTP on 2 October 2026: 8,276 entries, each row with its address and port, country, anonymity, uptime, speed and a Copy button.
Captured on 2 October 2026 at hproxy.com/free-proxy-list/http. The address and port of a row are the host:port the steps below ask for.

Why COSMIC Settings does not help

COSMIC Settings' network pages contain no proxy option at all (1). For anything advanced they open nm-connection-editor, NetworkManager's connection editor (2). Its Proxy tab offers only "None" or "Automatic" with a PAC address; there is no field for a host and port, and neither Chrome nor Firefox reads that tab.

What Chrome does read is the deciding detail. Chrome recognises COSMIC and takes the proxy from GNOME's settings, org.gnome.system.proxy (3), which every Pop!_OS desktop carries although no screen shows them. While their mode is none, the default, Chrome treats that as "no proxy" and does not check the http_proxy variables at all (4). That is why setting only the variables, as most Linux guides say, leaves Chrome going direct.

Firefox, on its default "Use system proxy settings", looks the other way round: the proxy variables first, GNOME's settings second (5).

Terminal on our workstation, 4 October 2026: COSMIC Settings' network pages contain the word proxy 0 times and open nm-connection-editor; Chromium sends COSMIC to its GNOME settings reader and skips the variables when the mode is none; Firefox reads the variables before GNOME's settings; Pop!_OS 24.04 fetches packages from http://apt.pop-os.org.
(1) No proxy option in COSMIC Settings' network pages. (2) Advanced settings open nm-connection-editor. (3) Chrome reads GNOME's proxy keys on COSMIC. (4) With mode none, Chrome does not check the variables. (5) Firefox checks the variables first. (6) Pop's mirrors are plain http.

Step 1: the browsers, with gsettings

Run these in a terminal as your normal user, not with sudo, because the keys belong to your desktop account:

gsettings set org.gnome.system.proxy mode 'manual'
gsettings set org.gnome.system.proxy.http host '198.51.100.7'
gsettings set org.gnome.system.proxy.http port 8080
gsettings set org.gnome.system.proxy.https host '198.51.100.7'
gsettings set org.gnome.system.proxy.https port 8080

Set the https host too. Chrome uses GNOME's keys per kind of site: with only the http host filled in, every https site goes direct. Chrome watches the keys and picks up a change at once.

The key ignore-hosts holds the exceptions and starts as ['localhost', '127.0.0.0/8', '::1']. To add your own:

gsettings set org.gnome.system.proxy ignore-hosts "['localhost', '127.0.0.0/8', '::1', '*.example.com']"

A login. Do not put the user name and password into the host key. Chrome ignores a login stored in GNOME's keys and asks for it in a window when the proxy requests one, and so does Firefox; type them there.

SOCKS5. Set only the SOCKS keys and leave the http and https hosts empty:

gsettings set org.gnome.system.proxy mode 'manual'
gsettings set org.gnome.system.proxy.socks host '198.51.100.7'
gsettings set org.gnome.system.proxy.socks port 1080

Chrome uses the SOCKS host for everything only when it is the only one set, and treats it as SOCKS5. HTTP vs SOCKS5 explains the difference.

Firefox can also be set on its own, in Settings, Network Settings, Manual proxy configuration; our Firefox guide walks through it.

Step 2: apt

apt reads neither GNOME's keys nor, under sudo, your variables. Give it its own file:

sudo nano /etc/apt/apt.conf.d/95proxy
Acquire::http::Proxy "http://198.51.100.7:8080";
Acquire::https::Proxy "http://198.51.100.7:8080";

Pop!_OS 24.04 installs with plain http://apt.pop-os.org/release and http://apt.pop-os.org/ubuntu (6), so the http line is the one apt uses for Pop's own packages; the https line covers added repositories such as a browser's. Keep http:// in the https line: it names the kind of proxy, not the sites. An https:// proxy address makes apt open an encrypted connection to the proxy itself, which an ordinary proxy cannot answer.

With a login: "http://hp_ir4k2:9fa2c1@198.51.100.7:8080". For a SOCKS5 proxy, apt accepts "socks5h://198.51.100.7:1080" in both lines. apt reads the file on its next run:

sudo apt update

Step 3: terminal programs

curl, wget, git and most command-line tools read the proxy variables. The COSMIC login screen reads /etc/environment at every login, so put them there:

sudo nano /etc/environment
http_proxy="http://198.51.100.7:8080"
https_proxy="http://198.51.100.7:8080"
no_proxy="localhost,127.0.0.1"
HTTP_PROXY="http://198.51.100.7:8080"
HTTPS_PROXY="http://198.51.100.7:8080"
NO_PROXY="localhost,127.0.0.1"

No export in this file: it holds plain NAME="value" lines. Log out and back in. Once these variables exist, Firefox takes its proxy from them instead of from GNOME's keys, so keep the two the same. sudo resets the environment, which is why apt has its own file in Step 2.

A password with special characters

In apt's file and in /etc/environment the login sits inside the address, so characters that mean something in an address have to be percent-encoded:

In the passwordWrite it as
@%40
: (in the user name)%3A
/%2F
%%25
"%22

apt decodes these back before it logs in, and so do curl and wget, so the proxy receives the password you were given. The browsers need none of this: they ask for the login in a window. The proxy format guide has the full list.

Pop!_OS 22.04

Pop!_OS 22.04 still runs GNOME, whose Settings has Network, Network Proxy. That screen writes the same org.gnome.system.proxy keys as Step 1, so either way works there. Steps 2 and 3 are the same on both versions.

Check that it worked

gsettings get org.gnome.system.proxy mode
env | grep -i _proxy
sudo apt update
curl -s https://www.cloudflare.com/cdn-cgi/trace | grep ^ip=

The first should say 'manual', the second shows the terminal's variables, the third proves apt reaches its mirrors, and the last shows the address the internet sees, which should be the proxy's. In Chrome or Firefox, open our IP lookup: it shows the address the browser goes out with and who owns it.

These come up in the pages and answers that rank for Pop!_OS, Ubuntu and apt proxy searches:

  • "Open Settings, Network, Network Proxy." That is GNOME; COSMIC on Pop!_OS 24.04 has no such screen.
  • Only /etc/environment for the whole desktop. Chrome on COSMIC does not read the variables while GNOME's proxy mode is none.
  • https:// in front of the proxy address for apt. apt then talks encrypted to the proxy itself, which an ordinary proxy cannot answer.
  • A raw @ in the password. It also separates the login from the host; write %40.
  • "The user name and password are your computer's login." They are the proxy's.
  • A command in /etc/environment. The file holds NAME="value" lines only.

Turning it off again

gsettings set org.gnome.system.proxy mode 'none'
sudo rm /etc/apt/apt.conf.d/95proxy

Remove the six proxy lines from /etc/environment, then log out and back in. To clear every GNOME proxy key at once, including old hosts that a program might still pick up: gsettings reset-recursively org.gnome.system.proxy.

How we wrote this

We did not install Pop!_OS for this page. We read the code that decides where the proxy comes from, on 4 October 2026: COSMIC Settings' network pages; Chromium's Linux proxy code and Firefox's Unix proxy code; GNOME's org.gnome.system.proxy schema; the Pop!_OS 24.04 image build (pop-os/iso) and desktop package list (pop-os/desktop); the COSMIC login screen's PAM file; apt 2.7.14's http method; and NetworkManager's proxy setting. The picture above is our own terminal reading of those sources.

Real problems come from Pop!_OS's own issue trackers: the missing proxy page in COSMIC Settings (two open issues), a release upgrade that bypassed apt's proxy, and the old Pop!_Shop failing after a proxy was set.

Limits: no command on this page ran on Pop!_OS. Whether programs started from the COSMIC dock also inherit /etc/environment was not traced, which is why the browsers are set through gsettings, which does not depend on it. Flatpak apps and the COSMIC Store were not read. COSMIC Settings may gain a proxy page; we will check again by April 2027.

Sources

All read on 4 October 2026.

  • System76 cosmic-settings: cosmic-settings/src/pages/networking (mod.rs, wired.rs, wifi.rs); issues 1311 and 1908 (github.com/pop-os/cosmic-settings).
  • Chromium: net/proxy_resolution/proxy_config_service_linux.cc, base/nix/xdg_util.cc (chromium.googlesource.com).
  • Firefox: toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp (github.com/mozilla-firefox/firefox).
  • GNOME gsettings-desktop-schemas: org.gnome.system.proxy.gschema.xml.in.
  • System76: pop-os/iso (config/pop-os/24.04.mk, mk/ubuntu.mk, mk/chroot.mk), pop-os/desktop (debian/control on master_noble), pop-os/cosmic-greeter (debian/cosmic-greeter.pam); issues pop-os/upgrade 134, pop-os/shop 304, pop-os/pop 2041.
  • apt 2.7.14: methods/http.cc.
  • NetworkManager reference manual: the proxy setting.
  • Wikipedia: Pop!_OS (release dates of 22.04 and 24.04).
  • Our terminal reading of COSMIC Settings, Chromium, Firefox and the Pop!_OS image build, 4 October 2026.

Frequently asked questions

Where are the proxy settings on Pop!_OS 24.04?
There are none in COSMIC Settings. Its network pages have no proxy option, and the Proxy tab of the advanced connection editor only takes a PAC address. Set the proxy with gsettings for the browsers, in an apt file for packages, and in /etc/environment for terminals.
Why does Chrome ignore http_proxy on Pop!_OS?
On COSMIC, Chrome reads GNOME's proxy settings (org.gnome.system.proxy) and, while their mode is none, the default, it goes direct without looking at the variables. Set mode to manual and the http and https hosts with gsettings.
How do I set a proxy for Chrome and Firefox on Pop!_OS?
In a terminal, as your own user: gsettings set org.gnome.system.proxy mode 'manual', then set host and port under org.gnome.system.proxy.http and org.gnome.system.proxy.https. Chrome reads these keys; Firefox reads them when no proxy variables are set.
How do I set a proxy for apt on Pop!_OS?
Create /etc/apt/apt.conf.d/95proxy with Acquire::http::Proxy "http://host:port"; and the same line for Acquire::https::Proxy. Pop's own mirrors are http://apt.pop-os.org, so the http line is the one apt uses for them.
Why does my proxy password not work in Chrome on Pop!_OS?
Chrome ignores a user name and password stored in GNOME's proxy settings and asks for them in a window when the proxy requests a login. Enter them there; do not put them into the host key.
Can I use a SOCKS5 proxy on Pop!_OS?
Yes. For the browsers, set only org.gnome.system.proxy.socks host and port and leave the http and https hosts empty: Chrome uses the SOCKS host for everything only when it is the only one set. For apt, write socks5h://host:port in the Acquire lines.
Is the proxy setting the same on Pop!_OS 22.04?
22.04 uses GNOME, whose Settings has Network, Network Proxy. That screen writes the same GNOME keys the gsettings commands on this page write, so either way works there.
How do I turn the proxy off on Pop!_OS?
Run gsettings set org.gnome.system.proxy mode 'none', delete /etc/apt/apt.conf.d/95proxy, and remove the proxy lines from /etc/environment, then log out and back in.

Proxies that don't die mid-job

Residential, ISP, datacenter and mobile, verified by the same engine that runs tens of millions of checks. They read as a real device and hold up under load. Pay as you go, and your balance never expires. $0.44/GB is the 2,000 GB+ rate; a single gigabyte is $0.50/GB, with no minimum order.

129M+ proxy checks run · 100+ countries · HTTP / HTTPS / SOCKS · re-checked every few minutes · no signup

HProxy.

Honest guides and comparisons on proxies, scraping and staying unblocked, from the team that runs the network.

RSS feed