How to change an application icon on Ubuntu

Give your Ubuntu desktop a new look with custom icons! Learn how to install icon themes, change individual app and folder icons, and fix missing or blurry ones — all without breaking your system.

How to change an application icon on Ubuntu
Photo by Alexander Shatov / Unsplash

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-
shell/extensions/
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

  1. Visit a reputable source, e.g. gnome‑look.org.
  2. Search for “icon theme”, filter by GNOME or Ubuntu compatibility, and pick a theme you like (e.g., Papirus, Tela, Sweet, Numix, Yaru‑colors).
  3. 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

  1. Press Super (Windows key) → type Extensions → open the Extensions app.
  2. In the list, locate User Themes and install it.
  3. 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

  1. Press Super → type Tweaks → open Tweaks.
  2. In the left pane, click Appearance.
  3. Under Icons, you’ll see a drop‑down list populated with every theme found in ~/.local/share/icons/ and /usr/share/icons/.
  4. 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:
~/.local/share/icons/YourTheme/

contains index.theme.
Run gtk-update-icon-cache
~/.local/share/icons/YourTheme
.
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/
applications
Snap packages /var/lib/snapd/
desktop/applications/
ls /var/lib/snapd/
desktop/applications
Flatpak apps ~/.local/share/flatpak/
exports/share/applications/

(per‑user) or
/var/lib/flatpak/
exports/share/applications/
(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

  1. 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.

  1. Open Nautilus (Files) – press Super + E or click the Files icon.
  2. Navigate to the folder you want to re‑skin.
  3. Right‑click the folder → Properties.
  4. In the Properties dialog, click the folder icon at the top‑left corner (it looks like a tiny folder).
  5. 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.

  1. Put your custom PNG/SVG files inside 48x48/apps (or scalable/apps for 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:

  1. Create a folder ~/.local/share/icons/hicolor/48x48/mimetypes/.
  2. Place application-pdf.svg (or .png) inside.
  3. 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
~/.local/share/applications/
Edit a .desktop
file with Gedit
gedit ~/.local/share/
applications/app.desktop
Install a theme from
the system directory
(all users)
sudo cp -r
~/Downloads/YourTheme
/usr/share/icons/
Refresh the GNOME
Shell after editing a theme
(Xorg)
Alt+F2 → r → Enter
Log out & back in
(Wayland)
gnome-session-quit
--logout --no-prompt
Force GNOME to use
a specific icon
theme via CLI
gsettings set
org.gnome.desktop.interface
icon-theme "Papirus"
Show which icon a
.desktop file is currently
using
grep ^Icon= ~/.local/share/
applications/app.desktop
List all installed
icon themes
ls ~/.local/share/icons/
/usr/share/icons/
Update the icon cache
after adding PNGs
gtk-update-icon-cache
~/.local/share/icons/YourTheme
Enable the User Themes
extension from terminal
gnome-extensions enable
user-theme@gnome-shell-
extensions.gcampax.github.com
Remove all custom icons &
restore stock
rm -rf ~/.local/share/icons/*
~/.local/share/applications/*

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! 🌟

Read next

Testing OpenGL Performance on CPU nouveau driver

While waiting for the right NVLink bridge, I decided to see how my dual RTX 2080 Ti setup performs without them—by turning the GPUs off entirely. The result? A deep dive into OpenGL on CPU using the humble Nouveau driver, where even spinning gears tell a story about patience and pixels.