[PATCH weston 1/8] weston-launch: Run weston in the user login shell
Kristian Høgsberg
hoegsberg at gmail.com
Fri May 17 13:30:06 PDT 2013
On Fri, May 17, 2013 at 04:20:37PM +0200, Quentin Glidic wrote:
> From: Quentin Glidic <sardemff7+git at sardemff7.net>
>
> This patch brings back the user environment from the shell.
> In the future, weston-launch could create the Wayland socket earlier, in
> which case the user's shell could be used to run Wayland-specific tools
> in the new Weston session.
Yeah, this is better, committed.
Kristian
> Signed-off-by: Quentin Glidic <sardemff7+git at sardemff7.net>
> ---
> src/weston-launch.c | 19 ++++++++++++++++---
> 1 file changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/src/weston-launch.c b/src/weston-launch.c
> index 64d4a8a..89c3c5a 100644
> --- a/src/weston-launch.c
> +++ b/src/weston-launch.c
> @@ -60,6 +60,8 @@
>
> #include "weston-launch.h"
>
> +#define MAX_ARGV_SIZE 256
> +
> struct weston_launch {
> struct pam_conv pc;
> pam_handle_t *ph;
> @@ -523,8 +525,9 @@ main(int argc, char *argv[])
> struct weston_launch wl;
> char **env;
> int i, c;
> - char **child_argv;
> + char *child_argv[MAX_ARGV_SIZE];
> char *tty = NULL, *new_user = NULL;
> + char *term;
> int sleep_fork = 0;
> struct option opts[] = {
> { "user", required_argument, NULL, 'u' },
> @@ -562,8 +565,8 @@ main(int argc, char *argv[])
> }
> }
>
> - child_argv = &argv[optind-1];
> - child_argv[0] = BINDIR "/weston";
> + if ((argc - optind) > (MAX_ARGV_SIZE - 5))
> + error(1, E2BIG, "Too many arguments to pass to weston");
>
> if (new_user)
> wl.pw = getpwnam(new_user);
> @@ -572,7 +575,17 @@ main(int argc, char *argv[])
> if (wl.pw == NULL)
> error(1, errno, "failed to get username");
>
> + child_argv[0] = wl.pw->pw_shell;
> + child_argv[1] = "-l";
> + child_argv[2] = "-c";
> + child_argv[3] = BINDIR "/weston \"$@\"";
> + child_argv[4] = "weston";
> + for (i = 0; i < (argc - optind); ++i)
> + child_argv[5+i] = argv[optind+i];
> +
> + term = getenv("TERM");
> clearenv();
> + setenv("TERM", term, 1);
> setenv("USER", wl.pw->pw_name, 1);
> setenv("LOGNAME", wl.pw->pw_name, 1);
> setenv("HOME", wl.pw->pw_dir, 1);
> --
> 1.8.2.3
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
More information about the wayland-devel
mailing list