[python] PyGTK, crontab, a já :)

Filip Štědronský regnarg na seznam.cz
Úterý Únor 3 20:44:36 CET 2009


Dne 3.2.2009 20:37:10 napsal slush:
> Je to, jak psal Filip, složitější, každopádně to má řešení.
> 
> a) v crontabu by na začátku měla být korektně nastavena proměnná
> DISPLAY,
> která řekne aplikaci, s kterým X serverem má povídat. Případně jsem
> teď
> našel čistě pythoní řešení na
> http://www.le-web.org/2008/11/06/pygtk-how-to-display-a-systray-icon-
> from-a-cronjob/
> 
> b) D-BUS funguje na principu klient (Vaše aplikace) - server (DBUS
> daemon)
> modelu. Pokud aplikaci pouštíte jako root, může komunikovat jen se
> systémovou DBUS sběrnicí (na které mmj visí HAL apod). Pokud je
> crontab
> uživatelův, aplikace si může vybrat systémovou nebo session sběrnici
> (existuje separátně pro každého přihlášeného uživatele). Co děláte v
> aplikaci špatně je, že předpokládáte, že DBUS již běží. Já bych to
> řešil
> periodickým pokusem o připojení a při neúspěchu neukončoval aplikaci
> (a
> předpokládal, že dbus za chvíli naběhne).

Ono je to ještě složitější, protože u X jsou různé autentizační
mechanismy, navíc to neřeší, když je uživatel přihlášen 
vícenásobně (což asi nebude, ale principiálně vzato). S D-BUSem
je to ještě horší, protože aby mělo jeho použití smysl (např.
spolu s libnotify), museli bychom se napojit na _uživatelův_
D-BUS session, ne nějaký další, a jeho adresu asi není dobrá
šance jednoduše zjistit. I když ty hlášky ohledně D-BUSU možná
jen generuje PyGTK a třeba jej aplikace k ničemu rozumnému
nepoužívá... nejspíš ani nejsou fatální. Tohle řešení by při
dobré vůli fungovat mohlo, ale přinejmenším systematicky vzato
je asi lepší jít na to jinak.

Krásný zbytek večera všem,
Filip Š.

-- 
regnarg na matfyz.czhttp://regnarg.matfyz.czregnarg na jabber.cz
————————————————————————————————————————————————————————————————
Loving someone is giving them the power to hurt you,but trusting
them not to. --Anonymous • Take away love, and our earth is a 
tomb. --Robert Browning • Death cannot stop true love. All it 
can do is delay it for a while. --''The Princess Bride''




Další informace o konferenci Python