Я использую библиотеку sdbus-cpp, чтобы проверить, как создать службу и получить доступ к ее методам и сигналам через клиент D-Bus. Библиотека предоставляет пример этого, который я тестировал и работал у меня. Однако в этом примере служба создается в сеансовой шине, и мне хотелось бы, чтобы она работала на системной шине. Это пример:
Серверная часть:
#include
#include
#include
int main(int argc, char *argv[])
{
// Create D-Bus connection to the (either system or session) bus and requests a well-known name on it.
sdbus::ServiceName serviceName{"org.sdbuscpp.concatenator"};
auto connection = sdbus::createBusConnection(serviceName);
// Create concatenator D-Bus object.
sdbus::ObjectPath objectPath{"/org/sdbuscpp/concatenator"};
auto concatenator = sdbus::createObject(*connection, std::move(objectPath));
auto concatenate = [&concatenator](const std::vector numbers, const std::string& separator)
{
// Return error if there are no numbers in the collection
if (numbers.empty())
throw sdbus::Error(sdbus::Error::Name{"org.sdbuscpp.Concatenator.Error"}, "No numbers provided");
std::string result;
for (auto number : numbers)
{
result += (result.empty() ? std::string() : separator) + std::to_string(number);
}
// Emit 'concatenated' signal
concatenator->emitSignal("concatenated").onInterface("org.sdbuscpp.Concatenator").withArguments(result);
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79336714/d-bus-client-not-receiving-signal-events-in-the-system-bus[/url]
Я использую библиотеку sdbus-cpp, чтобы проверить, как создать службу и получить доступ к ее методам и сигналам через клиент D-Bus. Библиотека предоставляет пример этого, который я тестировал и работал у меня. Однако в этом примере служба создается в сеансовой шине, и мне хотелось бы, чтобы она работала на системной шине. Это пример: Серверная часть: [code]#include #include #include
int main(int argc, char *argv[]) { // Create D-Bus connection to the (either system or session) bus and requests a well-known name on it. sdbus::ServiceName serviceName{"org.sdbuscpp.concatenator"}; auto connection = sdbus::createBusConnection(serviceName);
auto concatenate = [&concatenator](const std::vector numbers, const std::string& separator) { // Return error if there are no numbers in the collection if (numbers.empty()) throw sdbus::Error(sdbus::Error::Name{"org.sdbuscpp.Concatenator.Error"}, "No numbers provided");
std::string result; for (auto number : numbers) { result += (result.empty() ? std::string() : separator) + std::to_string(number); }
// Emit 'concatenated' signal concatenator->emitSignal("concatenated").onInterface("org.sdbuscpp.Concatenator").withArguments(result); std::cout