You are assuming that the object path always follows the naming of the service itself. That's not always the case – a service can export many different object paths, and does not strictly need to follow any naming style (i.e. there isn't an enforced rule that all object paths _start with_ the service name, much less that there be one that exactly matches it; both are merely conventions). KeePassXC is a Qt-based app, and many of those famously do not care to follow the usual D-Bus convention of using the service name as the "base" for object paths; instead, the old KDE3 DCOP (pre-D-Bus) style with all objects rooted directly at `/` remains common among Qt programs. Looking through busctl or D-Spy (or the older D-Feet), it seems that KeePassXC does not follow the D-Bus conventions of object naming, and the only object it exposes is at the path `/keepassxc`. So you need to call: ```python bus.get("org.keepassxc.KeePassXC.MainWindow", "/keepassxc") ``` (Likewise the interface names don't need to match the service name; it seems that KeePassXC has used the same string for both, even though the `.MainWindow` suffix is pretty odd for a service name to have when all windows of an app belong to the same process...) ``` $ busctl --user tree org.keepassxc.KeePassXC.MainWindow └─ /keepassxc ``` ``` $ gdbus introspect -e -d org.keepassxc.KeePassXC.MainWindow -o / -r -p node / { node /keepassxc { }; }; ``` [![Screenshot of D-Spy with an object tree for the KeePassXC service][1]][1] Generally instead of dbus-send I'd suggest the slightly less verbose systemd or GLib2 tools (both of which support showing the introspection XML from the service): ``` $ busctl --user introspect org.keepassxc.KeePassXC.MainWindow /keepassxc $ busctl --user call ... $ gdbus introspect -e -d org.keepassxc.KeePassXC.MainWindow -o /keepassxc $ gdbus call -e ... ``` [1]: https://i.sstatic.net/7AGQKVfe.png