Estou usando o Ubuntu com WSL com um shell zsh/bash. Meu sistema operacional host é o Windows 10. Já descobri como montar uma unidade externa do Windows :
sudo mkdir /mnt/d
sudo mount -t drvfs D: /mnt/d
Raramente conecto esta unidade, então gostaria de montá-la automaticamente quando o fizer. Tudo bem se isso ocorrer depois de conectar a unidade e iniciar um novo terminal WSL.
Eu não quero colocar este comando em um .bashrc
tipo de arquivo porque ter que digitar minha senha toda vez que eu abrir um terminal seria mais problemático do que vale a pena, especialmente se 99% das vezes, o comando falhar de qualquer maneira. Colocá-lo em um script bash também não ajudará, porque eu o executaria com pouca frequência, quando precisar usá-lo, esquecerei que o criei em primeiro lugar.
Então, existe uma maneira de montar uma unidade externa quando ela estiver disponível no WSL?
Não sei se esta é uma boa solução, mas isso informa como desativar a solicitação de senha para sudo. Este é o caminho que fiz: https://superuser.com/a/1492456/89165
Parece-me que isso precisará de duas abordagens diferentes:
Drive já conectado quando o WSL é iniciado
A primeira parte deve ser bem fácil.
Isso é simples de superar. Adicione o seguinte ao seu
~/.bashrc
em vez disso:Isso montará a unidade, se estiver disponível. Caso contrário, ele falhará silenciosamente.
A unidade está conectada enquanto o WSL está em execução
Não é fácil e provavelmente precisa de mais tratamento de erros para ser "robusto", mas consegui fazer isso funcionar criando um script do PowerShell para:
wsl -u root -e mount -t drvfs /mnt/<driveletter> <Drive>
quando o evento for acionado.Observe que isso precisa ser executado no Windows PowerShell (em vez do PowerShell Core), pois usa o
WMIEvent
. Tenho certeza de que há um equivalente do PowerShell Core usando CIM, mas ainda não tentei dessa maneira.Se você tiver um problema, verifique a saída. Do PowerShell:
Em teoria, você pode definir este script para ser executado no Windows Login via Agendador de Tarefas, mas eu não tentei. Tenho 80% de certeza que vai funcionar. Você precisará chamá-lo por meio do
powershell
comando (nãopwsh
, pois ele usa WMIEvent).Observe que, aparentemente, também há uma maneira de registrar o ouvinte de eventos permanentemente por meio do CIM. Passei algum tempo nisso na semana passada, mas fui perseguido quando segui uma documentação que criou uma classe CIM no meu sistema da qual não consegui me livrar. Eu posso voltar a ela eventualmente, mas espero que isso funcione para você como uma tarefa agendada. Eu só não queria adiar a postagem até que eu conseguisse "perfeitamente", porque eu nunca poderia terminá-la.