我需要使用 UDisks2 列出、过滤和打开块设备。我正在尝试列出所有可移动设备。
UDisks2 提供的GetBlockDevices
方法a{sv}
需要一个类型。如果我没记错的话,它是字符串键和 Variant 值的 HashTable。
如何使用此信息列出设备?到目前为止,我尝试了以下方法:
import std.stdio, ddbus;
void main()
{
Connection conn = connectToBus();
PathIface obj = new PathIface(conn, "org.freedesktop.UDsks2",
"/org/freedesktop/UDisks2/Manager", "org.freedesktop.UDisks2.Manager");
writeln(obj.call!string("GetBlockDevices", "org.freedesktop.DBus", ???));
}
该call
方法需要一个Arg
at 作为它的最后一个参数。我怎样才能a{sv}
在那里提供?
我正在使用ddbus
图书馆。
对于 args,我使用Variant!string[string]
Variant 本身是一个模板类型。我还从调用方法参数中删除了多余的“org.freedesktop.DBus”。
import std.stdio, ddbus;
import ddbus: Variant;
void main()
{
Connection conn = connectToBus();
PathIface obj = new PathIface(conn, "org.freedesktop.DBus",
"/org/freedesktop/UDisks2/Manager", "org.freedesktop.UDisks2.Manager");
Variant!string[string] arg;
writeln(obj.call!string("GetBlockDevices", arg));
}
但是我收到以下错误:
ddbus.exception.DBusException@../../.dub/packages/ddbus-2.3.0/ddbus/source/ddbus/thin.d(833):org.freedesktop.DBus 不理解消息 GetBlockDevices