5

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

konsole &
echo pid is $!
ps aux | grep konsole
qdbus | grep konsole

这输出

pid is 2726
me    2726  0.0  0.4  45404  9952 pts/0    S+   14:59   0:00 konsole
 org.kde.konsole-2729

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

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


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

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`

但肯定有更好的方法!

4

2 回答 2

0

尝试通过 D-Bus API 启动新的 Konsole 实例qdbus org.kde.konsole /Konsole newSession。它将返回会话 ID,以后可以通过调用服务/Session/$SID对象来控制它org.kde.konsole

于 2012-04-01T05:59:29.890 回答
0

您可以检查 qdbus 的 PPID,以查看相关的 konsole。

于 2020-04-04T13:35:37.273 回答