Index: lightdm-1.20.0/src/lightdm.c =================================================================== --- lightdm-1.20.0.orig/src/lightdm.c +++ lightdm-1.20.0/src/lightdm.c @@ -1432,6 +1432,8 @@ main (int argc, char **argv) config_set_boolean (config_get_instance (), "Seat:*", "allow-guest", TRUE); if (!config_has_key (config_get_instance (), "Seat:*", "greeter-allow-guest")) config_set_boolean (config_get_instance (), "Seat:*", "greeter-allow-guest", TRUE); + if (!config_has_key (config_get_instance (), "Seat:*", "allow-root")) + config_set_boolean (config_get_instance (), "Seat:*", "allow-root", TRUE); if (!config_has_key (config_get_instance (), "Seat:*", "greeter-show-remote-login")) config_set_boolean (config_get_instance (), "Seat:*", "greeter-show-remote-login", TRUE); if (!config_has_key (config_get_instance (), "Seat:*", "greeter-session")) Index: lightdm-1.20.0/src/seat.h =================================================================== --- lightdm-1.20.0.orig/src/seat.h +++ lightdm-1.20.0/src/seat.h @@ -105,6 +105,8 @@ gboolean seat_get_allow_guest (Seat *sea gboolean seat_get_greeter_allow_guest (Seat *seat); +gboolean seat_get_allow_root (Seat *seat); + gboolean seat_switch_to_greeter (Seat *seat); gboolean seat_switch_to_user (Seat *seat, const gchar *username, const gchar *session_name); Index: lightdm-1.20.0/src/seat.c =================================================================== --- lightdm-1.20.0.orig/src/seat.c +++ lightdm-1.20.0/src/seat.c @@ -351,6 +351,13 @@ seat_get_allow_guest (Seat *seat) return seat_get_boolean_property (seat, "allow-guest") && guest_account_is_installed (); } +gboolean +seat_get_allow_root (Seat *seat) +{ + g_return_val_if_fail (seat != NULL, FALSE); + return seat_get_boolean_property (seat, "allow-root"); +} + static gboolean run_script (Seat *seat, DisplayServer *display_server, const gchar *script_name, User *user) { @@ -551,6 +558,7 @@ set_greeter_hints (Seat *seat, Greeter * greeter_set_hint (greeter, "show-manual-login", seat_get_boolean_property (seat, "greeter-show-manual-login") ? "true" : "false"); greeter_set_hint (greeter, "show-remote-login", seat_get_boolean_property (seat, "greeter-show-remote-login") ? "true" : "false"); greeter_set_hint (greeter, "has-guest-account", seat_get_allow_guest (seat) && seat_get_boolean_property (seat, "greeter-allow-guest") ? "true" : "false"); + greeter_set_hint (greeter, "allow-root-login", seat_get_allow_root (seat) ? "true" : "false"); } static void Index: lightdm-1.20.0/data/lightdm.conf =================================================================== --- lightdm-1.20.0.orig/data/lightdm.conf +++ lightdm-1.20.0/data/lightdm.conf @@ -68,6 +68,7 @@ run-directory=/run/lightdm # user-session = Session to load for users # allow-user-switching = True if allowed to switch users # allow-guest = True if guest login is allowed +# allow-root = True if root login is allowed # guest-session = Session to load for guests (overrides user-session) # session-wrapper = Wrapper script to run session with # greeter-wrapper = Wrapper script to run greeter with Index: lightdm-1.20.0/liblightdm-gobject/lightdm/greeter.h =================================================================== --- lightdm-1.20.0.orig/liblightdm-gobject/lightdm/greeter.h +++ lightdm-1.20.0/liblightdm-gobject/lightdm/greeter.h @@ -138,6 +138,8 @@ gboolean lightdm_greeter_get_lock_hint ( gboolean lightdm_greeter_get_has_guest_account_hint (LightDMGreeter *greeter); +gboolean lightdm_greeter_get_allow_root_login_hint (LightDMGreeter *greeter); + const gchar *lightdm_greeter_get_select_user_hint (LightDMGreeter *greeter); gboolean lightdm_greeter_get_select_guest_hint (LightDMGreeter *greeter); Index: lightdm-1.20.0/liblightdm-gobject/greeter.c =================================================================== --- lightdm-1.20.0.orig/liblightdm-gobject/greeter.c +++ lightdm-1.20.0/liblightdm-gobject/greeter.c @@ -1174,6 +1174,25 @@ lightdm_greeter_get_has_guest_account_hi } /** + * lightdm_greeter_get_allow_root_login_hint: + * @greeter: A #LightDMGreeter + * + * Check if root account can login. + * + * Return value: #TRUE if root account can login. + */ +gboolean +lightdm_greeter_get_allow_root_login_hint (LightDMGreeter *greeter) +{ + const gchar *value; + + g_return_val_if_fail (LIGHTDM_IS_GREETER (greeter), FALSE); + value = lightdm_greeter_get_hint (greeter, "allow-root-login"); + + return g_strcmp0 (value, "true") == 0; +} + +/** * lightdm_greeter_get_select_user_hint: * @greeter: A #LightDMGreeter * Index: lightdm-1.20.0/liblightdm-qt/QLightDM/greeter.h =================================================================== --- lightdm-1.20.0.orig/liblightdm-qt/QLightDM/greeter.h +++ lightdm-1.20.0/liblightdm-qt/QLightDM/greeter.h @@ -32,6 +32,7 @@ class Q_DECL_EXPORT Greeter : public QOb Q_PROPERTY(QString hostname READ hostname CONSTANT) Q_PROPERTY(bool hasGuestAccount READ hasGuestAccountHint CONSTANT) + Q_PROPERTY(bool allowRootLogin READ allowRootLoginHint CONSTANT) Q_PROPERTY(bool locked READ lockHint CONSTANT) Q_PROPERTY(QString hostname READ hostname CONSTANT) @@ -59,6 +60,7 @@ public: bool showRemoteLoginHint() const; bool lockHint () const; bool hasGuestAccountHint() const; + bool allowRootLoginHint() const; QString selectUserHint() const; bool selectGuestHint() const; QString autologinUserHint() const; Index: lightdm-1.20.0/liblightdm-qt/greeter.cpp =================================================================== --- lightdm-1.20.0.orig/liblightdm-qt/greeter.cpp +++ lightdm-1.20.0/liblightdm-qt/greeter.cpp @@ -257,6 +257,12 @@ bool Greeter::hasGuestAccountHint() cons return lightdm_greeter_get_has_guest_account_hint(d->ldmGreeter); } +bool Greeter::allowRootLoginHint() const +{ + Q_D(const Greeter); + return lightdm_greeter_get_allow_root_login_hint (d->ldmGreeter); +} + QString Greeter::selectUserHint() const { Q_D(const Greeter);