2012-03-28 3 views
5

Sto provando a scrivere uno script bash che avvierà un programma (konsole) e invierà messaggi dbus. Qui è il mio esperimentomapping pid ai numeri di servizio qdbus dopo l'avvio

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

Emette

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

Il nome del servizio è sempre qdbus org.kde.konsole-{pid+epsilon} ma la parte Epsilon è imprevedibile.

Nel mio script bash, come ottengo il nome esatto del servizio qdbus per la particolare istanza di konsole che ho appena generato?


Ecco una brutta soluzione 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` 

ma sicuramente c'è un modo migliore!

risposta

0

Provare ad avviare la nuova istanza di Konsole tramite l'API D-Bus con qdbus org.kde.konsole /Konsole newSession. Restituisce l'ID di sessione che può essere utilizzato in seguito per controllarlo con le chiamate all'oggetto /Session/$SID del servizio org.kde.konsole.

+4

'Servizio 'org.kde.konsole' non esiste. Ma se lancio manualmente konsole, il servizio' org.kde.konsole.12345' (o simile) esiste. 'qdbus | grep konsole' non elenca risultati se non eseguo almeno una konsole. – spraff

Problemi correlati