如何确定使用哪个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 -p
或pgrep -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。