Estou usando o Ubuntu 20.04 no subsistema Windows para Linux no Windows 10. Quando digito o who
comando, não recebo saída:
renniej@ratitch:~$ whoami
renniej
renniej@ratitch:~$ who
renniej@ratitch:~$
Eu tentei várias coisas como sudo who
e, who -a
mas ainda não recebo saída. who --version
dá:
who (GNU coreutils) 8.30
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Joseph Arceneaux, David MacKenzie, and Michael Stone.
Estou fazendo alguma bobagem aqui? Ou isso é um recurso do WSL2?
Resposta curta
Nada bobo. Há um problema no Github relacionado à causa raiz . Enquanto a equipe da WSL originalmente o classificou como "por design" e "recurso", houve atividade no ano passado que indica que é "alto valor e baixo custo".
Por outro lado, mais recentemente, observa-se que foi criado há 5 anos e não tem "polegar para cima" de outros usuários que desejam corrigi-lo. Meu palpite é que isso não será alterado até que o WSL adote uma abordagem mais semelhante ao Systemd para a inicialização (veja abaixo para obter detalhes).
Explicação
... ou mais do que você provavelmente sempre quis saber
who
Há dois motivos pelos quais
who
não está mostrando nenhum resultado:Primeiro, o óbvio --
who
é projetado para mostrar (citando a página man), "quem está logado". Quando você inicia o WSL, ele não envia seu usuário por meio da senha de login, razão pela qual não é solicitada uma senha.Segundo, o WSL executa seu próprio
/init
processo como PID1 na inicialização, que faz a "mágica" de configurar coisas como:.exe
seja executadoUm sistema Linux "normal", por outro lado, inicia com Systemd ou SysVInit (ou um punhado de outros sistemas init ao longo dos anos). O sistema init é responsável por estabelecer o nível de execução, entre outras coisas. E junto com isso (estou aprendendo isso sozinho com esse problema do Github), a
/var/run/utmp
construção, que é o que rastreia quem está usando o sistema.Existem algumas maneiras de "forçar" quem trabalhar:
O primeiro é abordado nesse tópico do Github. Primeiro, hackeie um
/var/run/utmp
com algo como:Em seguida, force um "login" com
sudo login -f $USER
. Você pode então ver seu usuário conectado usandowho
. Se você fizer login novamente viassh
(você precisa configurá-lo primeiro), esse login também aparecerá.Segundo, você pode iniciar o Systemd em seu próprio namespace PID:
Aguarde alguns segundos para que o Systemd seja inicializado e ele será inicializado
/var/run/utmp
. Tecnicamente, neste ponto, você podesudo login -f $USER
e verwho
.Observe que o Systemd não é totalmente utilizável sem esforço adicional (além do escopo desta resposta) e que você deve encerrar a instância do Ubuntu WSL depois de fazer isso para retornar a um estado estável. Saia do WSL e depois
wsl --terminate <distro>
(onde<distro>
é provávelubuntu
). Assim que você reiniciar, tudo voltará ao normal.