A clipboard-free text insertion tool for Linux that securely types text directly into the target app (no clipboard involved).
- Clipboard-free text typing (secure; no clipboard usage)
- Per-pad hotkeys (global “type current pad” hotkey removed)
- Rich insert tokens (dates/times, UUID, system info, randoms, Tab/Enter, etc.)
- Import from text/code files; export pad to a file (.ghk by default)
- Editor enhancements: optional line numbers, highlight current line, font, and style scheme
- System tray integration with Show/Hide and Settings…
- Built-in Help dialog (header button)
GhostKey uses GTK via system-provided PyGObject (gi). You must install OS packages and install GhostKey in an environment that can see system packages.
sudo apt-get update
sudo apt-get install \
python3-gi \
gir1.2-gtk-3.0 \
gir1.2-appindicator3-0.1 \
python3-venv \
python3-pip \
pipx \
python3-dev \
gccNotes:
- python3-gi and gir1.2-gtk-3.0 provide
giand GTK bindings - gir1.2-appindicator3-0.1 enables the tray icon
Choose ONE of the following methods:
- Option A: install.sh (user install via pipx)
- Option B: .deb package (system-wide install)
- Option C: pipx from source (manual)
The script installs GhostKey with pipx (exposing system GTK/gi) and registers the desktop entry/icons for your user.
chmod +x ./install.sh
./install.shAfter installation, you can launch GhostKey from your desktop menu or by running:
ghostkeyBuild the .deb (or download a release .deb if provided), then install it:
# Build .deb from source (inside the repo)
dpkg-buildpackage -us -uc -b
# Install the generated package from the parent directory
sudo apt-get install ./ghostkey_*_amd64.debThis installs the desktop file to /usr/share/applications and icons to the hicolor theme. If the launcher doesn’t appear immediately, refresh caches:
sudo update-desktop-database /usr/share/applications
sudo gtk-update-icon-cache -f -t /usr/share/icons/hicolor
xdg-desktop-menu forceupdate || trueLaunch from your menu or run:
ghostkeypython3 -m pip install --user pipx
python3 -m pipx ensurepath
# The --system-site-packages flag is REQUIRED so gi/GTK are visible
pipx install --system-site-packages .If you previously installed without the flag, fix it with:
pipx uninstall ghostkey
pipx install --system-site-packages .run.sh creates a venv that shares system packages (for gi), installs deps, and starts the app:
chmod +x ./run.sh
./run.sh- Create or select a pad on the left.
- Set a Name, choose a Hotkey, and enter Content.
- Click Save to persist changes and rebind hotkeys.
- To type the pad’s content into any app:
- Click Run, or
- Use the pad’s configured hotkey.
- Use Import/Export to load or save pad content as files.
- Click the Help button in the header for a quick guide.
- Each pad has: Name, Hotkey, and Content
- Select a pad in the left panel to edit it
- Add pads with +; remove with – (you cannot remove the last remaining pad)
- Sorting by Name or Hotkey helps organize your list
- Set the Hotkey field on a pad
- Hotkeys must include a modifier (Ctrl/Alt/Shift/Super)
- Hotkey changes take effect after clicking Save
Use the Insert dropdown to add tokens that expand at type-time. Examples:
- Date/time: [[[DATE]]], [[[DATE_US]]], [[[TIME]]], [[[TIME_12H]]], [[[TIME_SECONDS]]], [[[DATETIME]]], [[[DATETIME_US]]], [[[DATETIME_SECONDS]]], [[[ISO8601]]], [[[RFC3339]]], [[[RFC2822]]], [[[YEAR]]], [[[MONTH_NUM]]], [[[MONTH_NAME]]], [[[DAY]]], [[[WEEKDAY]]], [[[ISO_WEEK]]]
- Epoch: [[[EPOCH]]], [[[EPOCH_MS]]]
- Identity/system: [[[UUID]]], [[[USERNAME]]], [[[HOSTNAME]]], [[[PUBLIC_HOSTNAME]]]
- Network: [[[INTERNAL_IP]]], [[[EXTERNAL_IP]]], [[[MAC_ADDR]]]
- Environment/paths: [[[HOME]]], [[[CWD]]], [[[PATH]]], [[[SHELL]]]
- Random: [[[RAND_INT]]], [[[RAND_HEX8]]]
- Control keys: [[[TAB]]], [[[ENTER]]]
Tokens are triple-bracketed. They’re replaced just before typing.
- Import:
- Click Import, choose a text/code file (.txt, .md, .csv, .json, .css, .html, .py, .js, .ts, .yml, .yaml, .ini, .conf, .sh, .go, .java, .cpp, .c, .rb, .rs, .toml, .xml, .log, …)
- File is read as UTF-8 (errors replaced) and loaded into the current pad
- Export:
- Click Export, choose a path/filename (default extension .ghk)
- Current pad content is saved as UTF-8
Open from header (gear) or tray.
- General:
- Confirm before deleting a pad
- Auto-save changes
- Editor:
- Show line numbers (requires GtkSourceView)
- Highlight current line
- Font (Pango description, e.g. “Monospace 11”)
- Style scheme: Auto, Classic, Oblivion, None
- Behavior:
- Minimize to tray on close
- Start minimized to tray
- Typing delay (seconds between simulated keystrokes)
Settings are saved to: ~/.config/ghostkey/config.json and apply without restart. Hotkey changes are applied when you click Save.
- On Wayland, GhostKey prefers the “uinput” backend for pynput to improve reliability; on Xorg, the default backend is used
- Some applications restrict simulated input; results can vary by desktop environment and security policy
If installed (gir1.2-gtksource-3.0), the editor shows line numbers and supports style schemes. Without it, GhostKey falls back to a plain Gtk TextView. Tip messages will suggest installing GtkSourceView to enable line numbers.
- Verify GTK/gi is importable:
python3 -c "import gi; from gi.repository import Gtk; print('GTK OK')" - If that fails:
sudo apt-get install python3-gi gir1.2-gtk-3.0
- Tray not visible:
sudo apt-get install gir1.2-appindicator3-0.1 - Reinstall with system packages visible when using pipx:
pipx uninstall ghostkey pipx install --system-site-packages . - Hotkey not triggering: ensure you clicked Save after editing the hotkey; avoid conflicts with system/global shortcuts; try another combo
- Typing goes into GhostKey: the app will try to hide/minimize before typing; ensure your window manager allows it
GhostKey avoids the clipboard. Text stays in-memory and is typed directly via simulated keystrokes.
Issues and PRs are welcome!
Apache-2.0 — see LICENSE for details.