[winswitch] A Hopefully Quick Question About Xpra.
Dan DaCosta
chaosape at gmail.com
Tue Nov 3 20:07:30 GMT 2015
Antoine:
Responses in-line.
On Tue, Nov 3, 2015 at 9:57 AM, Antoine Martin <antoine at nagafix.co.uk>
wrote:
> On 02/11/15 20:02, Dan DaCosta wrote:
> > Xpra Experts:
> >
> > I have hacked a little code into Xpra that takes screenshots of all
> windows
> > managed by Xpra and stores them locally as files. Specifically, I
> > accomplished this by adding a bit of code to the x11/server.py file. It
> is
> > nothing pretty;
> Can you post this code?
> We now have code that achieves something similar in trunk:
> http://xpra.org/trac/ticket/988
I added the following two functions to XpraServer and then started the
thread
on class initialization.
def schedule_pictures_thread(self):
while True:
self.idle_add(self.get_pictures)
time.sleep(1)
def get_pictures(self):
for wid in sorted(self._id_to_window.keys()):
if wid <= 1:
continue
window = self._id_to_window[wid]
try:
w, h = window.get_dimensions()
image = window.get_image( 0, 0, w, h,logger=log.info)
if (image == None):
continue
rgb = {
"XRGB" : "RGB",
"BGRX" : "RGB",
"RGBA" : "RGBA",
"BGRA" : "RGBA",
}.get(image.get_pixel_format(), image.get_pixel_format())
img = Image.frombuffer(rgb, (w, h), image.get_pixels(),
"raw",image.get_pixel_format(), image.get_rowstride())
img.save("/tmp/%d-%d.png" % (wid,self._image_count), "PNG")
self._image_count = self._image_count + 1
except:
traceback.print_exc()
> I was just interested in doing a little experimentation. I
> > have two issues that seemingly should be easy to fix but I have yet to
> > figure out how to hack around them:
> > 1) The server seems to be ignorant of any window pixmaps until the first
> > client attaches. Specifically, from my naive perspective, it seems like
> > Xpra cannot find the pixmap for any windows until the first attachment.
> Windows are not mapped onto the virtual screen until a client maps them
> somewhere on their desktop.
> And unmapped windows do not have pixmaps..
> 2) If, after an initial attach there are no attached clients, I can get
> > access to the window pixmaps but they are not updated unless someone is
> > attached, i.e, they remain in the same state as the last time there was
> an
> > attachment. Conceptually, it makes sense to avoid updating the pixmaps if
> > no one is attached but, for the life of me, I cannot find the switch that
> > turns pixmap updating on/off according to whether a client is attached or
> > not.
> If you share your code it will be easier to talk about it.
>
What I would like to do is keep the window mapped until its destruction.
This
way, I can take accurate screenshots of running programs regardless of if I
am attached to them. I believe I have found that calling the setup() window
method when it is initially created by the wm in _manage_client creates the
pixmap. Now, I would like to change a bit of code that will a) map a window
as soon as it is created by the wm and b) only unmap windows on
destruction. I am looking for some hints on where I should be making these
changes.
Thanks!
Dan DaCosta
> Cheers
> Antoine
> >
> > Thanks in Advance!
> > Dan DaCosta
> > _______________________________________________
> > shifter-users mailing list
> > shifter-users at lists.devloop.org.uk
> > http://lists.devloop.org.uk/mailman/listinfo/shifter-users
>
>
> _______________________________________________
> shifter-users mailing list
> shifter-users at lists.devloop.org.uk
> http://lists.devloop.org.uk/mailman/listinfo/shifter-users
>
More information about the shifter-users
mailing list