Ubuntu Desktop users (any recent release – 22.04 LTS, 23.10, 24.04, 25.04, etc.) who want to replace the whole icon set, custom‑tweak a single application’s icon, or give a folder its own picture.
Prerequisites: A working internet connection, basic comfort with the terminal, and a user account with sudo rights.
1. Understanding Ubuntu’s Icon System
| Layer | Where it lives | What it does |
|---|---|---|
| System icon theme | /usr/share/icons/(system) or ~/.local/share/icons/(user) |
Provides a complete set of icons for all applications, system UI elements, panel icons, etc. |
| Application launchers | *.desktop files in /usr/share/applications/(system) or ~/.local/share/applications/(user) |
Point to an icon via the Icon= key.The value can be a theme name (looked up in the current theme) or an absolute file path. |
| Folder icons | Stored as a metadata attribute in the folder itself (Nautilus) |
Not tied to a theme; you can set a custom picture per‑folder via the file manager. |
| User Themes extension | ~/.local/share/gnome- |
Allows GNOME Shell itself (the top bar, overview) to use a custom shell theme – necessary for icon themes to affect the shell UI. |
Why GNOME Tweaks?
GNOME Tweaks is the graphical front‑end that talks to the underlying GSettings keys (org.gnome.desktop.interface icon-theme). It’s the safest way to switch themes without editing config files manually.
2. Changing the Entire Icon Theme (System‑Wide)
2.1 Download a New Icon Theme
- Visit a reputable source, e.g. gnome‑look.org.
- Search for “icon theme”, filter by GNOME or Ubuntu compatibility, and pick a theme you like (e.g., Papirus, Tela, Sweet, Numix, Yaru‑colors).
- Click Download – you’ll get a
*.tar.gz(or*.zip) archive.
Tip: If you want a theme that matches your current GTK/Qt theme, look for “matching” tags on the download page (e.g., “Papirus‑Dark” pairs nicely with a dark GTK theme).
2.2 Install GNOME Tweaks & the “User Themes” Extension
Open a terminal (Ctrl + Alt + T) and run:
sudo apt update
sudo apt install gnome-tweaks gnome-shell-extension-manager
gnome-tweaks→ the Tweaks UI.gnome-shell-extension-manager→ a handy app to enable/disable shell extensions (including User Themes).
2.3 Enable the “User Themes” Extension
- Press Super (Windows key) → type Extensions → open the Extensions app.
- In the list, locate User Themes and install it.
- Toggle it ON.
What it does: It tells GNOME Shell that it may load a custom shell theme placed in ~/.local/share/themes/. This is a prerequisite for any icon theme to affect the shell (top bar, overview icons).
If you don’t see “User Themes”:
- Open Extensions → click the three‑dot menu → Browse Online → search for User Themes and install directly.
- After installation, enable it again.
2.3 Place the Icon Files
Move the extracted theme folder as‑is into that directory.
The folder name must be the theme’s name (e.g., Papirus, Papirus-Dark).
mv your-icon-theme-folder ~/.local/share/icons/
After the move you should have a structure like:
~/.local/share/icons/
└── Papirus/
├── 16x16/
├── 24x24/
├── 48x48/
├── scalable/
└── index.theme
Create (if necessary) the user icons directory:
mkdir -p ~/.local/share/icons
Extract the archive you downloaded:
cd ~/Downloads
tar -xf your-icon-theme.tar.gz # or unzip *.zip
System‑wide installation (optional):
If you prefer all users on the machine to see the theme, copy the folder to /usr/share/icons/ instead (requires sudo).
sudo cp -r your-icon-theme-folder /usr/share/icons/
2.4 Activate the Theme with Tweaks
- Press Super → type Tweaks → open Tweaks.
- In the left pane, click Appearance.
- Under Icons, you’ll see a drop‑down list populated with every theme found in
~/.local/share/icons/and/usr/share/icons/. - Choose your newly installed theme.
The change is instant for most panels, menus, and application launchers.
If the theme does not appear in the list:
- Verify the folder name matches the one inside
index.theme(Name=line). - Make sure the directory permissions are readable:
chmod -R 755 ~/.local/share/icons/your-theme. - Run
gtk-update-icon-cache(see troubleshooting below).
2.5 Optional – Apply the Theme For All Users
System‑wide icon themes are stored under /usr/share/icons/.
If you want every user to get the new theme automatically, edit the default GSettings:
sudo -u root dbus-launch gsettings set org.gnome.desktop.interface icon-theme "YourThemeName"
Or create a system‑wide dconf profile:
sudo mkdir -p /etc/dconf/profile
echo "user-db:user" | sudo tee /etc/dconf/profile/user
echo "system-db:local" | sudo tee -a /etc/dconf/profile/user
sudo mkdir -p /etc/dconf/db/local.d
sudo bash -c 'cat > /etc/dconf/db/local.d/00_icon_theme <<EOF
[org/gnome/desktop/interface]
icon-theme="YourThemeName"
EOF'
sudo dconf update
Now, any new user who logs in will automatically use the theme.
2.6 Troubleshooting Common Problems
| Symptom | Likely cause | Fix |
|---|---|---|
| Icon theme not listed in Tweaks |
Theme not placed in a recognized directory or missing index.theme. |
Verify the path: contains index.theme.Run gtk-update-icon-cache. |
| Shell (top bar) still shows old icons |
“User Themes” extension not enabled. |
Open Extensions → enable User Themes; restart GNOME Shell ( Alt+F2, type r, press Enter – works on Xorg; on Wayland you must log out/in). |
| Some apps keep old icons | Their .desktop file uses a theme name that exists in both the old and new theme, and the new theme lacks that particular icon. |
Either choose a theme that includes the missing icon or replace the individual app’s icon (see §3). |
| Icons look blurry or oversized | Icon size/scale mismatch (e.g., 48 px PNG used for a 16 px slot). |
Most modern themes ship scalable SVGs for any size; if you only have PNGs, ensure they exist in the sub‑folders 16x16, 24x24, 32x32, 48x48,256x256, etc. |
| Changes disappear after a reboot |
You edited the system .desktop file directly (which gets overwritten on package upgrades). |
Always copy the file to ~/.local/share/applications/ before editing. That local copy overrides the system one. |
3. Changing a Single Application’s Icon
Changing just one launcher is useful when a theme’s generic icon doesn’t suit you (e.g., you want a custom logo for your favorite text editor, or you want to give a Snap its own branding).
3.1 Locate the .desktop File
| Source | Typical location | Example command |
|---|---|---|
| Deb/apt packages | /usr/share/applications/ |
ls /usr/share/ |
| Snap packages | /var/lib/snapd/ |
ls /var/lib/snapd/ |
| Flatpak apps | ~/.local/share/flatpak/(per‑user) or /var/lib/flatpak/ (system) |
ls ~/.local/share/ flatpak/exports/share/ applications |
| AppImage (portable) | Usually a desktop file lives next to the AppImage (or you create one manually). |
N/A – you’ll create it yourself. |
Find the exact filename (case‑sensitive). Example for Firefox:
ls /usr/share/applications/firefox*.desktop
# → /usr/share/applications/firefox.desktop
3.2 Prepare Your Replacement Icon
- Format – PNG (any size) or SVG (scalable). SVG is preferred because it scales cleanly for all UI contexts.
Check the path (absolute, no spaces, no tilde expansion in the .desktop file):
echo "$HOME/.local/share/icons/custom/my-firefox-icon.svg"
Naming – you can keep any name, but it’s convenient to put it in your personal icons folder:
mkdir -p ~/.local/share/icons/custom
cp ~/Downloads/my-firefox-icon.svg ~/.local/share/icons/custom/
3.3 Edit (or Copy‑Edit) the .desktop File
Never edit files directly in /usr/share/applications/ – they are owned by the package manager and will be overwritten on updates. Instead, copy them to your local directory, edit them there, and GNOME will prefer the local copy.
# 1. Copy the original .desktop file to your personal folder
cp /usr/share/applications/firefox.desktop ~/.local/share/applications/
# 2. Open it with your favourite editor (gedit, nano, VS Code, etc.)
gedit ~/.local/share/applications/firefox.desktop
Inside the file, locate the line that starts with Icon=. It will look something like:
Icon=firefox
Replace it with the full absolute path to your custom image:
Icon=/home/your_username/.local/share/icons/custom/my-firefox-icon.svg
Important: Do not put quotes around the path, and do not add a file extension if you use a theme name. When you give a full path, the extension must be part of the path (e.g., .png or .svg).
Save the file and close the editor.
3.4 Refresh the Icon Cache
For most launchers the change becomes visible immediately, but occasionally the icon cache needs a nudge:
# If you use a PNG, you can also run:
gtk-update-icon-cache ~/.local/share/icons
# The most reliable method is to log out and back in,
# or simply restart the GNOME Shell (Xorg only):
Alt+F2 → type `r` → Enter
Now the new icon should appear in the Dash, Activities Overview, and any other place the launcher is shown.
3.5 Special Cases
| Situation | How to edit |
|---|---|
Snap app (e.g., snap-store) |
.desktop lives under /var/lib/snapd/desktop/applications/. Copy it first: cp /var/lib/snapd/desktop/applications/snap-store_snap.desktop ~/.local/share/applications/ |
Flatpak app (e.g., org.gimp.GIMP) |
.desktop lives in ~/.local/share/flatpak/exports/share/applications/ (per‑user) or /var/lib/flatpak/exports/share/applications/ (system). Copy to ~/.local/share/applications/ and edit. |
| AppImage (stand‑alone binary) | No .desktop file exists until you create one. Create ~/.local/share/applications/myapp.desktop with the standard keys (Name=, Exec=, Icon=). |
| Multiple icons per app (different sizes) | Put several sizes in a folder that mimics a tiny theme (see §5.1) and reference the theme name instead of a full path. Example: Icon=myapp-custom. The system will look up myapp-custom.svg (or .png) inside ~/.local/share/icons/. |
4. Changing a Specific Folder’s Icon
This is the quickest visual customization – no extra packages needed.
- Open Nautilus (Files) – press Super + E or click the Files icon.
- Navigate to the folder you want to re‑skin.
- Right‑click the folder → Properties.
- In the Properties dialog, click the folder icon at the top‑left corner (it looks like a tiny folder).
- A file‑chooser appears. Browse to the image you want (PNG or SVG, ideally 256 × 256 px for crispness) and press Open.
The new picture is applied instantly. It is stored as a hidden attribute (metadata::custom-icon) inside the folder, so the icon travels with the folder when you copy it to another machine (provided the image path is absolute or the image is inside the folder).
Tip: If you want the same custom icon for many folders, you can copy the folder’s metadata:
# Set icon for folderA
gio set folderA metadata::custom-icon file:///home/you/Pictures/folder-icon.svg
# Apply the same icon to folderB
gio set folderB metadata::custom-icon "$(gio info -a metadata::custom-icon folderA | grep 'metadata::custom-icon' | cut -d' ' -f2-)"
5. Advanced Tips & Extras
5.1 Create a Tiny “One‑Folder‑Only” Icon Theme
If you love the idea of an icon theme but only want to replace a handful of icons (e.g., for a project folder), you can craft a mini‑theme that contains just the icons you need.
- Put your custom PNG/SVG files inside
48x48/apps(orscalable/appsfor SVG).
Activate only this mini‑theme using GNOME Tweaks (or via gsettings):
gsettings set org.gnome.desktop.interface icon-theme "My Mini Theme"
Add an index.theme file:
[Icon Theme]
Name=My Mini Theme
Comment=Only a few icons, everything else falls back to default
Inherits=Yaru # or any existing theme you like
Create a new folder:
mkdir -p ~/.local/share/icons/my‑mini‑theme/48x48/apps
All icons that exist in your mini‑theme will be used; everything else falls back to the parent theme (Yaru).
5.2 Changing “Generic” File‑Type Icons
Linux associates file‑type icons (e.g., folder‑pictures, audio‑file) via the MIME database. If you want all PDF files to show a custom picture:
- Create a folder
~/.local/share/icons/hicolor/48x48/mimetypes/. - Place
application-pdf.svg(or.png) inside. - Run
gtk-update-icon-cache ~/.local/share/icons/hicolor.
The new icon appears wherever a PDF file is displayed (Nautilus, Gedit, etc.).
5.3 Reset Everything to Ubuntu Defaults
If you ever want to go back to the stock look:
# Remove user‑installed icon themes
rm -rf ~/.local/share/icons/*
# Reset the GSettings key
gsettings reset org.gnome.desktop.interface icon-theme
# Delete any overridden .desktop files you created
rm -f ~/.local/share/applications/*.desktop
# Log out/in (or restart GNOME Shell) to clear the cache
6. Appendix – One‑Liners & Reference Commands
| Action | Command |
|---|---|
| Create user‑icons folder |
mkdir -p ~/.local/share/icons |
| Copy a system .desktop file to your local space |
cp /usr/share/applications/app.desktop |
| Edit a .desktop file with Gedit |
gedit ~/.local/share/ |
| Install a theme from the system directory (all users) |
sudo cp -r |
| Refresh the GNOME Shell after editing a theme (Xorg) |
Alt+F2 → r → Enter |
| Log out & back in (Wayland) |
gnome-session-quit |
| Force GNOME to use a specific icon theme via CLI |
gsettings set |
| Show which icon a .desktop file is currently using |
grep ^Icon= ~/.local/share/ |
| List all installed icon themes |
ls ~/.local/share/icons/ |
| Update the icon cache after adding PNGs |
gtk-update-icon-cache |
| Enable the User Themes extension from terminal |
gnome-extensions enable |
| Remove all custom icons & restore stock |
rm -rf ~/.local/share/icons/* |
7. Quick‑Start Cheat Sheet (Copy‑Paste)
# 1. Install Tweaks + Extension Manager
sudo apt update
sudo apt install -y gnome-tweaks gnome-shell-extension-manager
# 2. Enable the "User Themes" GNOME extension
gnome-extensions enable user-theme@gnome-shell-extensions.gcampax.github.com
# 3. Create the local icons directory (if it does not exist)
mkdir -p ~/.local/share/icons
# 4. Download & extract a theme (example: Papirus)
cd ~/Downloads
wget -O papirus.tar.gz https://github.com/PapirusDevelopmentTeam/papirus-icon-theme/archive/refs/heads/master.tar.gz
tar -xzf papirus.tar.gz
mv papirus-icon-theme-master ~/.local/share/icons/Papirus
# 5. Activate the new theme with Tweaks (or via CLI)
gsettings set org.gnome.desktop.interface icon-theme "Papirus"
# 6. Change a single app icon (example: Terminal)
cp /usr/share/applications/gnome-terminal.desktop ~/.local/share/applications/
gedit ~/.local/share/applications/gnome-terminal.desktop # edit the Icon= line
# Icon=/home/youruser/.local/share/icons/custom/terminal.svg
# Save → close → log out/in
# 7. Change a folder icon (via Nautilus)
# Right‑click folder → Properties → click the small icon → pick your image
# 8. Refresh (if you don’t see the changes)
# Xorg: Alt+F2 → r → Enter
# Wayland: log out & log back in
🎉 Wrap‑Up
- Whole‑system icon changes are the fastest way to give Ubuntu a fresh visual identity.
- Per‑application tweaks give you fine‑grained control without altering the whole theme.
- Folder icons are a neat way to make a project directory pop out in the file manager.
All of the steps above use standard Ubuntu packages (gnome-tweaks, gnome-shell-extension-manager) and no third‑party configuration tools. They work on any Ubuntu installation that ships the GNOME desktop (the default for the last several releases).
Enjoy your newly‑styled Ubuntu desktop! 🌟