【问题标题】:dbus-send not working in shell scriptdbus-send 在 shell 脚本中不起作用
【发布时间】:2016-06-30 07:06:24
【问题描述】:

我想在我的笔记本电脑 (Debian 8) 和我的智能手机 (Android) 之间建立蓝牙连接。

在 arch linux wiki (https://wiki.archlinux.org/index.php/android_tethering#Tethering_via_Bluetooth) 我找到了这个命令:bus-send --system --type=method_call --dest='org.bluez' '/org/bluez/hci0/dev_C0_EE_FB_20_D7_00' org.bluez.Network1.Connect string:'nap'

当我在普通终端中执行它时,一切正常。出于我的目的,我需要在 QT 应用程序中调用此命令。因此,我创建了一个 shell 脚本。但是在执行脚本时没有任何反应。在新 shell (sh) 中调用命令时结果相同。

有人知道如何让这个工作或其他方式工作吗?我的普通终端是默认的 Debian 终端,'Root Terminal'。

谢谢

【问题讨论】:

  • 我会先检查脚本运行的环境,例如它是否有会话总线(我假设您正在使用)等。如果未设置环境变量 DBUS_SESSION_BUS_ADDRESS,您可以在 dbus-send 命令中使用其他地址或在调用之前设置变量。如果您从 Qt 应用程序运行它,请查看如何将当前环境复制到将进行调用的环境中。
  • 感谢您的回答。其他 dbus-send 命令有效。我现在使用 QTs DBus 类和方法来管理它。

标签: linux qt shell bluetooth dbus


【解决方案1】:

我使用 QDBus 对象解决了这个问题。首先我创建了以下两种方法:

QString MainWindow::getDBusInterface(){
    QString interface = "/org/bluez/hci0/dev";
    QStringList macParts = ui->selectedMac->text().toUpper().split(":");
    for (int i = 0; i < macParts.length(); i++){
        interface.append("_").append(macParts[i]); //MAC address to connect to from GUI
    }
    return interface;
}

QDBusMessage MainWindow::sendDBus(QString destination, QString path, QString interface, QString method, QList<QVariant> arguments){
    QDBusMessage response;


    QDBusConnection system = QDBusConnection::systemBus();
    if (!system.isConnected())
    {
        qFatal("Cannot connect to the D-Bus session bus.");
        return response;
    }

    QDBusMessage message2 = QDBusMessage::createMethodCall(destination, path, interface, method);

    message2.setArguments(arguments);


    // synchronous call (not recommended, blocking)
    response = QDBusConnection::systemBus().call(message2);
    qDebug() << "response is: " << response;

    return response;
}

最后我打电话:

QString interface = getDBusInterface();

QList<QVariant> arguments;
arguments.append("nap");
QDBusMessage response = sendDBus("org.bluez",
                                     interface,
                                     "org.bluez.Network1",
                                     "Connect",
                                     arguments);

【讨论】:

    猜你喜欢
    • 2016-07-10
    • 2017-06-21
    • 2013-12-03
    • 1970-01-01
    • 2015-01-07
    • 2018-09-04
    • 1970-01-01
    • 2013-04-29
    相关资源
    最近更新 更多