如何向 lightdm-webkit-greeter 主题添加会话类型按钮?

如何向 lightdm-webkit-greeter 主题添加会话类型按钮?

我正在尝试使用 lightdm 的 webkit 问候程序。Ubuntu 13.10 64 位。我想学习创建自己的主题。我注意到默认主题不显示语言选择按钮或会话类型选择按钮。使用 unity-greeter,我可以选择启动 Unity 或 Gnome 3。最近我开始更喜欢 Gnome 3,这意味着 webkit 问候程序现在对我来说不可用,因为当我想要 Gnome 3 时,我被迫从 Unity 开始。

是否可以将会话类型按钮添加到 webkit-greeter 主题?如何操作?我必须编辑默认主题文件才能显示该按钮吗?

答案1

如果你查看lightdm-webkit-greeter.c源代码,你会发现我们可以从 webkit 中获取各种有趣的值。为了快速而简单地将会话选择下拉菜单添加到默认主题,我做了以下操作(这肯定可以扩展和改进):

在默认情况下index.html,在将用户列表写入欢迎程序的行上方:

document.write('<table id="user_table" style="margin: auto;">');

我添加了一些代码来写出会话选择器:

document.write('<select id="session_list">');
for (i in lightdm.sessions)
{
  session = lightdm.sessions[i];
  if (session.key == lightdm.default_session)
    document.write('<option selected="selected" value="' + session.key + '">' + session.name + '</option>');
  else
    document.write('<option value="' + session.key + '">' + session.name + '</option>');
}
document.write('</select>');

此代码中的属性value并非真正必要,我原本打算使用它们来选择会话,但决定改用索引。另一个更改是函数authentication_complete()。在默认代码中,我们有:

if (lightdm.is_authenticated)
  lightdm.login (lightdm.authentication_user, lightdm.default_session);

因此它始终使用default_session密钥。我们想使用选定的会话,因此我们可以执行以下操作:

if (lightdm.is_authenticated)
{
  session_list = document.getElementById('session_list');
  session = lightdm.sessions[session_list.selectedIndex];
  lightdm.login (lightdm.authentication_user, session.key);
}

相关内容