Como se aplicar imedeatamente?

1

De acordo com esta resposta , habilitei a demora de um usuário em um sistema sem cabeçalho. No entanto, em loginctl list-sessions , o usuário ainda não está listado. Se eu fizer login com esse usuário por ssh, será mostrado que, assim que eu desconectar, ele está faltando.

Como posso gerar a sessão persistente sem reiniciar o sistema inteiro

Eu tentei sem sucesso systemctl restart systemd-logind .

Editar: meu objetivo é executar um cronômetro controlado por esse usuário. Se eu tentar este formulário com um sudo -iu shell depois de ativar o lingering, recebo o seguinte erro:

$ systemctl --user status servicename
Failed to connect to bus: No such file or directory

Se eu fizer login por ssh (e uma sessão aparecer no loginctl), ela funcionará como epxected. Mas agora eu notei que só funciona dentro do shell ssh, ainda não no shell sudo . Então, na verdade, isso provavelmente não está relacionado à sessão.

    
por Zulan 15.08.2018 / 23:27

1 resposta

3

Você está confundindo "usuários" com "sessões" aqui.

Usar loginctl enable-linger myuser fará com que o gerenciador de usuários do usuário myuser inicie na inicialização (e inicie imediatamente se ainda não tiver sido iniciado), mas realmente não iniciará nenhuma sessão para o usuário (isso só acontece quando o usuário faz o login.)

Se você usar o comando loginctl list-users , verá os efeitos dele. Você também pode usar ps -fu myuser para ver o gerenciador de usuários ( systemd --user ) em execução para seu usuário assim que você ativar o linger:

[root@myhost ~]# loginctl list-users
UID USER
  0 root

1 users listed.
[root@myhost ~]# ps -fu myuser
UID        PID  PPID  C STIME TTY          TIME CMD
[root@myhost ~]# loginctl enable-linger myuser
[root@myhost ~]# ps -fu myuser
UID        PID  PPID  C STIME TTY          TIME CMD
myuser   12345     1 20 18:44 ?        00:00:00 /usr/lib/systemd/systemd --user
myuser   12349 12345  0 18:44 ?        00:00:00 (sd-pam)
[root@myhost ~]# loginctl list-users
 UID USER      
   0 root      
1001 myuser

2 users listed.

Mas não há novas sessões para myuser , já que ele não está conectado ao console, GUI ou SSH:

[root@myhost ~]# loginctl list-sessions
SESSION UID USER SEAT TTY  
      1   0 root      tty0

1 sessions listed.

Mas, independentemente das sessões, o gerenciador de usuários é iniciado, portanto, se o usuário tiver unidades de usuário (como serviços ou temporizadores), elas serão iniciadas na inicialização, independentemente de o usuário ter efetuado login ou criado uma sessão.

Espero que isso explique a você.

UPDATE : da sua edição à pergunta, parece que o problema que você está tendo é executar systemctl --user de comandos de um sudo -i shell e não uma sessão SSH.

Você pode contornar isso exportando o XDG_RUNTIME_DIR depois de alternar para o usuário, como:

$ export XDG_RUNTIME_DIR=/run/user/$UID

Ou:

$ XDG_RUNTIME_DIR=/run/user/$UID systemctl --user status servicename

O motivo pelo qual você não precisa disso enquanto faz o login através do SSH é que o SSH irá autenticá-lo com o PAM e um dos módulos do PAM definirá essas variáveis de ambiente para você. Se você usa sudo , você não passa pelo PAM (pelo menos não pela pilha PAM completa) para que você não os configure corretamente.

    
por 16.08.2018 / 03:50

Tags