dbus access problem
Ralf Habacker
ralf.habacker at freenet.de
Wed Jul 16 21:28:29 CEST 2008
Christian Ehrlicher schrieb:
> Ralf Habacker schrieb:
>> Jaroslaw Staniek schrieb:
>>> Ralf Habacker said the following, On 2008-07-14 10:28:
>>>
>>>> Hi,
>>>>
>>>> currently I'm extending kdeinit4 with a save application close
>>>> feature which calls the quit() method of /MainApplication over dbus
>>>> using the following code:
>>>>
>>>> QDBusConnection connection = QDBusConnection::sessionBus();
>>>> QDBusConnectionInterface *bus = connection.interface();
>>>> const QStringList services = bus->registeredServiceNames();
>>>> foreach(const QString &service, services) {
>>>> if (!service.startsWith("org.kde"))
>>>> continue;
>>>> QDBusInterface *iface = new QDBusInterface(service,
>>>> QLatin1String("/MainApplication"),
>>>> QLatin1String("org.kde.KApplication"),
>>>> QDBusConnection::sessionBus());
>>>> qDebug() << "killing " << service;
>>>> iface->call("quit");
>>>> qDebug() <<
>>>> iface->lastError();
>>>> This code worked until yesterday without any problems. Yesterday I
>>>> updated to recent dbus svn source and now this code does not work
>>>> anymore.
>>>>
>>>> [3804] Debug:killing "org.kde.kate-4724"
>>>> [3804]
>>>> Debug:QDBusError("org.freedesktop.DBus.Error.UnknownInterface", "No
>>>> such interface 'org.kde.KApplication' at object path
>>>> '/MainApplication'")
>>>>
>>>> The same behavior could be reproduced with qdbusviewer.
>>>>
>>> Did you use the original dbus (without my changes) before yesterday?
>>>
>> After digging more into this issue it looks that this problem stays
>> alredy some time
>>
>> - at least in the version i tried, 4.0.73,4.0.80, 4.0.83 and recent
>> svn source some interfaces (org.kde and com.trolltech) in the Object
>> Path /MainApplication are not accessable.
>>
>> This problem could be verifed by running the following commands on a
>> command shell
>>
>> C:\Programme\kde-4\bin>kdeinit4 --verbose
>> kdeinit4: Launched dbus-launch.exe, pid = 2464
>> kdeinit4: Launched klauncher, pid = 3964
>> create process "C:\Programme\kde-4.0.0\bin\dbus-daemon.exe"
>> "C:\Programme\kde-4.0.0\bin\dbus-daemon.exe" --session
>> org.kde.klauncher is registered in dbus
>> kdeinit4: Launched kded4, pid = 1824
>> org.kde.kded is registered in dbus
>>
>> C:\Programme\kde-4\bin>qdbus
>> :1.0
>> :1.1
>> org.kde.klauncher
>> :1.2
>> org.kde.kded
>> :1.4
>> org.freedesktop.DBus
>>
>> C:\Programme\kde-4\bin>qdbus org.kde.kded
>> /
>> /MainApplication
>> /kbuildsycoca
>> /kded
>> /modules
>> /modules/winstartmenu
>>
>> C:\Programme\kde-4\bin>qdbus org.kde.kded /MainApplication
>> method void org.kde.KApplication.quit()
>> method void org.kde.KApplication.reparseConfiguration()
>> method void org.kde.KApplication.updateUserTimestamp()
>> method void org.kde.KApplication.updateUserTimestamp(int time)
>> property readwrite int com.trolltech.Qt.QApplication.cursorFlashTime
>> property readwrite int com.trolltech.Qt.QApplication.doubleClickInterval
>> property readwrite QSize com.trolltech.Qt.QApplication.globalStrut
>> property readwrite int
>> com.trolltech.Qt.QApplication.keyboardInputInterval
>> property readwrite bool
>> com.trolltech.Qt.QApplication.quitOnLastWindowClosed
>> property readwrite int com.trolltech.Qt.QApplication.startDragDistance
>> property readwrite int com.trolltech.Qt.QApplication.startDragTime
>> property readwrite QString com.trolltech.Qt.QApplication.styleSheet
>> property readwrite int com.trolltech.Qt.QApplication.wheelScrollLines
>> property readwrite QString
>> com.trolltech.Qt.QCoreApplication.applicationName
>> property readwrite QString
>> com.trolltech.Qt.QCoreApplication.applicationVersion
>> property readwrite QString
>> com.trolltech.Qt.QCoreApplication.organizationDomain
>> property readwrite QString
>> com.trolltech.Qt.QCoreApplication.organizationName
>> method int org.kde.KUniqueApplication.newInstance()
>> method int org.kde.KUniqueApplication.newInstance(QByteArray asn_id)
>> method int org.kde.KUniqueApplication.newInstance(QByteArray asn_id,
>> QByteArray args)
>> method QDBusVariant org.freedesktop.DBus.Properties.Get(QString
>> interface_name, QString property_name)
>> method void org.freedesktop.DBus.Properties.Set(QString
>> interface_name, QString property_name, QDBusVariant value)
>> method QString org.freedesktop.DBus.Introspectable.Introspect()
>>
>> C:\Programme\kde-4\bin>qdbus org.kde.kded /MainApplication
>> org.freedesktop.DBus.Introspectable.Introspect
>> <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection
>> 1.0//EN"
>> "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
>> <node>
>> <interface name="org.kde.KApplication">
>> <method name="updateUserTimestamp">
>> <arg name="time" type="i" direction="in"/>
>> </method>
>> <method name="updateUserTimestamp">
>> </method>
>> <method name="reparseConfiguration">
>> </method>
>> <method name="quit">
>> </method>
>> </interface>
>> <interface name="com.trolltech.Qt.QApplication">
>> <property name="cursorFlashTime" type="i" access="readwrite"/>
>> <property name="doubleClickInterval" type="i" access="readwrite"/>
>> <property name="keyboardInputInterval" type="i" access="readwrite"/>
>> <property name="wheelScrollLines" type="i" access="readwrite"/>
>> <property name="globalStrut" type="(ii)" access="readwrite">
>> <annotation name="com.trolltech.QtDBus.QtTypeName" value="QSize"/>
>> </property>
>> <property name="startDragTime" type="i" access="readwrite"/>
>> <property name="startDragDistance" type="i" access="readwrite"/>
>> <property name="quitOnLastWindowClosed" type="b"
>> access="readwrite"/>
>> <property name="styleSheet" type="s" access="readwrite"/>
>> </interface>
>> <interface name="com.trolltech.Qt.QCoreApplication">
>> <property name="applicationName" type="s" access="readwrite"/>
>> <property name="applicationVersion" type="s" access="readwrite"/>
>> <property name="organizationName" type="s" access="readwrite"/>
>> <property name="organizationDomain" type="s" access="readwrite"/>
>> </interface>
>> <interface name="org.kde.KUniqueApplication">
>> <method name="newInstance">
>> <arg type="i" direction="out"/>
>> <arg name="asn_id" type="ay" direction="in"/>
>> <arg name="args" type="ay" direction="in"/>
>> </method>
>> <method name="newInstance">
>> <arg type="i" direction="out"/>
>> <arg name="asn_id" type="ay" direction="in"/>
>> </method>
>> <method name="newInstance">
>> <arg type="i" direction="out"/>
>> </method>
>> </interface>
>> <interface name="org.freedesktop.DBus.Properties">
>> <method name="Get">
>> <arg name="interface_name" type="s" direction="in"/>
>> <arg name="property_name" type="s" direction="in"/>
>> <arg name="value" type="v" direction="out"/>
>> </method>
>> <method name="Set">
>> <arg name="interface_name" type="s" direction="in"/>
>> <arg name="property_name" type="s" direction="in"/>
>> <arg name="value" type="v" direction="in"/>
>> </method>
>> </interface>
>> <interface name="org.freedesktop.DBus.Introspectable">
>> <method name="Introspect">
>> <arg name="xml_data" type="s" direction="out"/>
>> </method>
>> </interface>
>> </node>
>>
>> C:\Programme\kde-4\bin>qdbus org.kde.kded /MainApplication
>> org.kde.KApplication.quit
>> Error: org.freedesktop.DBus.Error.UnknownInterface
>> No such interface 'org.kde.KApplication' at object path
>> '/MainApplication'
>>
>>
>> Does anyone can give me some hints who to find the problem ?
>>
> After some debugging I think you can't access methods registered on
> the sesion bus. At least in kded4 this seems to be correct.
>
>
I don't believe this - try a method from the /kded object path eg
run first
qdbus org.kde.kded /kded
and then take one method from the above list
qdbus org.kde.kded /kded <interface.method-without-()>
they works.
Ralf
More information about the Kde-windows
mailing list