XDG_CURRENT_DESKTOP is specified in freedesktop's desktop entry spec now. 'DesktopNames' will also be supported by other display managers, so we can drop the 'X-LightDM'.
DesktopNames is pluralized because it allows a colon-separated list of desktop names.
+Overview of changes in lightdm 1.10.0
+
+ * Fix return value for Vala bindings to Greeter.start_session_sync
+ * Fix logging when failing to find session
+
+Overview of changes in lightdm 1.9.15
+
+ * Update the lightdm AppArmor abstraction to allow the guest session to
+ start when AppArmor is mediating signals and ptrace and fix a minor, but
+ noisy, denial when applications attempt to read /proc/<PID>/stat.
+
+Overview of changes in lightdm 1.9.14
+
+ * Pass --enable-hardware-greeter to unity-system-compositor for Mir sessions
+ on xlocal seats
+
Overview of changes in lightdm 1.9.13
* Handle not getting an X connection when attempting to get X layouts.
dnl Process this file with autoconf to produce a configure script.
-AC_INIT(lightdm, 1.9.13)
+AC_INIT(lightdm, 1.10.0)
AC_CONFIG_MACRO_DIR(m4)
AC_CONFIG_HEADER(config.h)
AM_INIT_AUTOMAKE([1.11 no-dist-gzip dist-xz foreign])
owner @{PROC}/** rm,
# needed for gnome-keyring-daemon
@{PROC}/*/status r,
+ # needed for bamfdaemon and utilities such as ps and killall
+ @{PROC}/*/stat r,
/sbin/ r,
/sbin/** rmixk,
/sys/ r,
capability ipc_lock,
+ # allow processes in the guest session to signal and ptrace each other
+ signal peer=@{profile_name},
+ ptrace peer=@{profile_name},
+ # needed when logging out of the guest session
+ signal (receive) peer=unconfined,
+
# silence warnings for stuff that we really don't want to grant
deny capability dac_override,
deny capability dac_read_search,
+lightdm (1.10.0-0ubuntu1) trusty; urgency=medium
+
+ * New upstream release:
+ - Fix return value for Vala bindings to Greeter.start_session_sync
+ - Fix logging when failing to find session
+
+ -- Robert Ancell <robert.ancell@canonical.com> Tue, 08 Apr 2014 16:12:46 +1200
+
+lightdm (1.9.15-0ubuntu1) trusty; urgency=medium
+
+ * debian/patches/06_guest_signal_and_ptrace_aa_rules.patch,
+ debian/patches/07_guest_proc_pid_stat_aa_rule.patch: Dropped, the fixes
+ are upstream
+
+ -- Tyler Hicks <tyhicks@canonical.com> Mon, 07 Apr 2014 10:33:46 -0500
+
+lightdm (1.9.14-0ubuntu2) trusty; urgency=medium
+
+ * debian/patches/06_guest_signal_and_ptrace_aa_rules.patch: Grant
+ permission for guest session processes to signal and ptrace each
+ other (LP: #1298611)
+ * debian/patches/07_guest_proc_pid_stat_aa_rule.patch: Grant permission for
+ guest session processes to read /proc/<PID>/stat. This prevents AppArmor
+ denial messages caused by bamfdaemon and common utilities such as ps and
+ killall. (LP: #1301625)
+
+ -- Tyler Hicks <tyhicks@canonical.com> Thu, 03 Apr 2014 02:48:51 -0500
+
+lightdm (1.9.14-0ubuntu1) trusty; urgency=medium
+
+ * New upstream release:
+ - Pass --enable-hardware-greeter to unity-system-compositor for Mir sessions
+ on xlocal seats (LP: #1289072)
+
+ -- Robert Ancell <robert.ancell@canonical.com> Thu, 03 Apr 2014 09:07:39 +1300
+
lightdm (1.9.13-0ubuntu1) trusty; urgency=medium
* New upstream release:
public bool in_authentication { get; }
public bool is_authenticated { get; }
public unowned string? authentication_user { get; }
- public void start_session_sync (string? session = null) throws GLib.Error;
+ public bool start_session_sync (string? session = null) throws GLib.Error;
}
[CCode (has_type_id = false)]
public enum MessageType {
unity_system_compositor_set_socket (compositor, socket_name);
g_free (socket_name);
+ unity_system_compositor_set_enable_hardware_cursor (compositor, TRUE);
+
return DISPLAY_SERVER (compositor);
}
g_object_unref (session_config);
}
else
- l_debug (seat, "Can't find session '%s'", seat_get_string_property (seat, "user-session"));
+ l_debug (seat, "Can't find session '%s'", session_name);
g_object_unref (user);
g_free (sessions_dir);
if (!session_config)
{
- l_debug (seat, "Can't find session '%s'", seat_get_string_property (seat, "user-session"));
+ l_debug (seat, "Can't find session '%s'", session_name);
return NULL;
}
g_free (sessions_dir);
if (!session_config)
{
- l_debug (seat, "Can't find session '%s'", seat_get_string_property (seat, "user-session"));
+ l_debug (seat, "Can't find session '%s'", session_name);
return FALSE;
}
gint vt;
gboolean have_vt_ref;
+ /* TRUE if should show hardware cursor */
+ gboolean enable_hardware_cursor;
+
/* Pipes to communicate with compositor */
int to_compositor_pipe[2];
int from_compositor_pipe[2];
}
}
+void
+unity_system_compositor_set_enable_hardware_cursor (UnitySystemCompositor *compositor, gboolean enable_cursor)
+{
+ g_return_if_fail (compositor != NULL);
+ compositor->priv->enable_hardware_cursor = enable_cursor;
+}
+
void
unity_system_compositor_set_timeout (UnitySystemCompositor *compositor, gint timeout)
{
{
UnitySystemCompositor *compositor = UNITY_SYSTEM_COMPOSITOR (server);
gboolean result;
- gchar *dir, *log_file, *command, *absolute_command, *value;
+ GString *command;
+ gchar *dir, *log_file, *absolute_command, *value;
g_return_val_if_fail (compositor->priv->process == NULL, FALSE);
l_debug (compositor, "Can't launch compositor %s, not found in path", compositor->priv->command);
return FALSE;
}
- command = g_strdup_printf ("%s --file '%s' --from-dm-fd %d --to-dm-fd %d --vt %d", absolute_command, compositor->priv->socket, compositor->priv->to_compositor_pipe[0], compositor->priv->from_compositor_pipe[1], compositor->priv->vt);
- process_set_command (compositor->priv->process, command);
- g_free (command);
+ command = g_string_new (absolute_command);
g_free (absolute_command);
+ g_string_append_printf (command, " --file '%s'", compositor->priv->socket);
+ g_string_append_printf (command, " --from-dm-fd %d --to-dm-fd %d", compositor->priv->to_compositor_pipe[0], compositor->priv->from_compositor_pipe[1]);
+ if (compositor->priv->vt > 0)
+ g_string_append_printf (command, " --vt %d", compositor->priv->vt);
+ if (compositor->priv->enable_hardware_cursor)
+ g_string_append (command, " --enable-hardware-cursor=true");
+ process_set_command (compositor->priv->process, command->str);
+ g_string_free (command, TRUE);
/* Start the compositor */
g_signal_connect (compositor->priv->process, "stopped", G_CALLBACK (stopped_cb), compositor);
void unity_system_compositor_set_vt (UnitySystemCompositor *compositor, gint vt);
+void unity_system_compositor_set_enable_hardware_cursor (UnitySystemCompositor *compositor, gboolean enable_cursor);
+
void unity_system_compositor_set_timeout (UnitySystemCompositor *compositor, gint timeout);
void unity_system_compositor_set_active_session (UnitySystemCompositor *compositor, const gchar *id);
#?RUNNER DAEMON-START
# System compositor starts
-#?UNITY-SYSTEM-COMPOSITOR START FILE=/tmp/lightdm-mir-0 VT=7 XDG_VTNR=7
+#?UNITY-SYSTEM-COMPOSITOR START FILE=/tmp/lightdm-mir-0 VT=7 ENABLE-HARDWARE-CURSOR=TRUE XDG_VTNR=7
#?*UNITY-SYSTEM-COMPOSITOR READY
# Session starts
#?RUNNER DAEMON-START
# System compositor starts
-#?UNITY-SYSTEM-COMPOSITOR START FILE=/tmp/lightdm-mir-0 VT=7 XDG_VTNR=7
+#?UNITY-SYSTEM-COMPOSITOR START FILE=/tmp/lightdm-mir-0 VT=7 ENABLE-HARDWARE-CURSOR=TRUE XDG_VTNR=7
#?*UNITY-SYSTEM-COMPOSITOR READY
# Greeter starts
#?RUNNER DAEMON-START
# System compositor starts
-#?UNITY-SYSTEM-COMPOSITOR START FILE=/tmp/lightdm-mir-0 VT=7 XDG_VTNR=7
+#?UNITY-SYSTEM-COMPOSITOR START FILE=/tmp/lightdm-mir-0 VT=7 ENABLE-HARDWARE-CURSOR=TRUE XDG_VTNR=7
#?*UNITY-SYSTEM-COMPOSITOR READY
# Session starts
#?RUNNER DAEMON-START
# System compositor starts
-#?UNITY-SYSTEM-COMPOSITOR START FILE=/tmp/lightdm-mir-0 VT=7 XDG_VTNR=7
+#?UNITY-SYSTEM-COMPOSITOR START FILE=/tmp/lightdm-mir-0 VT=7 ENABLE-HARDWARE-CURSOR=TRUE XDG_VTNR=7
#?*UNITY-SYSTEM-COMPOSITOR READY
# Session starts
#?*GREETER-X-0 START-SESSION
# System compositor starts
-#?UNITY-SYSTEM-COMPOSITOR START FILE=/tmp/lightdm-mir-0 VT=8 XDG_VTNR=8
+#?UNITY-SYSTEM-COMPOSITOR START FILE=/tmp/lightdm-mir-0 VT=8 ENABLE-HARDWARE-CURSOR=TRUE XDG_VTNR=8
#?*UNITY-SYSTEM-COMPOSITOR READY
# Switch to system compositor
GString *status_text;
gboolean test = FALSE;
int vt_number = -1;
+ gboolean enable_hardware_cursor = FALSE;
const gchar *file = NULL;
#if !defined(GLIB_VERSION_2_36)
vt_number = atoi (argv[i+1]);
i++;
}
+ else if (strcmp (arg, "--enable-hardware-cursor=true") == 0)
+ enable_hardware_cursor = TRUE;
else if (strcmp (arg, "--file") == 0)
{
file = argv[i+1];
g_string_append_printf (status_text, " FILE=%s", file);
if (vt_number >= 0)
g_string_append_printf (status_text, " VT=%d", vt_number);
+ if (enable_hardware_cursor)
+ g_string_append (status_text, " ENABLE-HARDWARE-CURSOR=TRUE");
if (g_getenv ("XDG_VTNR"))
g_string_append_printf (status_text, " XDG_VTNR=%s", g_getenv ("XDG_VTNR"));
if (test)