启动后将pid映射到qdbus服务号码

spr*_*aff 5 bash pid dbus qdbus

我正在尝试编写一个bash脚本,它将启动一个程序(konsole)并向其发送dbus消息.这是我的实验

konsole &
echo pid is $!
ps aux | grep konsole
qdbus | grep konsole
Run Code Online (Sandbox Code Playgroud)

这输出

pid is 2726
me    2726  0.0  0.4  45404  9952 pts/0    S+   14:59   0:00 konsole
 org.kde.konsole-2729
Run Code Online (Sandbox Code Playgroud)

qdbus服务名称始终是,org.kde.konsole-{pid+epsilon}但epsilon部分是不可预测的.

在我的bash脚本中,如何获取我刚刚生成的特定konsole实例的确切qdbus服务名称?


这是一个讨厌,黑客的解决方案

qdbus | grep konsole | sed 's/[^0-9]//g' > /tmp/before
konsole &
sleep 1
qdbus | grep konsole | sed 's/[^0-9]//g' > /tmp/after

N=`sort /tmp/before /tmp/after | uniq -u`
Run Code Online (Sandbox Code Playgroud)

但肯定有更好的方法!

rkh*_*rov 0

尝试通过 D-Bus API 使用qdbus org.kde.konsole /Konsole newSession. 它将返回会话 ID,稍后可用于通过调用服务/Session/$SID对象来控制它org.kde.konsole

  • `服务'org.kde.konsole'不存在。`但是如果我手动启动konsole,则服务`org.kde.konsole.12345`(或类似的)存在。`qdbus | grep konsole` 不会列出任何结果,除非我至少运行一个 konsole。 (4认同)