Dire che voglio ottenere a livello di programmazione il nome dell'interfaccia della mia scheda ethernet. Questo sembra funzionare:È possibile recuperare una proprietà D-Bus senza chiamare org.freedesktop.DBus.Properties.Get?
dbus-send --print-reply \
--type=method_call \
--system \
--dest=org.freedesktop.NetworkManager \
/org/freedesktop/NetworkManager/Devices/0 \
org.freedesktop.DBus.Properties.Get \
string:org.freedesktop.NetworkManager.Device \
string:Interface
che restituisce:
method return sender=:1.5 -> dest=:1.135 reply_serial=2
variant string "eth0"
C'è qualche modo di tagliare fuori gli intermediari org.freedesktop.DBus.Properties.Get
e recuperare la proprietà più direttamente? Ahimè, definendolo come un metodo non funziona:
dbus-send --print-reply \
--type=method_call \
--system \
--dest=org.freedesktop.NetworkManager \
/org/freedesktop/NetworkManager/Devices/0 \
org.freedesktop.NetworkManager.Device.Interface
Returns:
Error org.freedesktop.DBus.Error.UnknownMethod:
Method "Interface" with signature "" on interface
"org.freedesktop.NetworkManager.Device" doesn't exist
Lo chiedo perché dover chiamare org.freedesktop.DBus.Properties.Get
sembra dover chiamare un object.getProp("someproperty")
invece di object.getSomeProperty()
in Python/Java/etc .
è un peccato che il miglior strumento da riga di comando dbus è distribuito con qt, e non dbus. – olejorgenb
Vale la pena notare che, internamente, 'qdbus' * chiamerà' org.freedesktop.DBus.Properties.Get' o 'org.freedesktop.DBus.Properties.GetAll', o otterrà le proprietà dai segnali di' org .freedesktop.DBus.ObjectManager'. A livello di protocollo, questo è un requisito. –