如何使用dbus-send复现通过dbus-monitor捕获的DBus方法调用
Chromium OS DBus RestartJob 调用复现方案
核心参数说明
你捕获的调用核心参数如下,可直接对应到复现命令中:
- 总线类型:系统总线
- 目标服务:
org.chromium.SessionManager - 对象路径:
/org/chromium/SessionManager - 接口:
org.chromium.SessionManagerInterface - 方法名:
RestartJob - 入参顺序:Unix域套接字文件描述符 → Chrome启动参数字符串数组 → uint32类型值0
前置注意
RestartJob方法要求传递Unix域套接字文件描述符,原生dbus-send默认不支持文件描述符传递,可选择两种方案复现:开启FD传递参数的dbus-send方案,或Chromium OS默认预装、对FD传递支持更好的gdbus方案。
方案1:使用dbus-send复现
需提前创建Unix域套接字并通过继承方式传递给dbus-send,以root身份执行如下命令:
# 绑定Unix域套接字到文件描述符3 exec 3<>/dev/unix/socket # 执行DBus调用,传递FD 3 dbus-send --system --print-reply --dest=org.chromium.SessionManager \ --pass-fd=3 \ /org/chromium/SessionManager \ org.chromium.SessionManagerInterface.RestartJob \ array:string:"/opt/google/chrome/chrome","--gpu-sandbox-failures-fatal=no","--enable-logging","--use-cras","--use-gl=egl","--user-data-dir=/home/chronos","--vmodule=*night_light*=1,*/ash/wm/tablet_mode/*=1,wizard_controller=1,*/webui/chromeos/login/*=1,*/browser/chromeos/login/screens/*=1,enrollment_screen_handler=1,*/browser/chromeos/login/enrollment/*=1,*/ui/ozone/*=1,*/ui/display/manager/chromeos/*=1","--enable-wayland-server","--aura-legacy-power-button","--login-profile=user","--system-developer-mode","--bwsi","--homepage=chrome://newtab/","--incognito","--log-level=1","--login-user=\$guest" \ uint32:0
方案2:使用gdbus复现(推荐)
gdbus原生支持文件描述符传递,命令更简洁,以root身份执行即可:
gdbus call --system --dest org.chromium.SessionManager \ --object-path /org/chromium/SessionManager \ --interface org.chromium.SessionManagerInterface \ --method RestartJob \ --unix-fd 3 \ "['/opt/google/chrome/chrome', '--gpu-sandbox-failures-fatal=no', '--enable-logging', '--use-cras', '--use-gl=egl', '--user-data-dir=/home/chronos', '--vmodule=*night_light*=1,*/ash/wm/tablet_mode/*=1,wizard_controller=1,*/webui/chromeos/login/*=1,*/browser/chromeos/login/screens/*=1,enrollment_screen_handler=1,*/browser/chromeos/login/enrollment/*=1,*/ui/ozone/*=1,*/ui/display/manager/chromeos/*=1', '--enable-wayland-server', '--aura-legacy-power-button', '--login-profile=user', '--system-developer-mode', '--bwsi', '--homepage=chrome://newtab/', '--incognito', '--log-level=1', '--login-user=$guest']" \ 0
其他说明
- 所有命令必须以root权限执行,否则无权限访问Session Manager的系统总线接口
- 如果无需和重启后的Chrome进程做后续通信,临时创建的Unix域套接字可正常使用,不会影响调用执行
- 若要保留
$guest为字面量参数,可将对应参数用单引号包裹,避免shell将其解析为变量
内容的提问来源于stack exchange,提问作者S-K
相关产品推荐
相关产品推荐

