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