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 chvt
com argumento o conteúdo da XDG_VTNR
variável de ambiente do processo de sessão do usuário de destino . O efeito é semelhante ao pressionar a Ctrl-Alt-Fn
combinação de teclas, com n
o 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 otheruserlogin
por um login de usuário real.
E se XDG_SEAT_PATH
nã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/Seat0
e 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 :-).
Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.DisplayManager was not provided by any .service files