[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