2012-03-20 2 views
1

Я провел четыре часа в глубоком поиске :), но не нашел: Как получить PID от отправителя DBUS под Qt.Получить отправителя PID из DBUS

Из других Dbus LIBS это довольно просто:

Вызов dbus_message_get_sender, чтобы получить D-Bus идентификатор вызывающего абонента, а затем вызвать GetConnectionUnixProcessID, чтобы получить PID процесса, который отправил сообщение.

Как это сделать с Qt? Я пытался использовать этот код, но он возвращает мой PID не клиентское приложение.

class ServerAdaptor: public QDBusAbstractAdaptor 
{ 
public Q_SLOTS: 

// this method shared through the D-BUS and called from different application (client) 
bool Show(const QString &in0) 
{ 
    QDBusConnection connection = QDBusConnection::connectToBus(QDBusConnection::SessionBus, "org.freedesktop.DBus"); 

    if(connection.isConnected()) 
    { 
     qDebug() << "Sender PID " << connection.interface()->servicePid( QDBusConnection::sender().baseService()).value(); 
    } 

} 
} 

Edit:

Как получить PID из удаленного приложения через D-BUS (Qt)

// this class receive D-BUS methods 
class Server: public QObject, protected QDBusContext { 

public slots: 

    bool SomeMethod(const QString &name) 
    { 
    qDebug() << "PID is: " << connection().interface()->servicePid(message().service()); 
    } 

}

ответ

1

1) const QDBusMessage & QDBusContext :: message() const Возвращает сообщение, сгенерировавшее этот вызов.

2) QString QDBusMessage :: service() const Возвращает имя службы или адрес шины удаленного вызова метода.

3) QDBusReply QDBusConnectionInterface :: servicePid (Const QString & ServiceName) Const Возвращает идентификатор процесса Unix (PID) для процесса в настоящее время удерживая ServiceName шины службы.

1

Вы смотрели в получении зарегистрированный класс от QDBusContext еще ? Это должно дать вам дополнительную информацию в вашем слоте.

+0

соединение(). BaseService() такие же, как у QDBusConnection :: sender(). BaseService(). Мне нужно получить информацию о вызывающем абоненте не обо мне. Как получить что-то о процессе звонка? Мне нужно получить имя шины соединения для извлечения PID из org.freedesktop.DBus.GetConnectionUnixProcessID – Dmitry

Смежные вопросы