|
|
|
@ -235,6 +235,7 @@ create_lock_file (int display, int *display_out)
|
|
|
|
|
return filename;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef __linux__
|
|
|
|
|
static int
|
|
|
|
|
bind_to_abstract_socket (int display,
|
|
|
|
|
gboolean *fatal)
|
|
|
|
@ -274,6 +275,7 @@ bind_to_abstract_socket (int display,
|
|
|
|
|
|
|
|
|
|
return fd;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
static int
|
|
|
|
|
bind_to_unix_socket (int display)
|
|
|
|
@ -381,26 +383,37 @@ meta_xwayland_override_display_number (int number)
|
|
|
|
|
static gboolean
|
|
|
|
|
open_display_sockets (MetaXWaylandManager *manager,
|
|
|
|
|
int display_index,
|
|
|
|
|
#ifdef __linux__
|
|
|
|
|
int *abstract_fd_out,
|
|
|
|
|
#endif
|
|
|
|
|
int *unix_fd_out,
|
|
|
|
|
gboolean *fatal)
|
|
|
|
|
{
|
|
|
|
|
int abstract_fd, unix_fd;
|
|
|
|
|
#ifdef __linux__
|
|
|
|
|
int abstract_fd;
|
|
|
|
|
#endif
|
|
|
|
|
int unix_fd;
|
|
|
|
|
|
|
|
|
|
#ifdef __linux__
|
|
|
|
|
abstract_fd = bind_to_abstract_socket (display_index,
|
|
|
|
|
fatal);
|
|
|
|
|
if (abstract_fd < 0)
|
|
|
|
|
return FALSE;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
unix_fd = bind_to_unix_socket (display_index);
|
|
|
|
|
if (unix_fd < 0)
|
|
|
|
|
{
|
|
|
|
|
*fatal = FALSE;
|
|
|
|
|
#ifdef __linux__
|
|
|
|
|
close (abstract_fd);
|
|
|
|
|
#endif
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef __linux__
|
|
|
|
|
*abstract_fd_out = abstract_fd;
|
|
|
|
|
#endif
|
|
|
|
|
*unix_fd_out = unix_fd;
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
@ -429,7 +442,9 @@ choose_xdisplay (MetaXWaylandManager *manager,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!open_display_sockets (manager, display,
|
|
|
|
|
#ifdef __linux__
|
|
|
|
|
&connection->abstract_fd,
|
|
|
|
|
#endif
|
|
|
|
|
&connection->unix_fd,
|
|
|
|
|
&fatal))
|
|
|
|
|
{
|
|
|
|
@ -617,10 +632,14 @@ meta_xwayland_start_xserver (MetaXWaylandManager *manager,
|
|
|
|
|
launcher = g_subprocess_launcher_new (flags);
|
|
|
|
|
|
|
|
|
|
g_subprocess_launcher_take_fd (launcher, xwayland_client_fd[1], 3);
|
|
|
|
|
g_subprocess_launcher_take_fd (launcher, manager->public_connection.abstract_fd, 4);
|
|
|
|
|
g_subprocess_launcher_take_fd (launcher, displayfd[1], 4);
|
|
|
|
|
g_subprocess_launcher_take_fd (launcher, manager->public_connection.unix_fd, 5);
|
|
|
|
|
g_subprocess_launcher_take_fd (launcher, displayfd[1], 6);
|
|
|
|
|
g_subprocess_launcher_take_fd (launcher, manager->private_connection.abstract_fd, 7);
|
|
|
|
|
#ifdef __linux__
|
|
|
|
|
g_subprocess_launcher_take_fd (launcher, manager->private_connection.abstract_fd, 6);
|
|
|
|
|
g_subprocess_launcher_take_fd (launcher, manager->public_connection.abstract_fd, 7);
|
|
|
|
|
#else
|
|
|
|
|
g_subprocess_launcher_take_fd (launcher, manager->private_connection.unix_fd, 6);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
g_subprocess_launcher_setenv (launcher, "WAYLAND_SOCKET", "3", TRUE);
|
|
|
|
|
|
|
|
|
@ -632,12 +651,14 @@ meta_xwayland_start_xserver (MetaXWaylandManager *manager,
|
|
|
|
|
"-accessx",
|
|
|
|
|
"-core",
|
|
|
|
|
"-auth", manager->auth_file,
|
|
|
|
|
"-listen", "4",
|
|
|
|
|
"-displayfd", "4",
|
|
|
|
|
"-listen", "5",
|
|
|
|
|
"-displayfd", "6",
|
|
|
|
|
#ifdef HAVE_XWAYLAND_INITFD
|
|
|
|
|
"-initfd", "7",
|
|
|
|
|
"-initfd", "6",
|
|
|
|
|
#else
|
|
|
|
|
"-listen", "6",
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef __linux__
|
|
|
|
|
"-listen", "7",
|
|
|
|
|
#endif
|
|
|
|
|
NULL);
|
|
|
|
@ -756,14 +777,18 @@ meta_xwayland_init (MetaXWaylandManager *manager,
|
|
|
|
|
{
|
|
|
|
|
if (!open_display_sockets (manager,
|
|
|
|
|
manager->public_connection.display_index,
|
|
|
|
|
#ifdef __linux__
|
|
|
|
|
&manager->public_connection.abstract_fd,
|
|
|
|
|
#endif
|
|
|
|
|
&manager->public_connection.unix_fd,
|
|
|
|
|
&fatal))
|
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
|
|
if (!open_display_sockets (manager,
|
|
|
|
|
manager->private_connection.display_index,
|
|
|
|
|
#ifdef __linux__
|
|
|
|
|
&manager->private_connection.abstract_fd,
|
|
|
|
|
#endif
|
|
|
|
|
&manager->private_connection.unix_fd,
|
|
|
|
|
&fatal))
|
|
|
|
|
return FALSE;
|
|
|
|
@ -774,8 +799,13 @@ meta_xwayland_init (MetaXWaylandManager *manager,
|
|
|
|
|
|
|
|
|
|
if (policy == META_DISPLAY_POLICY_ON_DEMAND)
|
|
|
|
|
{
|
|
|
|
|
#ifdef __linux__
|
|
|
|
|
g_unix_fd_add (manager->public_connection.abstract_fd, G_IO_IN,
|
|
|
|
|
xdisplay_connection_activity_cb, manager);
|
|
|
|
|
#else
|
|
|
|
|
g_unix_fd_add (manager->public_connection.unix_fd, G_IO_IN,
|
|
|
|
|
xdisplay_connection_activity_cb, manager);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|