This release is a pre-release and may not be stable for production use.
ovos-PHAL-plugin-app-launcher
This PHAL plugin for OpenVoiceOS manages OS-level desktop
applications for ovos-skill-application-launcher
or any other bus client. It scans .desktop files, launches and closes processes, and
reports application state over the OVOS messagebus.
Why a split architecture?
In a single-box OVOS install, the skill and the OS run on the same machine, so
subprocess.Popen calls from the skill work directly. A split between skill and
plugin becomes necessary in these cases:
- ovos-core runs on a server or NUC while the desktop runs on a different device.
- The device OS changes (for example X11 desktop, Wayland, or a headless kiosk). Only the PHAL plugin needs to change; the skill stays the same.
- HiveMind multi-room setups: the skill runs on the ovos-core satellite, and the PHAL plugin runs on the satellite device where apps must open. Bus messages cross HiveMind transparently.
┌──────────────── ovos-core machine ─────────────────┐
│ ovos-skill-application-launcher │
│ • understands speech / intents │
│ • emits ovos.phal.app_launcher.* requests │
│ • waits for responses, speaks result / error │
└────────────────────┬───────────────────────────────┘
│ messagebus (local or HiveMind)
┌────────────────── device machine ──────────────────┐
│ ovos-PHAL-plugin-app-launcher (this repo) │
│ • scans .desktop files │
│ • launches / closes processes via subprocess │
│ • manages windows via wmctrl (optional) │
│ • replies success / error │
└────────────────────────────────────────────────────┘
Bus event API
Each request and response pair uses the standard message.response() convention, so
bus.wait_for_response works across HiveMind sessions.
| Request event | Request payload | Response event | Response payload |
|---|---|---|---|
ovos.phal.app_launcher.list |
(none) | .response |
{apps: [{name, exec}]} |
ovos.phal.app_launcher.launch |
{name: str} |
.response |
{name, success: true} or {name, error: str} |
ovos.phal.app_launcher.close |
{name: str} |
.response |
{name, success: true} or {name, error: str} |
ovos.phal.app_launcher.is_running |
{name: str} |
.response |
{name, running: bool} |
Matching
launch, close, and is_running resolve the spoken name against the built application
list (and, for close/is_running, against open window titles) with a fuzzy match. A name
that scores below match_threshold is reported back as not found ({name, error: "No application matched '...'"} for launch, or excluded from window candidates for close)
rather than being fuzzy-matched to some other, unrelated application.
Response and timeout guarantees
Every request gets exactly one response. When process enumeration fails mid-scan
(a process exits while the plugin is looking at it, or access is denied), the
handler answers with {name, error: str} instead of staying silent, so a
wait_for_response caller never hangs on a race. Calls to wmctrl (window
listing and window close) time out after 3 seconds; a hung window manager makes
close fall back to the process-based path rather than blocking the handler.
Configuration
Add to ovos.conf under the PHAL section or plugin settings:
{
"ovos-phal-plugin-app-launcher": {
"skip_categories": ["Settings", "ConsoleOnly", "Building"],
"skip_keywords": [],
"target_categories": [],
"target_keywords": [],
"blacklist": [],
"aliases": {"kcalc": ["calculator"]},
"user_commands": {},
"require_icon": true,
"require_categories": true,
"match_threshold": 0.85,
"terminate_all": false,
"disable_window_manager": false
}
}
| Key | Type | Default | Description |
|---|---|---|---|
skip_categories |
list[str] | ["Settings","ConsoleOnly","Building"] |
Desktop categories to exclude |
skip_keywords |
list[str] | [] |
Desktop keywords to exclude |
target_categories |
list[str] | [] |
Only include apps in these categories (empty = all) |
target_keywords |
list[str] | [] |
Only include apps with these keywords (empty = all) |
blacklist |
list[str] | [] |
App names or .desktop filenames to skip |
aliases |
dict | {"kcalc":["calculator"]} |
Map desktop-name → speech aliases |
user_commands |
dict | {} |
Map voice name → shell command |
require_icon |
bool | true |
Skip apps without an Icon field |
require_categories |
bool | true |
Skip apps without a Categories field |
match_threshold |
float | 0.85 |
Fuzzy-match threshold (0–1) |
terminate_all |
bool | false |
Kill every matching process, not just the first |
disable_window_manager |
bool | false |
Skip wmctrl-based window management |
Installation
pip install ovos-PHAL-plugin-app-launcher
# optional: for window management
sudo apt install wmctrl
Related projects
- ovos-skill-application-launcher - the OVOS skill that sends launch, close, and status requests to this plugin.
Credits
Developed by TigreGótico for OpenVoiceOS.
This project was funded through the NGI0 Commons Fund, a fund established by NLnet with financial support from the European Commission's Next Generation Internet programme, under the aegis of DG Communications Networks, Content and Technology under grant agreement No 101135429.
Metadata
Release files for ovos-PHAL-plugin-app-launcher 0.0.1a4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ovos_phal_plugin_app_launcher-0.0.1a4.tar.gz | 14.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ovos_phal_plugin_app_launcher-0.0.1a4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.8 kB
Release files / ovos_phal_plugin_app_launcher-0.0.1a4.tar.gz
| Download URL | ovos_phal_plugin_app_launcher-0.0.1a4.tar.gz |
|---|---|
| Size | 14.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ac6a1d52b7f3219b4b008dc98e6b7ef1f9f2e9ff2163d21ec532804d624fac0a
|
|
BLAKE2b-256 checksum How to use checksums |
db80f671022283d9e0387b520a1420b90f9caabd503cc91de4c6c32b76ec5111
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / ovos_phal_plugin_app_launcher-0.0.1a4-py3-none-any.whl
| Download URL | ovos_phal_plugin_app_launcher-0.0.1a4-py3-none-any.whl |
|---|---|
| Size | 10.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
78b66007a27f366532341a1fa679ea9d0bb5a686f11201b354f6f5145b317575
|
|
BLAKE2b-256 checksum How to use checksums |
8ce17b487d6e417b1be2eb4074e502b693da1d90eaa05ece5f15b35eca5637c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|