Я провел четыре часа в глубоком поиске :), но не нашел: Как получить PID от отправителя DBUS из Qt.
Из других библиотек dbus это довольно просто:
Вызовите 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();
}
}
}
Редактировать:
Как получить 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() );
}
}