2012-03-28 11 views
5

Próbuję napisać skrypt bash, który uruchomi program (konsole) i wyśle ​​do niego wiadomości dbus. Oto mój eksperymentmapowanie pid na numery usług qdbus po uruchomieniu

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

ten wyprowadza

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

Nazwa usługi qdbus jest zawsze org.kde.konsole-{pid+epsilon} ale część epsilon jest nieprzewidywalny.

W moim skrypcie basha, w jaki sposób uzyskać dokładną nazwę usługi qdbus dla konkretnej instancji konsoli, którą właśnie zainicjowałem?


Oto paskudny, hacky rozwiązanie

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` 

ale na pewno istnieje lepszy sposób!

Odpowiedz

0

Spróbuj uruchomić nową instancję Konsole za pomocą interfejsu D-Bus API z qdbus org.kde.konsole /Konsole newSession. Zwróci identyfikator sesji, który będzie można później wykorzystać do sterowania nim za pomocą wywołania usługi /Session/$SID usługi org.kde.konsole.

+4

'Usługa 'org.kde.konsole' nie istnieje." Ale jeśli uruchomię konsole ręcznie, serwis "org.kde.konsole.12345" (lub podobny) istnieje. 'qdbus | grep konsole' nie wyświetla żadnych wyników, chyba że używam co najmniej jednej konsoli. – spraff

Powiązane problemy