Como determinar qual saudação do lightdm está em uso?

5

Para quem não sabe, greeter é basicamente a tela de login. No caso específico do Lightdm, existem várias versões:

  • unidade-saudação
  • kylin-greeter
  • lightdm-gtk-greeter
  • lightdm-kde-greeter
  • lightdm-webkit-greeter
  • razorqt-lightdm-greeter

O objetivo:

Eu preciso saber como obter a versão de saudação atualmente em uso. As soluções de scripts são bem-vindas (preferencialmente python, shell scripts, perl), mas também abertas ao código C. Idealmente, a solução funcionaria assim:

$ ./get_greeter
kylin-greeter

Problemas e abordagens com falha:

  • A verificação da listagem de processos não funciona. Eu tenho kylin-greeter em uso agora, mas pgrep -f lightdm | xargs -L 1 ps -o args --no-header -p ou pgrep -f kylin | xargs -L 1 ps -o args --no-header -p não retornam nada que aponte para /usr/sbin/kylin-greeter
  • lsof -p <LIGHTDM_PID> também não fornece informações - não há /usr/sbin/kylin-greeter na listagem.
  • Analisar /etc/lightdm/lightdm.conf é uma solução potencial, mas não ideal, pois alguns tipos de Ubuntu (como o Kylin) não explicitarão explicitamente a sessão de saudação nesse arquivo. Eu preferiria algo mais confiável.
  • gsettings não fornece um meio confiável de determinar o greeter em uso - a presença de esquemas para unity-greeter não significa que eu esteja atualmente usando isso.
  • examinar caminhos e métodos no org.freedesktop.DisplayManager service para o barramento do sistema não forneceu insights sobre o que o greeter está em uso.
por Sergiy Kolodyazhnyy 10.01.2017 / 05:10

2 respostas

3

De alguns testes rápidos, parece que a única maneira é perguntar ao próprio LightDM:

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

Comecei a testar com o Ubuntu padrão, depois instalei lightdm-gtk-greeter e o kylin-greeter instalado. Em cada caso, retornou a opção correta. Por exemplo, depois de editar /etc/lightdm/lightdm.conf para adicionar greeter-session=unity , a saída mudou:

$ lightdm --show-config |& awk -F= '/greeter-session=/{print }'
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

Observe a fonte da configuração.

    
por muru 10.01.2017 / 07:03
0

Bem, para sistemas baseados no Ubuntu e todos os outros foram alternativas de atualização funciona em seu script, você pode executar update-alternatives --list lightdm-greeter |head -n1 para ver o que eles estão usando como o greman lightdm. Isso deve pelo menos mostrar o padrão greman lightdm. Eu sei se o seu script pode acabar sendo quebrado por um usuário parar lightdm e lançá-lo com um greeter non defualt no entanto não consigo ver uma razão lógica para fazer isso. Se você quiser mais informações sobre isso, consulte man update-alternatives. Se você não canalizar o resultado dessa saída para head e exibir apenas a linha superior, ele mostrará todos os saudadores lightdm instalados.

    
por ianorlin 10.01.2017 / 07:02