如何确定使用哪个lightdm greeter?

对于那些不知道的人,greeter基本上就是登录界面。 特别是Lightdm的情况,有几个版本:

  • 团结,迎宾
  • 麒麟,迎宾
  • lightdm-GTK的招待员
  • lightdm-KDE-迎宾
  • lightdm-WebKit的招待员
  • razorqt-lightdm,招待员

目标:

我需要知道如何获得当前使用的欢迎版本。 脚本编写解决方案是最受欢迎的(最好是python,shell脚本,perl),但也可以使用C代码。 理想情况下,解决方案可以这样工作:

$ ./get_greeter kylin-greeter 

问题和失败的方法:

  • 检查流程列表不起作用。 我现在正在使用kylin-greeter,但是pgrep -f lightdm | xargs -L 1 ps -o args --no-header -p pgrep -f lightdm | xargs -L 1 ps -o args --no-header -ppgrep -f kylin | xargs -L 1 ps -o args --no-header -p pgrep -f kylin | xargs -L 1 ps -o args --no-header -p返回任何指向/usr/sbin/kylin-greeter
  • lsof -p 也没有提供任何见解 – 列表中没有/usr/sbin/kylin-greeter
  • 解析/etc/lightdm/lightdm.conf是一个潜在但不理想的解决方案,因为某些版本的Ubuntu(例如Kylin)不会在该文件中明确声明greeter会话。 我更喜欢更可靠的东西。
  • gsettings也没有提供一种可靠的方法来确定使用中的接待者 – 对于unity-greeter存在并不意味着我目前正在使用它。
  • 在系统总线的org.freedesktop.DisplayManager服务上检查路径和方法,并没有提供有关使用什么greeter的见解。

通过几个快速测试,似乎唯一的方法是询问LightDM本身:

 $ lightdm --show-config |& awk -F= '/greeter-session=/{print $2}' kylin-greeter 

我开始使用默认的Ubuntu进行测试,然后安装了lightdm-gtk-greeter和安装kylin-greeter 。 在每种情况下,它都返回了正确的选项。 例如,在编辑/etc/lightdm/lightdm.conf以添加greeter-session=unity ,输出已更改:

 $ lightdm --show-config |& awk -F= '/greeter-session=/{print $2}' unity $ lightdm --show-config [LightDM] A backup-logs=false [Seat:*] B greeter-wrapper=/usr/lib/lightdm/lightdm-greeter-session C guest-wrapper=/usr/lib/lightdm/lightdm-guest-session D user-session=ubuntu I greeter-session=unity F xserver-command=X -core I autologin-guest=false I autologin-user=muru I autologin-user-timeout=0 Sources: A /usr/share/lightdm/lightdm.conf.d/50-disable-log-backup.conf B /usr/share/lightdm/lightdm.conf.d/50-greeter-wrapper.conf C /usr/share/lightdm/lightdm.conf.d/50-guest-wrapper.conf D /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf E /usr/share/lightdm/lightdm.conf.d/50-unity-greeter.conf F /usr/share/lightdm/lightdm.conf.d/50-xserver-command.conf G /usr/share/lightdm/lightdm.conf.d/60-lightdm-gtk-greeter.conf H /usr/share/lightdm/lightdm.conf.d/95-kylin-greeter.conf I /etc/lightdm/lightdm.conf 

请注意配置的来源。

好吧,基于ubuntu的系统和所有其他更新替代品在你的脚本中工作,你可以运行update-alternatives --list lightdm-greeter |head -n1来看看他们使用什么作为lightdm greeter。 这应该至少显示默认的lightdm greeter。 我知道你的脚本最终是否会因为用户停止使用lightdm并使用非defualt greeter启动它而被打破,但是我无法看到这样做的合理原因。 如果您想了解更多有关此内容的信息,请参阅man update-alternatives。 如果你没有将输出的结果传递到head并让它只显示顶行,它将显示所有安装的lightdm greeters。