Browse and launch remote Linux desktop apps via Waypipe
Project description
remote-app-launcher
Browse and launch desktop applications installed on a remote Linux HTPC from your local laptop. Uses Waypipe to forward Wayland windows so they display locally.
What it does
- Connects to a remote Linux host over SSH
- Discovers launchable apps by reading
.desktopfiles in/usr/share/applicationsand~/.local/share/applications - Caches results locally (JSON) for fast startup
- Shows a searchable list via fzf
- Launches the selected app on the remote host with
waypipe ssh -t host gtk-launch <desktop-id>, displaying the window locally
Dependencies
- Python 3.10+
- fzf – fuzzy finder
- waypipe – Wayland proxy for remote display
- SSH – remote access
Install on both local and remote hosts. The remote needs gtk-launch and a Wayland session.
Install
cd remote-app-launcher
pip install -e .
Usage
# Scan remote host and cache apps
remote-app-launcher refresh --host htpc
# Launch an app (opens fzf)
remote-app-launcher launch --host htpc
# List cached apps
remote-app-launcher list --host htpc
# Verbose output
remote-app-launcher refresh --host htpc -v
Config file (optional)
mkdir -p ~/.config/remote-app-launcher
echo '{"host": "htpc"}' > ~/.config/remote-app-launcher/config.json
Then you can omit --host:
remote-app-launcher refresh
remote-app-launcher launch
Filters
- Terminal apps – Excluded (Terminal=true)
- Games – Excluded if only categorized as a game (keeps gaming tools like launchers)
- NoDisplay – Excluded
Troubleshooting
Waypipe / SSH
- Install waypipe on both local and remote
- Add to
~/.ssh/config:Host htpc SetEnv XDG_RUNTIME_DIR=/run/user/1000 - Enable
AcceptEnv XDG_RUNTIME_DIRin remote/etc/ssh/sshd_config - Remote must run a Wayland compositor (e.g. GNOME, KDE on Wayland)
"gtk-launch not found" on remote
Install GTK/GLib on the remote host.
Apps not launching
The waypipe process keeps the session open for 24 hours. To stop it early:
pkill -f "waypipe ssh.*gtk-launch"
ChromeOS Crostini – invisible fzf UI
If the fzf selection list appears blank (you can press Enter but see nothing), the
launcher cannot render its TUI because the process lacks access to the controlling
terminal (/dev/tty).
The launcher now opens /dev/tty explicitly. Always run
remote-app-launcher launch directly inside the Crostini Terminal app, not via
a desktop shortcut, cron job, or any wrapper that detaches from the terminal.
If you see:
Cannot open /dev/tty for fzf TUI (…). Run 'remote-app-launcher launch' from an interactive terminal.
it means no TTY is available. Switch to an interactive terminal session and try again.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file remote_app_launcher-0.1.0.tar.gz.
File metadata
- Download URL: remote_app_launcher-0.1.0.tar.gz
- Upload date:
- Size: 11.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
102a8f7ee0076e7780760b11a630f23c43d9806f92263f2ee837fcf0a50edde9
|
|
| MD5 |
c984eb6dec508f7ba2e5d38ea43128bd
|
|
| BLAKE2b-256 |
3d3aed62a7ac64b5cc5bf6a2e5903ce6b16133ce7d929702ef6bdfbb77260e54
|
File details
Details for the file remote_app_launcher-0.1.0-py3-none-any.whl.
File metadata
- Download URL: remote_app_launcher-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5351862ee2c2de508dbcee60f972a5a023943a853c079cd6a3757436fc83a379
|
|
| MD5 |
fcf3a1da7f279c3c66c33155cdc527a9
|
|
| BLAKE2b-256 |
6db4d9dff2dec54e46ecd8fe44279c56491aee546e0c45f5af62955ee0b6cf6e
|