[PATCH weston v2] screen-share: Allow fullscreen shell command to be configured
Jason Ekstrand
jason at jlekstrand.net
Fri May 2 06:53:54 PDT 2014
Yeah, this looks better.
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
On Fri, May 2, 2014 at 4:01 AM, Andrew Wedgbury <andrew.wedgbury at realvnc.com
> wrote:
> I've updated this based on comments, simplifying the command handling.
>
> Currently the screen-share module uses a hard-coded command to start the
> fullscreen shell server. This patch causes the module to read the command
> from
> the weston config file (from the "command" key in the "screen-share"
> section).
> The default value remains the same (i.e. to run weston with the RDP
> backend and
> fullscreen shell), but is now located in the weston config file.
>
> As well as allowing the arguments to the fullscreen shell server to be
> changed,
> this also permits an alternative fullscreen shell server to be used if
> required,
> without needing to recompile. Since the command is run as the user running
> weston, this should not pose any additional security risk.
>
> Signed-off-by: Andrew Wedgbury <andrew.wedgbury at realvnc.com>
> ---
> src/screen-share.c | 44 ++++++++++++++++++++++++++++++--------------
> weston.ini.in | 3 +++
> 2 files changed, 33 insertions(+), 14 deletions(-)
>
> diff --git a/src/screen-share.c b/src/screen-share.c
> index 6f60b81..f9dcba1 100644
> --- a/src/screen-share.c
> +++ b/src/screen-share.c
> @@ -32,6 +32,7 @@
> #include <signal.h>
> #include <linux/input.h>
> #include <errno.h>
> +#include <ctype.h>
>
> #include <wayland-client.h>
>
> @@ -101,6 +102,11 @@ struct ss_shm_buffer {
> pixman_image_t *pm_image;
> };
>
> +struct screen_share {
> + struct weston_compositor *compositor;
> + char *command;
> +};
> +
> static void
> ss_seat_handle_pointer_enter(void *data, struct wl_pointer *pointer,
> uint32_t serial, struct wl_surface *surface,
> @@ -982,13 +988,18 @@ shared_output_destroy(struct shared_output *so)
> }
>
> static struct shared_output *
> -weston_output_share(struct weston_output *output,
> - const char *path, char *const argv[])
> +weston_output_share(struct weston_output *output, const char* command)
> {
> int sv[2];
> char str[32];
> pid_t pid;
> sigset_t allsigs;
> + char *const argv[] = {
> + "/bin/sh",
> + "-c",
> + (char*)command,
> + NULL
> + };
>
> if (socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, sv) < 0) {
> weston_log("weston_output_share: socketpair failed: %m\n");
> @@ -1025,7 +1036,7 @@ weston_output_share(struct weston_output *output,
> snprintf(str, sizeof str, "%d", sv[1]);
> setenv("WAYLAND_SERVER_SOCKET", str, 1);
>
> - execv(path, argv);
> + execv(argv[0], argv);
> weston_log("weston_output_share: exec failed: %m\n");
> abort();
> } else {
> @@ -1056,7 +1067,7 @@ share_output_binding(struct weston_seat *seat,
> uint32_t time, uint32_t key,
> void *data)
> {
> struct weston_output *output;
> - const char *path = BINDIR "/weston";
> + struct screen_share *ss = data;
>
> if (!seat->pointer) {
> weston_log("Cannot pick output: Seat does not have
> pointer\n");
> @@ -1071,23 +1082,28 @@ share_output_binding(struct weston_seat *seat,
> uint32_t time, uint32_t key,
> return;
> }
>
> - char *const argv[] = {
> - "weston",
> - "--backend=rdp-backend.so",
> - "--shell=fullscreen-shell.so",
> - "--no-clients-resize",
> - NULL
> - };
> -
> - weston_output_share(output, path, argv);
> + weston_output_share(output, ss->command);
> }
>
> WL_EXPORT int
> module_init(struct weston_compositor *compositor,
> int *argc, char *argv[])
> {
> + struct screen_share *ss;
> + struct weston_config_section *section;
> +
> + ss = zalloc(sizeof *ss);
> + if (ss == NULL)
> + return -1;
> + ss->compositor = compositor;
> +
> + section = weston_config_get_section(compositor->config,
> "screen-share",
> + NULL, NULL);
> +
> + weston_config_section_get_string(section, "command", &ss->command,
> "");
> +
> weston_compositor_add_key_binding(compositor, KEY_S,
> MODIFIER_CTRL | MODIFIER_ALT,
> - share_output_binding,
> compositor);
> + share_output_binding, ss);
> return 0;
> }
> diff --git a/weston.ini.in b/weston.ini.in
> index 2c39177..1f216a7 100644
> --- a/weston.ini.in
> +++ b/weston.ini.in
> @@ -65,3 +65,6 @@ path=@libexecdir@/weston-keyboard
> #constant_accel_factor = 50
> #min_accel_factor = 0.16
> #max_accel_factor = 1.0
> +
> +[screen-share]
> +command=@bindir@/weston --backend=rdp-backend.so
> --shell=fullscreen-shell.so --no-clients-resize
> --
> 1.9.2
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20140502/74d76a65/attachment.html>
More information about the wayland-devel
mailing list