2012-03-28 10 views
5

プログラム(konsole)を起動し、dbusメッセージを送信するbashスクリプトを作成しようとしています。ここに私の実験起動時にpidをqdbusサービス番号にマッピング

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}ですが、イプシロン部分は予測不可能です。

私の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` 

だと、しかし確実に、より良い方法があります!

答えて

0

qdbus org.kde.konsole /Konsole newSessionでD-Bus APIを使用して新しいKonsoleインスタンスを起動してみてください。それは、後でorg.kde.konsoleサービスの/Session/$SIDオブジェクトへの呼び出しでそれを制御するために使用できるセッションIDを返します。

+4

'サービス 'org.kde.konsole'は存在しません.'しかし、私がkonsoleを手動で起動すると、サービス' org.kde.konsole.12345'(またはそれに類するもの)が存在します。 'qdbus |少なくとも1つのkonsoleを実行していない限り、grep konsole'は結果を表示しません。 – spraff

関連する問題