2014-07-11 6 views
6

GetAll zu nennen:Mit dbus-senden

dbus-send --system --print-reply \ 
    --dest=org.freedesktop.UDisks \ 
     /org/freedesktop/UIDisks/devices/md0 \ 
     org.freedesktop.DBus.Properties.GetAll \ 
     string:"" 

Wenn ich mit d-frei und „“ als Parameter senden getAll ich eine lange Liste von Ausgabe erhalten

oben nur den Code der Versuch gibt einen Fehler:

Error org.freedesktop.DBus.Error.UnknownMethod: Method "GetAll" with signature "s" on 
interface "org.freedesktop.DBus.Properties" doesn't exist 

So etwas mache ich falsch, aber ich habe keine Ahnung, was los ist. Ich habe nach einer Lösung gesucht, aber keine vernünftige Lösung gefunden. Vielleicht ist es zu trivial, aber ich habe keine Ahnung ....

Antwort

2

Sie müssen den Schnittstellennamen als Parameter für GetAll angeben. Dieses Beispiel funktioniert für mich (ich habe UDisks2 statt udisks aber ansonsten ist es ähnlich):

dbus-send --system --print-reply \ 
    --dest=org.freedesktop.UDisks2 \ 
    /org/freedesktop/UDisks2/block_devices/loop0 
    org.freedesktop.DBus.Properties.GetAll 
    string:"org.freedesktop.UDisks2.Block" 
+0

Sorry, wenn ich in einen leeren String in d-Füße geben erhalte ich: { 'DeviceAutomountHint': '', 'DeviceBlockSize': 512L, 'DeviceDetectionTime': 1405083881L, 'DeviceFile': ‚/ dev/md0 ', ' DeviceFileById ': ['/dev/disk/durch-id/md-uuid-d56d4165: 72b8959a: ea459adc: 678b0998 ', '/dev/disk/by-uuid/0bfac438-3d04-4d4e -a71c-2f4a3e63a8e9' ], 'DeviceFileByPath': [], 'DeviceFilePresentation': '/ dev/md0', 'DeviceIsDrive': Stimmt, 'DeviceIsLinuxDmmp': false, 'DeviceIsLinuxDmmpComponent': false, 'DeviceIsLinuxLoop': Falsch, 'DeviceIsLinuxLvm2LV': Falsch, 'DeviceIsLinuxLvm2PV': Falsch, .... – Friedrich

+0

So muss es eine awy wirklich GetAll Eigenschaften auf einmal sein. – Friedrich

0

Error org.freedesktop.DBus.Error.UnknownMethod: Method "GetAll" with signature "s" on interface "org.freedesktop.DBus.Properties" doesn't exist

Ich habe ähnliches Problem, ich laufe d-Füße, introspect Schnittstelle, und finden Sie heraus, , dass ich schreibe nicht "full/path/to/object", sondern nur "/ object", in deinem Fall nicht "/ org/freedesktop/UIDisks/devices/md0", sondern "/ md0".

Wenn dies nicht hilft, versuchen Sie, alle Parameter in dbus Anruf mit was d-Füße zu vergleichen, ich bin sicher, Sie finden Sie Problem.

0

I tried my luck with:

dbus-send --system --print-reply \ 
    --dest=org.freedesktop.UDisks \ 
    /org/freedesktop/UIDisks/devices/md0 \ 
    org.freedesktop.DBus.Properties.GetAll \ 
    string:"" 

Sie haben einen Tippfehler im Objektpfad: Sie setzen UIDisks statt UDisks. Das sollte Ihren Fehler beheben.


Adressierung Ihren Kommentar zu this answer über alle Eigenschaften auf einmal bekommen, wird der D-Bus specification nicht angeben, dass GetAll sollte eine leere Zeichenfolge für seine interface_name Argument akzeptieren, so ist es ein Fehler, wenn alle Dienste tun dies akzeptieren. Stattdessen müssen Sie GetAll einmal für jede der Schnittstellen auf dem Objekt aufrufen.

Der einfachste Weg, dies zu tun, ist eine höhere Ebene D-Bus-Dienstprogramm, wie gdbus oder D-Feet (wie Sie es versuchten). dbus-send ist für die einfache Interaktion auf niedriger Ebene mit D-Bus-Diensten konzipiert.

$ gdbus introspect --system --dest org.freedesktop.UDisks2 --object-path /org/freedesktop/UDisks2/block_devices/sda1 --only-properties 
node /org/freedesktop/UDisks2/block_devices/sda1 { 
    interface org.freedesktop.UDisks2.Partition { 
    properties: 
     readonly u Number = 1; 
     … 
    }; 
    interface org.freedesktop.UDisks2.Filesystem { 
    properties: 
     readonly aay MountPoints = [b'/boot/efi']; 
    }; 
    … 
}