QtDbusを使用して、システムで提供されるインターフェイスと通信しようとしPowerManager
ています。私の目標はとてもシンプルです。DBus インターフェイスを使用してシステムを休止状態にするコードを作成します。
そこで、d-feetアプリケーションをインストールして、自分のシステムでDBus が利用できるインターフェースと、私が見たものを確認しました。
ご覧のとおり、何かを選択できるインターフェイスとメソッドがいくつかあります。私の選択は、インターフェイスorg.freedesktop.PowerManagmentのHibernate()です。
この目標では、メカニズムのみを理解するための非常に単純なコードをいくつか用意しました。もちろんQtライブラリを使用しました:
#include <QtCore/QCoreApplication>
#include <QtCore/QDebug>
#include <QtCore/QStringList>
#include <QtDBus/QtDBus>
#include <QDBusInterface>
int main(int argc, char **argv)
{
QCoreApplication app(argc, argv);
if (!QDBusConnection::sessionBus().isConnected()) {
fprintf(stderr, "Cannot connect to the D-Bus session bus.\n"
"To start it, run:\n"
"\teval `dbus-launch --auto-syntax`\n");
return 1;
}
QDBusInterface iface("org.freedesktop.PowerManagement" ,"/" , "" , QDBusConnection::sessionBus());
if(iface.isValid())
{
qDebug() << "Is good";
QDBusReply<QString> reply = iface.call("Methods" , "Hibernate");
if(reply.isValid())
{
qDebug() << "Hibernate by by " << qPrintable(reply.value());
}
qDebug() << "some error " << qPrintable(reply.error().message());
}
return 0;
}
残念ながら、端末でエラーが発生します:
インターフェイス「(null)」の署名「s」を持つメソッド「メソッド」は存在しません
では、このコードの何が問題なのか教えてください。関数QDBusInterface::call()のいくつかの引数を忘れたと確信していますが、何ですか?