Esta é uma máquina remota com acesso SSH e systemd.
Basicamente, tenho este erro quando tento executar comandos de usuário do systemd:
$ systemctl --user status
Failed to connect to bus: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined (consider using --machine=<user>@.host --user to connect to bus of other user)
Enquantooutras respostas sugerem apenas definir ou "falsificar" as variáveis solicitadasIMHO, esta não é uma solução adequada.
O problema é basicamente que eu entrei como usuário único (uso como administrador do sistema)e eu mudei o usuário viasu
. Como tal, é muito compreensível que o systemd não tenha ideia de qual usuário estou executando aqui… Então eu entendo que está confuso.
Observe enquanto para serviços systemdtalvez usando o barramento do sistematalvez seja a melhor ideia.
No entanto, para experimentar o podman e especialmente podman generate systemd
também deseja uma sessão em nível de usuário, talvez apenas ter umpersistenteuser( loginctl enable-linger
) é uma maneira útil.
Agora a questão real:Como posso mudar para outro usuário, para que o systemd realmente saiba que esse usuário está logado?Eu só quero "operar" como um usuário diferente (em um novo shell). Como se eu fosse usar su
.
Observe que não quero fazer SSH no servidor como outro usuário. Isso requer chaves SSH adicionais e outras coisas que simplesmente não são necessárias. Quero mudar de usuário enquanto estiver logado (como um usuário que pode executar sudo
, ou seja, administrador do sistema).
Tentativas
Eu tenho sudo machinectl login
, mas isso é:
- inconveniente, pois preciso digitar o nome de usuário novamente (não consigo fazer
sudo machinectl login my-user
. - um problema, pois meu usuário é um usuário do sistema apenas para podman e não tenho uma senha definida – então não consigo fazer login com uma senha
Eu descobri machinectl shell
que parece exatamente o que quero fazer, mas não consigo fazê-lo funcionar. Eu tentei machinectl shell my-user
e machinectl shell my-user@localhost
, mas sempre me diz:
Falha ao obter shell PTY: Nenhuma máquina 'localhost' conhecida
Bem… observe que isso também me mostra que não tenho "máquinas" (o que quer que sejam? Não é localhost
uma?):
$ machinectl list
No machines.
Responder1
Ah, quase consegui:
Observe que, por qualquer motivo, a "máquina" local (ou seja, "localhost") machinectl
é chamada :host
.
Além disso, por qualquer motivo, ele o esconde no arquivo machinectl list
. Você precisa correr machinectl list --all
para realmente ver.
Agora, como sabemos disso, é realmente muito fácil: basta executar isto:
$ sudo machinectl shell [email protected]
E aí está você... em sua nova concha de my-user
. Você pode (de certa forma) verificar isso se verificar as variáveis ambientais $XDG_RUNTIME_DIR
e $DBUS_SESSION_BUS_ADDRESS
que estavam lá no meu erro inicial.
Observe também que aparentemente existe outra sintaxe alternativa que não requer o conhecimento dessa máquina "local":
$ sudo machinectl shell --uid my-user
Na verdade, isso também é mencionado no final domachinectl
página de manual na seção de exemplos.