Ich versuche Systemzeit einstellen Qt through DBus auf folgende Weise mit:Systemzeit Qt durch DBus mit
#include <QDBusConnection>
#include <QDBusInterface>
#include <QDBusMessage>
#include <QDebug>
#include <QDateTime>
#include <cstdlib>
int main (int /*argc*/, char ** /*argv*/)
{
QDBusConnection dbConnection = QDBusConnection::systemBus();
QDBusInterface dbInterface (
"org.freedesktop.timedate1.set-time"
, "/org/freedesktop/timedate1/set-time/Manager"
, "org.freedesktop.timedate1.set-time.Manager"
, dbConnection);
qDebug() << "DBus interface validation: " << dbInterface.isValid();
if (dbInterface.isValid()) {
QDBusMessage dbMessage = dbInterface.call ("SetTime", QDateTime::currentDateTime().toMSecsSinceEpoch() * 1000, false, false);
qDebug() << "DBus message: " << dbMessage;
}
return EXIT_SUCCESS;
}
Aber ich habe: DBus interface validation: false
.
Wenn ich in der Konsole aufrufen:
$ gdbus introspect \
--system \
--dest org.freedesktop.timedate1 \
--object-path /org/freedesktop/timedate1
ich einige relevante Ausgabe zu erhalten (so sieht es aus wie keine Probleme mit Umgebung):
node /org/freedesktop/timedate1 {
interface org.freedesktop.DBus.Peer {
...
};
interface org.freedesktop.DBus.Introspectable {
...
};
interface org.freedesktop.DBus.Properties {
methods:
...
signals:
...
properties:
};
interface org.freedesktop.timedate1 {
methods:
SetTime(in x arg_0,
in b arg_1,
in b arg_2);
...
signals:
properties:
...
};
};
Quellcode und bauen Skript bei GitLab zur Verfügung.
Sieht so aus, als ob das Objekt instanziiert werden muss. Wenn ich mit "d-feet" schaue - ist es nicht da. Dann starte ich '$ gdbus introspect --system --dest org.freedesktop.timedate1 --object-pfad/org/freedesktop/timedate1' von terminal - timedate1 erscheint (und die Qt-Anwendung meldet es dann als gültig). – Velkan
@Velkan, 'Sieht so aus, als müsste das Objekt instanziiert werden. Ich kenne D-Bus nicht. Kannst du mir erklären, was genau ich tun soll? – Gluttton