meta-weston-launch: Call VT_ACTIVATE ourselves
We don't need any special permissions, so we don't need to go through weston-launch to do so...
This commit is contained in:
parent
a3de799939
commit
ebe6e3180e
@ -56,6 +56,9 @@
|
|||||||
|
|
||||||
#ifdef HAVE_WAYLAND
|
#ifdef HAVE_WAYLAND
|
||||||
#include "meta-wayland-private.h"
|
#include "meta-wayland-private.h"
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <linux/vt.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define SCHEMA_COMMON_KEYBINDINGS "org.gnome.desktop.wm.keybindings"
|
#define SCHEMA_COMMON_KEYBINDINGS "org.gnome.desktop.wm.keybindings"
|
||||||
@ -4083,6 +4086,18 @@ handle_set_spew_mark (MetaDisplay *display,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_WAYLAND
|
#ifdef HAVE_WAYLAND
|
||||||
|
static gboolean
|
||||||
|
activate_vt (int vt)
|
||||||
|
{
|
||||||
|
int tty, reply;
|
||||||
|
|
||||||
|
tty = open ("/dev/tty", O_RDWR | O_NOCTTY | O_CLOEXEC);
|
||||||
|
reply = ioctl (tty, VT_ACTIVATE, vt);
|
||||||
|
close (tty);
|
||||||
|
|
||||||
|
return (reply == 0);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
handle_switch_vt (MetaDisplay *display,
|
handle_switch_vt (MetaDisplay *display,
|
||||||
MetaScreen *screen,
|
MetaScreen *screen,
|
||||||
@ -4091,28 +4106,10 @@ handle_switch_vt (MetaDisplay *display,
|
|||||||
MetaKeyBinding *binding,
|
MetaKeyBinding *binding,
|
||||||
gpointer dummy)
|
gpointer dummy)
|
||||||
{
|
{
|
||||||
gint vt = binding->handler->data;
|
gint vt = binding->handler->data;
|
||||||
MetaWaylandCompositor *compositor;
|
|
||||||
MetaLauncher *launcher;
|
|
||||||
|
|
||||||
compositor = meta_wayland_compositor_get_default ();
|
if (!activate_vt (vt))
|
||||||
launcher = meta_wayland_compositor_get_launcher (compositor);
|
g_warning ("Failed to switch VT");
|
||||||
|
|
||||||
if (launcher)
|
|
||||||
{
|
|
||||||
GError *error;
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
if (!meta_launcher_activate_vt (launcher, vt, &error))
|
|
||||||
{
|
|
||||||
g_warning ("Failed to switch VT: %s", error->message);
|
|
||||||
g_error_free (error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_debug ("Ignoring VT switch keybinding, not running as VT manager");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -99,7 +99,6 @@ void meta_wayland_compositor_set_input_focus (MetaWaylandComp
|
|||||||
gboolean meta_wayland_compositor_handle_event (MetaWaylandCompositor *compositor,
|
gboolean meta_wayland_compositor_handle_event (MetaWaylandCompositor *compositor,
|
||||||
const ClutterEvent *event);
|
const ClutterEvent *event);
|
||||||
|
|
||||||
MetaLauncher *meta_wayland_compositor_get_launcher (MetaWaylandCompositor *compositor);
|
|
||||||
gboolean meta_wayland_compositor_is_native (MetaWaylandCompositor *compositor);
|
gboolean meta_wayland_compositor_is_native (MetaWaylandCompositor *compositor);
|
||||||
|
|
||||||
MetaWaylandBuffer * meta_wayland_buffer_from_resource (struct wl_resource *resource);
|
MetaWaylandBuffer * meta_wayland_buffer_from_resource (struct wl_resource *resource);
|
||||||
|
@ -754,12 +754,6 @@ meta_wayland_finalize (void)
|
|||||||
g_clear_object (&compositor->launcher);
|
g_clear_object (&compositor->launcher);
|
||||||
}
|
}
|
||||||
|
|
||||||
MetaLauncher *
|
|
||||||
meta_wayland_compositor_get_launcher (MetaWaylandCompositor *compositor)
|
|
||||||
{
|
|
||||||
return compositor->launcher;
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
meta_wayland_compositor_is_native (MetaWaylandCompositor *compositor)
|
meta_wayland_compositor_is_native (MetaWaylandCompositor *compositor)
|
||||||
{
|
{
|
||||||
|
@ -437,17 +437,3 @@ meta_launcher_new (void)
|
|||||||
{
|
{
|
||||||
return g_object_new (META_TYPE_LAUNCHER, NULL);
|
return g_object_new (META_TYPE_LAUNCHER, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
|
||||||
meta_launcher_activate_vt (MetaLauncher *launcher,
|
|
||||||
int vt,
|
|
||||||
GError **error)
|
|
||||||
{
|
|
||||||
struct weston_launcher_activate_vt message;
|
|
||||||
|
|
||||||
message.header.opcode = WESTON_LAUNCHER_ACTIVATE_VT;
|
|
||||||
message.vt = vt;
|
|
||||||
|
|
||||||
return send_message_to_wl (launcher, &message, sizeof (message), NULL, NULL, error);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -37,10 +37,6 @@ GType meta_launcher_get_type (void) G_GNUC_CONST;
|
|||||||
|
|
||||||
MetaLauncher *meta_launcher_new (void);
|
MetaLauncher *meta_launcher_new (void);
|
||||||
|
|
||||||
gboolean meta_launcher_activate_vt (MetaLauncher *self,
|
|
||||||
int number,
|
|
||||||
GError **error);
|
|
||||||
|
|
||||||
gboolean meta_launcher_set_drm_fd (MetaLauncher *self,
|
gboolean meta_launcher_set_drm_fd (MetaLauncher *self,
|
||||||
int drm_fd,
|
int drm_fd,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
@ -269,40 +269,6 @@ out:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
handle_activate_vt(struct weston_launch *wl, struct msghdr *msg, ssize_t len)
|
|
||||||
{
|
|
||||||
struct weston_launcher_reply reply;
|
|
||||||
struct weston_launcher_activate_vt *message;
|
|
||||||
|
|
||||||
reply.header.opcode = WESTON_LAUNCHER_ACTIVATE_VT;
|
|
||||||
reply.ret = -1;
|
|
||||||
|
|
||||||
if (len != sizeof(*message)) {
|
|
||||||
error(0, 0, "missing value in activate_vt request");
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
message = msg->msg_iov->iov_base;
|
|
||||||
|
|
||||||
reply.ret = ioctl(wl->tty, VT_ACTIVATE, message->vt);
|
|
||||||
if (reply.ret < 0)
|
|
||||||
reply.ret = -errno;
|
|
||||||
|
|
||||||
if (wl->verbose)
|
|
||||||
fprintf(stderr, "mutter-launch: activate VT, ret: %d\n", reply.ret);
|
|
||||||
|
|
||||||
out:
|
|
||||||
do {
|
|
||||||
len = send(wl->sock[0], &reply, sizeof reply, 0);
|
|
||||||
} while (len < 0 && errno == EINTR);
|
|
||||||
if (len < 0)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
handle_open(struct weston_launch *wl, struct msghdr *msg, ssize_t len)
|
handle_open(struct weston_launch *wl, struct msghdr *msg, ssize_t len)
|
||||||
{
|
{
|
||||||
@ -419,9 +385,6 @@ handle_socket_msg(struct weston_launch *wl)
|
|||||||
case WESTON_LAUNCHER_CONFIRM_VT_SWITCH:
|
case WESTON_LAUNCHER_CONFIRM_VT_SWITCH:
|
||||||
ret = handle_confirm_vt_switch(wl, &msg, len);
|
ret = handle_confirm_vt_switch(wl, &msg, len);
|
||||||
break;
|
break;
|
||||||
case WESTON_LAUNCHER_ACTIVATE_VT:
|
|
||||||
ret = handle_activate_vt(wl, &msg, len);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -32,8 +32,7 @@ enum weston_launcher_message_type {
|
|||||||
enum weston_launcher_opcode {
|
enum weston_launcher_opcode {
|
||||||
WESTON_LAUNCHER_OPEN = (1 << 1 | WESTON_LAUNCHER_REQUEST),
|
WESTON_LAUNCHER_OPEN = (1 << 1 | WESTON_LAUNCHER_REQUEST),
|
||||||
WESTON_LAUNCHER_DRM_SET_FD = (2 << 1 | WESTON_LAUNCHER_REQUEST),
|
WESTON_LAUNCHER_DRM_SET_FD = (2 << 1 | WESTON_LAUNCHER_REQUEST),
|
||||||
WESTON_LAUNCHER_ACTIVATE_VT = (3 << 1 | WESTON_LAUNCHER_REQUEST),
|
WESTON_LAUNCHER_CONFIRM_VT_SWITCH = (3 << 1 | WESTON_LAUNCHER_REQUEST),
|
||||||
WESTON_LAUNCHER_CONFIRM_VT_SWITCH = (4 << 1 | WESTON_LAUNCHER_REQUEST),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum weston_launcher_server_opcode {
|
enum weston_launcher_server_opcode {
|
||||||
|
Loading…
Reference in New Issue
Block a user