Is there a way that doesn't depend on the display manager?
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.
Por outro lado, em um gerente de exibição simples e / ou antiquado, considerei no passado uma solução que deveria funcionar.
Basicamente, pode-se usar chvt
com argumento do conteúdo da variável de ambiente XDG_VTNR
do processo de sessão usuário de destino . O efeito é semelhante a pressionar a combinação de teclas Ctrl-Alt-Fn
, com n
do número fornecido para chvt
. Isto é considerado nos comentários em xorg - Alternando entre duas sessões X abertas sem autenticar - Ask Ubuntu .
Ainda assim, você está sozinho para obter esse número. Ou ter um processo executado pelo root que bisbilhota o ambiente dos processos do usuário alvo, ou que os usuários anunciem esse número quando logarem, através de um local conhecido (por exemplo, ~/.myvtnr
, supondo que um usuário tenha mais de uma sessão X de cada vez , o que nem sempre é verdade, os usuários podem ter várias sessões X, incluindo sessões aninhadas usando Xnest
).
If not, what would be the equivalent command for the other display managers:
No Ubuntu 12.04 rodando o gdm, aqui está 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ê poderá usar primeiro: export XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
e tentar novamente.
Isso funciona para você com o Ubuntu 18.04 com o gdm? Com outros gerenciadores de exibição? Por favor informe com detalhes. Pode ajudar os outros no futuro (incluindo você e eu: -).