English · 中文
GNOME dropped the ability to drag an app onto the desktop. Dropdesk brings it back: pick apps from a searchable list and it drops ready-to-run .desktop shortcuts on your desktop — already marked trusted, so no "Allow Launching?" prompt.
The main program is dropdesk.py (GTK 3). Two extras ship alongside it — a yad shell script and a GNOME right-click extension — with the differences spelled out below.
Of the GTK app (dropdesk.py):
- Searchable app list with 32 px icons, live filtering as you type.
- Hide system components — a toggle switch next to the search box, on by default. Filters by categories, 30+ filename prefixes and Wine uninstaller entries.
- Newest first — sorted by
.desktopmodification time, so apps you just installed are at the top. - Already trusted — runs
gio set metadata::trusted true, so double-clicking just works instead of nagging. - Multi-select with Ctrl; single-instance app.
- Bilingual UI — follows your system locale (Chinese / English).
- Finds Flatpak and Snap apps too — it enumerates via
Gio.AppInfo.get_all()rather than scanning two fixed directories. - Language-independent — the desktop folder comes from
GLib.get_user_special_dir(), falling back toxdg-user-dir DESKTOP, so~/Desktop,~/桌面,~/Bureauall work.
bash install.shPuts a ready-to-run icon on your desktop and in your application menu. No admin password required.
Note: a plain user install runs the program in place, from the folder you cloned into — don't delete or move it afterwards, or the icons will break. Use --prefix if you want the files copied somewhere permanent.
Advanced options
bash install.sh --system # system-wide (needs admin): /opt + /usr/share
bash install.sh --prefix ~/apps # copy the program to ~/apps/dropdesk, then make icons
bash install.sh --prefix=~/apps # same thing, equals-sign form
bash install.sh --no-desktop-icon # menu entry only
bash install.sh --uninstall # remove icons / menu entry
bash install.sh --help # usage--uninstall only removes what the matching mode installed, so to undo a system install use
bash install.sh --system --uninstall. When --prefix or --system is given alongside
--uninstall, the copied program directory is deleted too.
Python 3 and PyGObject (GTK 3) — shipped by default on most desktop distros. gio (part of GLib's tools) is what marks the shortcut trusted; it is usually already present.
| Distro | Install if missing |
|---|---|
| Debian/Ubuntu | sudo apt install python3-gi gir1.2-gtk-3.0 xdg-user-dirs libglib2.0-bin |
| Fedora | sudo dnf install python3-gobject gtk3 xdg-user-dirs glib2 |
| Arch | sudo pacman -S python-gobject gtk3 xdg-user-dirs glib2 |
Add yad only if you want the shell version below.
Tested on GNOME/Xorg, but it only uses standard freedesktop paths, so other desktops (KDE, XFCE, Cinnamon…) should work too.
python3 dropdesk.pyNeither script takes any command-line arguments — everything happens in the GUI. Select one or more apps (Ctrl for multi-select), confirm, and the shortcuts appear on your desktop.
bash dropdesk-yad.sh # needs `yad`An independent implementation of the same idea built on yad. It is deliberately simpler, and not feature-equivalent to the GTK app:
dropdesk.py |
dropdesk-yad.sh |
|
|---|---|---|
| Marks shortcut trusted | Yes | No — you'll get the "Allow Launching?" prompt once |
| Sort order | Newest installed first | Alphabetical by name |
| App sources | All, via Gio.AppInfo (incl. Flatpak/Snap) |
/usr/share/applications and ~/.local/share/applications only |
| Hide system components | Toggle switch | Fixed built-in filter |
Adds an Add to Desktop item to the right-click menu on icons in the app grid. (The menu text follows your system language, like the rest of the project.)
mkdir -p ~/.local/share/gnome-shell/extensions/add-to-desktop@local
cp gnome-extension/* ~/.local/share/gnome-shell/extensions/add-to-desktop@local/
gnome-extensions enable add-to-desktop@local # log out and back inThe extension does the same things the main program does: it asks GLib for your real desktop folder (so it works whatever language your system is in), marks the shortcut trusted so there is no "Allow Launching?" prompt, and shows its text in English or Chinese depending on your locale.
Known limitations — this is still the least tested part of the repo:
metadata.jsondeclares"shell-version": ["45", "46", "47", "48"]. Only GNOME 46 has actually been tested; the others are declared as compatible but unverified. On a newer release you may needgsettings set org.gnome.shell disable-extension-version-validation true.- Unlike the GTK app, it has no app list or search — it only adds the one menu item.
Patches are very welcome.
GLib.set_prgname('dropdesk')andGdk.set_program_class('dropdesk')are called at startup: without them the taskbar shows "python3" and the window does not match theStartupWMClass=dropdeskin the.desktopfile, so the icon would not be associated.- The GTK window is titled Dropdesk · ENum.
- GNOME distrusts manually copied
.desktopfiles;gio set <file> metadata::trusted truefixes it and the GTK app does this for you.
Honestly, I'm not an expert — I wrote this small tool because I was annoyed that GNOME wouldn't let me put icons on the desktop. The code is rough and the system-app filter rules are largely guesswork. Bug reports, feature requests, better approaches and PRs are very welcome. 🙂
GPL-3.0 — see LICENSE. Copyright (c) 2026 ENum.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. It is distributed in the hope that it will be useful, but without any warranty.
In short: use it, change it, share it — but if you distribute a modified version, that version has to stay open under the GPL too.