165
159
busType = QDBusConnection::sessionBus();
169
162
d->lightdmInterface = new QDBusInterface("org.lightdm.LightDisplayManager", "/org/lightdm/LightDisplayManager", "org.lightdm.LightDisplayManager", busType);
170
163
d->powerManagementInterface = new QDBusInterface("org.freedesktop.PowerManagement","/org/freedesktop/PowerManagement", "org.freedesktop.PowerManagement");
171
164
d->consoleKitInterface = new QDBusInterface("org.freedesktop.ConsoleKit", "/org/freedesktop/ConsoleKit/Manager", "org.freedesktop.ConsoleKit");
167
file = d->lightdmInterface->property("ConfigFile").toString();
168
qDebug() << "Loading configuration from " << file;
169
d->config = new Config(file, this);
173
171
char* fd = getenv("LDM_TO_SERVER_FD");
175
173
qDebug() << "No LDM_TO_SERVER_FD environment variable";
406
401
return d->loginDelay;
409
void Greeter::loadUsers()
411
QStringList hiddenUsers, hiddenShells;
413
QList<User*> users, oldUsers, newUsers, changedUsers;
415
minimumUid = d->config->minimumUid();
416
hiddenUsers = d->config->hiddenUsers();
417
hiddenShells = d->config->hiddenShells();
423
struct passwd *entry;
426
QString realName, image;
435
/* Ignore system users */
436
if(entry->pw_uid < minimumUid)
439
/* Ignore users disabled by shell */
442
for(i = 0; i < hiddenShells.size(); i++)
443
if(entry->pw_shell == hiddenShells.at(i))
445
if(i < hiddenShells.size())
449
/* Ignore certain users */
450
for(i = 0; i < hiddenUsers.size(); i++)
451
if(entry->pw_name == hiddenUsers.at(i))
453
if(i < hiddenUsers.size())
456
tokens = QString(entry->pw_gecos).split(",");
457
if(tokens.size() > 0 && tokens.at(i) != "")
458
realName = tokens.at(i);
460
QDir homeDir(entry->pw_dir);
461
imageFile = new QFile(homeDir.filePath(".face"));
462
if(!imageFile->exists())
465
imageFile = new QFile(homeDir.filePath(".face.icon"));
467
if(imageFile->exists())
468
image = "file://" + imageFile->fileName();
471
user = new User(entry->pw_name, realName, entry->pw_dir, image, FALSE);
473
/* Update existing users if have them */
474
bool matchedUser = false;
475
foreach(User *info, d->users)
477
if(info->name() == user->name())
480
if(info->update(user->realName(), user->homeDirectory(), user->image(), user->isLoggedIn()))
481
changedUsers.append(user);
489
/* Only notify once we have loaded the user list */
491
newUsers.append(user);
497
qDebug() << "Failed to read password database: " << strerror(errno);
501
/* Use new user list */
505
/* Notify of changes */
506
foreach(User *user, newUsers)
508
qDebug() << "User " << user->name() << " added";
509
emit userAdded(user);
512
foreach(User *user, changedUsers)
514
qDebug() << "User " << user->name() << " changed";
515
emit userChanged(user);
518
foreach(User *user, oldUsers)
520
/* See if this user is in the current list */
521
bool existing = false;
522
foreach(User *new_user, d->users)
524
if (new_user == user)
533
qDebug() << "User " << user->name() << " removed";
534
emit userRemoved(user);
540
void Greeter::updateUsers()
546
/** Load users if we need to. */
547
if (d->config->loadUsers()) {
554
QList<User*> Greeter::users()
560
SessionsModel* Greeter::sessionsModel() const
562
return d->sessionsModel;
404
Config* Greeter::config() const
566
409
bool Greeter::canSuspend() const