Equivalente a outro usuário `dm-tool switch-to-user` em diferentes gerenciadores de tela

4

Ao usar o lightdm, posso mudar para outro usuário executando dm-tool switch-to-user. Existe uma maneira que não dependa do gerenciador de exibição? Caso contrário, qual seria o comando equivalente para os outros gerenciadores de exibição:

  • gdm
  • sddm
  • magro
  • lxdm
  • xdm
aluna
fonte

Respostas:

0

Existe uma maneira que não dependa do gerenciador de exibição?

Você está solicitando uma solução de programa de linha de comando / execução.

Dada a minha experiência com xdm, gxm, lightdm e como tudo isso funciona, acho que não há uma resposta perfeita para um tamanho único. O motivo é: fornecer isolamento real do usuário requer que o gerenciador de exibição gerencie de perto o switch vt.

Dito isto, em um gerente de exibição simples e / ou antiquado, no passado, considerei uma solução que deveria funcionar.

Basicamente, pode-se usar chvtcom argumento o conteúdo da XDG_VTNRvariável de ambiente do processo de sessão do usuário de destino . O efeito é semelhante ao pressionar a Ctrl-Alt-Fncombinação de teclas, com no número fornecido chvt. Isso é considerado nos comentários do xorg - Alternando entre duas sessões abertas do X sem nova autenticação - Ask Ubuntu .

Ainda assim, você está sozinho para obter esse número. Tenha um processo executado pela raiz que bisbilhota o ambiente dos processos do usuário de destino ou faz com que os usuários anunciem esse número ao fazer login, através de um local conhecido (por exemplo ~/.myvtnr, supondo que um usuário tenha mais de uma sessão X por vez, o que é nem sempre é verdade, os usuários podem ter várias sessões X, incluindo sessões aninhadas usando Xnest).

Caso contrário, qual seria o comando equivalente para os outros gerenciadores de exibição:

No Ubuntu 12.04 correndo gdm, aqui o que funcionou para mim: dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.DisplayManager $XDG_SEAT_PATH org.freedesktop.DisplayManager.Seat.SwitchToUser string:otheruserlogin string:anywordseemsignored. Substitua otheruserloginpor um login de usuário real.

E se XDG_SEAT_PATHnão estiver definido (por exemplo echo $XDG_SEAT_PATH, não fornece nenhuma saída), você pode primeiro usar: export XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0e tente novamente.

Isso funciona para você com o Ubuntu 18.04 com gdm? Com outros gerenciadores de exibição? Por favor, informe com detalhes. Pode ajudar outras pessoas no futuro (incluindo você e eu :-).

Stéphane Gourichon
fonte
Em 18.04, receboError org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.DisplayManager was not provided by any .service files
Raphael