[lxc-devel] [PATCH] add console to lxc api

Serge Hallyn serge.hallyn at ubuntu.com
Wed May 29 17:38:02 UTC 2013


Quoting Dwight Engen (dwight.engen at oracle.com):
> On Wed, 29 May 2013 09:24:40 -0500
> Serge Hallyn <serge.hallyn at ubuntu.com> wrote:
> 
> > Quoting Dwight Engen (dwight.engen at oracle.com):
> > > Make lxc_cmd_console() return the fd from the socket connection to
> > > the caller. This fd keeps the tty slot allocated until the caller
> > > closes it. Returning the fd allows for a long lived process to
> > > close the fd and reuse consoles.
> > > 
> > > Add API function for console allocation.
> > > 
> > > Create test program for console API.
> > > 
> > > Signed-off-by: Dwight Engen <dwight.engen at oracle.com>
> > 
> > It looks good and tests fine, so overall
> > 
> > Acked-by: Serge E. Hallyn <serge.hallyn at ubuntu.com>
> > 
> > However, do you think it would be better to call this function
> > lxcapi_console_getfd(), and have lxcapi_console() be a higher
> > level function which actually runs the lxc_mainloop() the
> > way lxc_console() does, either binding to the caller's fds
> > 0,1,2, or to 3 passed-in fds?
> 
> Yeah, APIizing this has some questions:
> 
> There currently isn't an lxc_console() that I can see despite there
> being a prototype in lxc.h :) Do you mean that lxcapi_console()
> essentially be the guts of what is now lxc_console.c? Including setup of
> tios, sigwinch handler and mainloop callbacks? I'm fine with doing that
> just want to be sure I know what you mean :)

That would be my thought.

> I think essentially this would mean moving those things from
> lxc_console.c to console.c. Doing this would make it easy to write your
> own lxc-console with only one call, but I'm not sure how useful that is
> without being able to override parts (ie. supply your own mainloop
> callbacks for instance). How are people going to want to use/bind to
> this functionality?

I'm not sure how real people would use this.  For me it would just be

	sudo python3
	import lxc
	c=lxc.Container('dir1', None)
	c.console()

or going to purely do-what-i-mean code:
	x = vte.Terminal()
	c.console(x.stdin, x.stdout, x.stderr)

I bet Stéphane has a better idea :)

-serge




More information about the lxc-devel mailing list