如何通过DBus命令获取Nemo文件管理器打开窗口及执行GetMachineID
Nemo窗口DBus操作解决方案
1. 统计已打开的Nemo窗口数量
通过DBus的Introspect接口获取/org/Nemo下的窗口节点并统计数量,以下是两种可行命令:
方法一(使用gdbus)
gdbus introspect --session --dest org.Nemo --object-path /org/Nemo | grep -E 'node "window/[0-9]+"' | wc -l
方法二(使用dbus-send)
dbus-send --session --type=method_call --print-reply=literal --dest=org.Nemo /org/Nemo org.freedesktop.DBus.Introspectable.Introspect | grep -o 'window/[0-9]*' | sort -u | wc -l
原理:调用org.freedesktop.DBus.Introspectable.Introspect方法获取节点结构,过滤出所有window/数字格式的子节点,最终统计数量。
2. 为每个Nemo窗口执行GetMachineID命令
遍历所有窗口的DBus路径,逐个调用GetMachineID方法,以下是两种实现方式:
方法一(使用dbus-send)
for window_path in $(gdbus introspect --session --dest org.Nemo --object-path /org/Nemo | grep -E 'node "window/[0-9]+"' | sed 's/node "\(window\/[0-9]\+\)"/\/org\/Nemo\/\1/'); do dbus-send --session --type=method_call --print-reply --dest=org.Nemo "$window_path" org.Nemo.Window.GetMachineID done
方法二(使用gdbus)
for window_path in $(gdbus introspect --session --dest org.Nemo --object-path /org/Nemo | grep -E 'node "window/[0-9]+"' | sed 's/node "\(window\/[0-9]\+\)"/\/org\/Nemo\/\1/'); do gdbus call --session --dest org.Nemo --object-path "$window_path" --method org.Nemo.Window.GetMachineID done
原理:先提取所有窗口的完整DBus路径,再通过循环对每个路径调用org.Nemo.Window.GetMachineID方法,返回对应窗口的MachineID。
内容的提问来源于stack exchange,提问作者Ahmad Ismail
相关产品推荐
相关产品推荐

