¿Cómo monitorear aplicaciones abiertas o ejecutadas en linux / tcl / python?

Estoy tratando de construir una aplicación de panel, igual que avant window navigator o ubuntu unity.

Mi pregunta es una vez que construyo el panel con las aplicaciones predeterminadas, ¿cómo puedo agregar elementos al panel cuando las aplicaciones están abiertas o iniciadas?

Aquí está mi código fuente en tcl:

package require Tk set items {xterm gvim firefox} wm withdraw . toplevel .panel wm attributes .panel -topmost 1 ; # on top bind .panel  {exit} wm geometry .panel +0+0 wm overrideredirect .panel yes ; # remove window decorations set counter 0 foreach item $items { incr counter set separator " " label .panel.$counter -text "$item$separator" -bg black -fg white \ -font {-family "Fixedsys Excelsior 3.01" -size 12} grid .panel.$counter -column $counter -row 0 } 

¿Hay algún comando de terminal, tcl o python que pueda lograr esto?

Apreciar cualquier información. Gracias de antemano.

Si el comando de send está activado (lo que depende de todo tipo de factores relacionados con la seguridad de su pantalla), puede indicarle que escuche un “nombre conocido” y luego que otra aplicación pequeña lo send para enviar un script. para evaluar.

En el panel, escuche un nombre “bueno”:

 package require Tk tk appname MyExcellentPanel proc registerItem args { # How to do the registration of things here } 

En el script de ayuda:

 #!/usr/bin/env wish package require Tk wm withdraw . ; # IMPORTANT! Don't show a GUI here send MyExcellentPanel registerItem $argv ; # The magic command exit ; # IMPORTANT! Exit now 

Ahora puede usar ese pequeño script desde un script de shell o desde cualquier lugar para enviar una instrucción al panel para registrar algo. Es tan fácil como eso.


Si el comando de send no está presente, pruebe el paquete comm en Tcllib, con comm::comm send como el equivalente aproximado de send . Sin embargo, no hay nada exactamente igual a tk appname ya que no hay una manera portátil de hacer un registro de asignaciones de puertos (comm usa canales TCP locales), por lo que necesita encontrar una manera de comunicar esa información (¿un archivo en un lugar bien conocido? ). Lamentablemente, no tengo mucha experiencia con eso, así que no puedo aconsejarlo en detalle.