Por que o diretório $XDG_RUNTIME_DIR (/run/user/$UID) não é criado após "su - user"? :
administrateur@localhost:~$ su - test
Password:
test@localhost:~$ systemctl --user
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)
test@localhost:~$ ls /run/user/$UID
ls: cannot access '/run/user/1004': No such file or directory
test@localhost:~$ groups
test
test@localhost:~$
logout
administrateur@localhost:~$
EDIT0: Fazer um sudo loginctl enable-linger test
mantém o /run/user/$UID
diretório lá, mas a XDG_RUNTIME_DIR
variável ainda não está definida:
administrateur@localhost:~$ sudo loginctl enable-linger test
administrateur@localhost:~$ sudo su - test
test@localhost:~$ ls /run/user/$UID/bus
/run/user/1004/bus
test@localhost:~$ echo $XDG_RUNTIME_DIR
test@localhost:~$
logout
administrateur@localhost:~$
Como sua existência (assim como a existência do processo "systemd --user" real que você tentou acessar) está vinculada a ter pelo menos uma sessão de login do systemd-logind e deliberadamente não é permitido criar uma nova sessão diretamente de dentro de uma sessão existente, seja por
su
ou outras ferramentas.machinectl shell test@
gerará um shell de um serviço (semelhante a como seu login regular é gerado a partir do serviço 'agetty'), e sua configuração PAM inclui pam_systemd, então ele terá sua própria sessão criada.Marcar um usuário para "modo linger" usando
loginctl enable-linger test
fará com que systemd-logind crie o diretório de tempo de execução (e inicie a instância "systemd --user" do usuário) na inicialização e o mantenha permanentemente, independentemente da contagem de sessões.A partir do systemd v239 ou posterior, também é possível iniciar manualmente o gerenciador de serviços de um usuário
user@<uid>.service
- o diretório de tempo de execução será configurado automaticamente como uma dependência (em versões anteriores, ele estava vinculado aos componentes internos do logind).