2012-03-28 5 views
5

Ich versuche, ein Bash-Skript zu schreiben, die ein Programm (Konsole) starten und dbus Nachrichten an es senden wird. Hier ist mein VersuchMapping Pid zu Qdbus Service-Nummern nach dem Start

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

Diese gibt

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

Der qdbus Service-Name ist immer org.kde.konsole-{pid+epsilon} aber der epsilon Teil ist unberechenbar.

In meinem Bash-Skript, wie bekomme ich den genauen qdbus Service-Namen für die bestimmte Konsole-Instanz, die ich gerade erzeugt habe?


Hier ist eine böse, hacky Lösung

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` 

aber sicher gibt es einen besseren Weg!

Antwort

0

Versuchen Sie, eine neue Konsole-Instanz über die D-Bus-API mit qdbus org.kde.konsole /Konsole newSession zu starten. Es wird Sitzungs-ID zurückgeben, die später verwendet werden kann, um es mit Aufrufen zu /Session/$SID Objekt des org.kde.konsole-Dienstes zu steuern.

+4

'Service 'org.kde.konsole' existiert nicht. Aber wenn ich Konsole manuell starte, dann existiert der Service' org.kde.konsole.12345' (oder ähnlich). 'qdbus | grep konsole' listet keine Ergebnisse auf, wenn ich nicht mindestens eine Konsole betreibe. – spraff

Verwandte Themen