D-Bus figyelese bash scriptbol

Üdv!

A hal daemon D-Buson keresztül üzenget a nagyvilágnak, én meg szeretnem, ha egy bizonyos event eseten lefutna egy program. Erre nem szeretnék komolyabb programot írni, pythonhoz meg egyáltalán nem értek.

Ezért a kérdés az, hogy milyen módon lehet figyelni a D-Bus-t bash scriptből? Lehetséges egyáltalán?

A dbus-monitor elvileg alkalmas ilyesmire, azonban a probléma az, hogy nem lép ki, és addig nem tudom elindítani a kívánt programot, amíg kézzel le nem állítom.

Hozzászólások

Végül a problémám megoldom máshogy, de közben elkezdtem írni egy scriptet, ez lett belőle:


#!/bin/bash

dbus-monitor --system "interface=org.freedesktop.Hal.Device" > /tmp/dbus-monitor-output &

while true; do
	if [ "$(tail -n 1 /tmp/dbus-monitor-output|grep sleep|wc -l)" = "1" ]; then
		echo sleep
		killall dbus-monitor
		rm /tmp/dbus-monitor-output
		exit
	elif [ "$(tail -n 1 /tmp/dbus-monitor-output|grep power|wc -l)" = "1" ]; then
		echo power
		killall dbus-monitor
		rm /tmp/dbus-monitor-output
		exit
	fi
done

A lényeg: dbus-monitor kimenetét fileba irányítom, majd azt egy while true keretében olvasom vissza, és dolgozom fel.

A problémát egyébként az acpid helyrehozatala oldotta meg. :)

A fenti while true; do megoldás helyett szerencsésebb lenne, ha mkfifo paranccsal létrehozol egy pipe fájlt, és a kimenetet ebbe a "fájlba" irányítod. Ezután

while true; do
log="`head valami.pipe -n 1`";
....

paranccsal kiolvashatsz belőle egy sort. Előnye: nem fut végtelen sokszor, nem terheli a procit. Ha a dbus-monitor ír a fájlba, csak akkor fut tovább a kód.

valószínűleg az ivman azt teszi, amit szeretnél:)

—-—-—
int getRandomNumber() {
	return 4;//szabályos kockadobással választva.
}		//garantáltan véletlenszerű. xkcd