Portál AbcLinuxu, 16. prosince 2025 07:12
#!/usr/bin/env python
import sys, os
zprava = sys.__stdin__.read()
os.system("wall " + zprava)
os.system("kdialog --msgbox \"" + zprava + "\"")(pozn. nejsem zrovna python guru)xwall a dal jsem ho do /etc/apcupsd/. V /etc/apcupsd/apccontrol jsem upravil řádek WALL=wall na WALL=/etc/apcupsd/xwall. Taky jsem přidal roota do seznamu uživatelů, kteří mají povoleno připojit se k X serveru pomocí xhost +local:root a tento příkaz nechávám spouštět vždy po přihlášení. Při testech v konzoli mi skriptík fungoval bez problémů, při zkoušce výpadku proudu taky (včera), ale dneska (po rebootu) se mi v X nezobrazí nic, jen v konzoli. Logy mlčí, jen ve /var/log/everything.log se objeví řádek Aug 2 19:53:24 mycomp wall[16225]: wall: user root broadcasted 1 lines (52 chars). Nevíte někdo, co by s tím mohlo být, popř. co s tím dělat?
apcupsd spustím z emulátoru terminálu v X, tak vše funguje, jak má. Otázka tedy zní: jak zařídit, aby se aplikace, která je spuštěná z textové konzole (ještě před startem X) mohla házet hlášky i v X? Byl bych rád, kdyby nebylo nutné použít dalšího démona (stávající řešení).
/etc/apcupsd/apccontrol jsem změnil řádek s WALL na WALL="tee /etc/apcupsd/events | wall", vytvořil jsem pojmenovanou rouru (mkfifo /etc/apcupsd/events) a napsal si takový malý skriptík, který se mi spouští vždy při přihlášení. #!/usr/bin/env python
import os
zprava = ""
while True:
fifo = open("/etc/apcupsd/events")
zprava = fifo.read()
fifo.close()
os.system("kdialog --msgbox \"" + zprava + "\"")
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.