Terminal: Suporta caminhos do Linux para `StartingDirectory` de distros WSL

Criado em 8 mai. 2019  ·  38Comentários  ·  Fonte: microsoft/terminal

  • Seu número de compilação do Windows: Microsoft Windows [Version 10.0.18362.86]

  • O que você está fazendo e o que está acontecendo:
    Definir o diretório inicial para wsl em profiles.json não indica o diretório correto.

  • Faça a configuração abaixo: -
{
        "startingDirectory": "C:/Users/joshj/AppData/Local/Packages/CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc/LocalState/rootfs/home/tackyunicorn",
        "guid": "{a2785f8e-72c9-4550-b406-697388644902}",
        "name": "Ubuntu",
        "colorscheme": "MonokaiVivid",
        "historySize": 9001,
        "snapOnInput": true,
        "cursorColor": "#FFFFFF",
        "cursorHeight": 25,
        "cursorShape": "vintage",
        "commandline": "wsl.exe",
        "fontFace": "Inconsolata for Powerline",
        "fontSize": 10,
        "acrylicOpacity": 1,
        "useAcrylic": true,
        "closeOnExit": true,
        "padding": "10, 10, 10, 10",
        "icon": "ms-appdata:///roaming/ubuntu.png"
}

Isso resulta na inicialização do wsl na pasta raiz
issue1

  1. Nesta configuração: -
{
        "startingDirectory": "/home/tackyunicorn",
        "guid": "{a2785f8e-72c9-4550-b406-697388644902}",
        "name": "Ubuntu",
        "colorscheme": "MonokaiVivid",
        "historySize": 9001,
        "snapOnInput": true,
        "cursorColor": "#FFFFFF",
        "cursorHeight": 25,
        "cursorShape": "vintage",
        "commandline": "wsl.exe",
        "fontFace": "Inconsolata for Powerline",
        "fontSize": 10,
        "acrylicOpacity": 1,
        "useAcrylic": true,
        "closeOnExit": true,
        "padding": "10, 10, 10, 10",
        "icon": "ms-appdata:///roaming/ubuntu.png"
}

Isso resulta na inicialização do wsl na pasta de usuário do Windows
issue2

  • O que está errado / o que deveria estar acontecendo em vez disso:
    A configuração de perfil startingDirectory não está sendo aplicada corretamente em um perfil wsl
Area-Settings Area-TerminalControl Help Wanted Issue-Feature Product-Terminal

Comentários muito úteis

parece que espera caminhos do Windows, mas passar os caminhos WSL fs sob AppData diretamente não funciona. Usar o novo caminho UNC funciona para mim:
"startingDirectory":"//wsl$/Ubuntu/home/cem/src" -> ~/src

O mesmo acontece com os locais regulares do Windows:
"startingDirectory":"C:/wd" -> /mnt/c/wd

Todos 38 comentários

parece que espera caminhos do Windows, mas passar os caminhos WSL fs sob AppData diretamente não funciona. Usar o novo caminho UNC funciona para mim:
"startingDirectory":"//wsl$/Ubuntu/home/cem/src" -> ~/src

O mesmo acontece com os locais regulares do Windows:
"startingDirectory":"C:/wd" -> /mnt/c/wd

Hmm. Devemos talvez adicionar uma configuração para sugerir que o StartingDirectory é um caminho wsl. No momento, estamos apenas configurando manualmente o diretório de trabalho do aplicativo cliente que estamos iniciando, então teríamos que saber especificamente que o perfil estava tentando ser wsl e ajustar nossa lógica para passar em um diretório de trabalho.

um hack fácil seria dentro do arquivo ~/.bashrc do wsl, adicione a linha
cd ~

Problema resolvido.

um hack fácil seria dentro do arquivo ~/.bashrc do wsl, adicione a linha
cd ~

Problema resolvido.

Essa também é uma ótima maneira de obter um comportamento estranho e inesperado em tudo o mais que usa o bash em sua máquina. :sorriso:

Este método é um pouco trabalhoso. Poderíamos analisar o nome da distribuição do comando no perfil para que wsl.exe -d Ubuntu nos forneça "Ubuntu" e, em seguida, passe para Profile::EvaluateStartingDirectory . Então, se falhar, antes de definir para %userprofile% podemos avaliar \\WSL$\[distributionName][directory] e ver se esse é um caminho de diretório válido.

Ou podemos tornar o método um método não estático e extrair o valor de _commandline .

EDIT: Percebo agora que isso não vai funcionar. O servidor P9 provavelmente não terá sido iniciado e, se tiver sido, não terá todas as distros carregadas como compartilhamentos disponíveis no caminho UNC.

@ sandeepkv93 - Esse hack não é o melhor. Ao trabalhar em, digamos, VS Code e você deseja que seu terminal WSL abra dentro do diretório do projeto, isso impedirá isso. Definitivamente, também causará outros problemas

Minha solução alternativa

"commandline" : "wsl.exe ~  -d WLinux"

Acabei de editar meu /etc/passwd depois de criar um novo usuário para ser o diretório inicial de meu usuário do Windows /c/Users/MikeLloyd e definir startingDirectory como ~ em meu profile.json. Funciona para mim como esperado em 18965.1005.

Minha solução alternativa

"commandline" : "wsl.exe ~"

E se eu quiser definir o diretório padrão para um diretório em C :?
Tentei "commandline" : "wsl.exe /mnt/c/Programming -d Ubuntu-18.04" e outros diretórios, com ou sem /mnt/c/ , com ou sem aspas simples e sem sorte.

@LeoLozes A segunda postagem neste tópico mostra como fazer exatamente o que você deseja.

no meu caso funciona assim
"startingDirectory": "//wsl$/Ubuntu-18.04/home/username"

As soluções alternativas wsl.exe ~ -d <distro> e //wsl$/home/<username> funcionaram para mim, mas seria bom se startingDirectory fossem interpretados por WSL em vez de Windows. Por exemplo, "startingDirectory": "$HOME/projects" deve funcionar.

Seria bom se o Terminal do Windows pudesse converter o caminho. Segui # 1060 esperando iniciar meu wsl rapidamente, mas não funciona, porque o Windows Explorer sempre passa o caminho original para o Terminal.

Eu corrijo esse problema com

"startingDirectory": "//wsl$/Ubuntu-18.04/home/myname"

em Microsoft Windows [Version 10.0.18363.592] , ver 0.8.100910.0

Minha maneira de sempre iniciar o WSL em $ HOME:
Crie o link de wt.exe,
C: \ Users \ YOURNAME \ AppData \ Local \ Microsoft \ WindowsApps \ wt.exe wsl.exe ~ -d Ubuntu
e apenas fixá-lo no meu menu iniciar e manter "startedDirectory" no perfil como nulo

Se você não passar o "diretório inicial" para "wsl.exe", ele sempre iniciará do diretório atual.

Minha solução é criar um novo perfil com a linha de comando inicial wsl.exe ~ . Versão mais recente na loja da MS.

{
            "acrylicOpacity" : 1,
            "closeOnExit" : true,
            "colorScheme" : "Campbell",
            "commandline" : "wsl.exe ~",
            "cursorColor" : "#FFFFFF",
            "cursorShape" : "bar",
            "fontFace" : "Consolas",
            "fontSize" : 12,
            "guid" : "{*********************************}",
            "historySize" : 9001,
            "icon" : "ms-appx:///ProfileIcons/{0caa0dad-35be-5f56-a8ff-afceeeaa6101}.png",
            "name" : "Ubuntu home",
            "padding" : "0, 0, 0, 0",
            "snapOnInput" : true,
            "startingDirectory" : "%USERPROFILE%",
            "useAcrylic" : true
},

Conserto fácil
"StartingDirectory": "// wsl $ / Ubuntu / home /",

@troy-mac que iniciará literalmente no diretório "home", não no diretório _your_ home. Por favor, veja as respostas acima para inúmeras soluções de trabalho ( exemplo )

Eu uso o Ubuntu e minha solução alternativa é:
"commandline" : "ubuntu.exe"

Conserto fácil
"StartingDirectory": "// wsl $ / Ubuntu / home /",

Eu nem sei por que eles dão 👎🏻

Obrigado, descobri ... a próxima coisa que precisa ser resolvida é o arquivo /etc/resolv.conf sendo sobrescrito. Tentei alguns contornos sem trabalho

Como eu inicio o WSL em um diretório específico?

Por exemplo, se eu quiser começar em ~/dev o que escrevo na propriedade commandline ?

Tentei "commandline": "wsl.exe ~/dev" , mas recebi um erro como o seguinte:

/bin/bash: /home/myname/dev: Is a directory

[process exited with code 126]

Editar:
nvm. Descubra escrevendo

"startingDirectory":"//wsl$/Ubuntu/home/myname/dev"

Com a versão mais recente há alguns dias (profile.json renomeado para settings.json), startingDirectory agora não funciona. Nem uma única variação neste tópico funciona para mim, alguém está vendo o mesmo?

Definir startingDirectory funcionou para mim, mas parece que você tem que colocá-lo no perfil que está usando. Por exemplo, Ubuntu:

            {
                "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
                "hidden": false,
                "name": "Ubuntu",
                "source": "Windows.Terminal.Wsl",
        "startingDirectory":"//wsl$/Ubuntu/home/me/dev"
            },

Tenho 4 distros wsl instaladas, Ubuntu, Debian, Kali-Linux e CentOS. Quando eu uso a configuração "startingDirectory": "\\\\wsl$\\<distroname>\\home\\jakob" Na maioria das vezes, o Debian respeita o diretório inicial, mas nem sempre, os outros não. No entanto, quando abro uma segunda guia com uma das outras 3 distos, elas sempre abrem em ~ Parece que usar "startingDirectory": "//wsl$//<distroname>/home/jakob" não faz diferença, mas usar \\ é mais confiável

Edit: Estou executando a versão 19619 de visualização do Insider e wsl2. Parece que quando as VMs estão funcionando, elas respeitam a configuração StartingDirectory. Se as VMs estão paradas e precisam ser iniciadas ao abrir uma guia, elas não iniciam.

Conserto fácil
"StartingDirectory": "// wsl $ / Ubuntu / home /",

Eu nem sei por que eles dão 👎🏻

Deve ser / home / nome de usuário, não / home

Apenas para repetir algo que foi

    "profiles": [
        {
            "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
            "hidden": false,
            "name": "Ubuntu",
            "source": "Windows.Terminal.Wsl",
            "fontFace": "Cascadia Code",
            "fontSize": 12,

            // THIS                 vvvvvvvvvvvv
            "commandline": "wsl.exe ~ -d Ubuntu"
        }
    ],

Substitua "Ubuntu" pelo nome de sua distro.

Tenho 4 distros wsl instaladas, Ubuntu, Debian, Kali-Linux e CentOS. Quando eu uso a configuração "startingDirectory": "\\\\wsl$\\<distroname>\\home\\jakob" Na maioria das vezes, o Debian respeita o diretório inicial, mas nem sempre, os outros não. No entanto, quando abro uma segunda guia com uma das outras 3 distos, elas sempre abrem em ~ Parece que usar "startingDirectory": "//wsl$//<distroname>/home/jakob" não faz diferença, mas usar \\ é mais confiável

Edit: Estou executando a versão 19619 de visualização do Insider e wsl2. Parece que quando as VMs estão funcionando, elas respeitam a configuração StartingDirectory. Se as VMs estão paradas e precisam ser iniciadas ao abrir uma guia, elas não iniciam.

Isso ocorre porque // wsl $ / folder não é inicializado até que uma instância wsl seja iniciada. Portanto, a primeira instância não começará em ~, mas as outras começarão em ~ porque a primeira instância inicializou a pasta // wsl $ /

@troy-mac que iniciará literalmente no diretório "home", não no diretório _your_ home. Por favor, veja as respostas acima para inúmeras soluções de trabalho ( exemplo )

@antoineco Estou usando o Ubuntu (não tenho certeza se isso importa), mas ele me coloca no _my_ diretório home / home / troymac, então, para mim, obtenho os resultados que estava procurando ...

@ troy-mac Acabei de experimentar no Ubuntu, mas não funciona. Você provavelmente tem outra diretiva, ou em seu arquivo de configurações ou em seu arquivo bashrc, mas isso por si _não_ o coloca em seu diretório home.

De qualquer forma, meu ponto principal é que devemos manter este tópico livre de informações errôneas. Uma solução de trabalho foi proposta , vamos encorajar os usuários a usá-la em vez de compartilhar truques alternativos imprecisos.

Para mim (talvez por causa de zsh), a solução alternativa "commandline": "wsl.exe /mnt/d/workspace -d Debian" não funciona:

zsh:1: permission denied: /mnt/d/workspace

[process exited with code 126]

mas "startingDirectory": "D:/workspace" sem qualquer "commandline" funciona muito bem, como foi sugerido no início.

Não há mundo no qual especificar o diretório fazendo wsl /directory funcionará. Isso _sempre_ (não apenas ao usar zsh!) Resultará na tentativa do shell de _executar o diretório_ e depois sair. Isso nunca é o que você quer.

alguma atualização disso?

@maximgeerinck Não. Faremos questão de atualizar este tópico quando houver. Enquanto isso, posso recomendar o botão Inscrever-se?
image
Dessa forma, você será notificado sobre qualquer atualização neste tópico, sem precisar enviar ping para todos neste tópico ☺️

Olá a todos, não gostei dessa sugestão que postei anteriormente, mas acabei de instalar o WSL e o Ubuntu-20.04 em um novo sistema e tudo que fiz foi adicionar as linhas abaixo ao meu arquivo settings.json e ele 100% trabalhou para me colocar em meu diretório inicial. Não estou dizendo que funcionará para todos, pois não tenho certeza se os usuários negativos realmente testaram isso ou não, mas funcionou para mim em 2 sistemas diferentes com Ubuntu-20.04 e 18.04. Acho que é a coisa mais fácil de tentar primeiro e, se não funcionar para você, tente algumas outras sugestões neste tópico.

"startupDirectory": "//wsl$/Ubuntu-20.04/home/troy-mac"
"startupDirectory": "//wsl$/Ubuntu-18.04/home/troy-mac"

ou use a sugestão @antoineco que pode funcionar o tempo todo ...
"linha de comando": "wsl.exe ~ -d Ubuntu"

@ troy-mac estou falando por mim aqui, mas o polegar era uma maneira de dizer _ "Aviso, leitor. A solução sugerida nesta mensagem não funciona para todos, por favor, consulte a solução aceita" _. Não foi uma tentativa de dispensar você.

Como você disse, "commandline": "wsl.exe ~ -d <distro_name>" (https://github.com/microsoft/terminal/issues/592#issuecomment-504947429) funciona em praticamente qualquer caso, então vamos garantir que essa solução seja visível para as pessoas que vão com esse problema, em vez de tentar encontrar soluções novas e aproximadas.

Ao instalar o Ubuntu, pode usar

"startingDirectory":"\\\\wsl$\\[DISTRONAME]\\home\\[USERNAME]"

Se não tiver certeza do que é [DISTRONAME], faça:

  1. Win + R
  2. \\ wsl $
  3. Pressione Enter

Agora você obterá o compartilhamento de arquivos em um explorador. Fx

image

Basta seguir o caminho de onde deseja iniciar ao abrir uma nova guia no Terminal do Windows. Lembrar:

  1. quatro barras no início e
  2. duas barras invertidas entre os nomes das pastas

Gostar:
image

ao construir o startingDirectory . Reinicie o Terminal do Windows e você está pronto para prosseguir.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

ghvanderweg picture ghvanderweg  ·  3Comentários

TayYuanGeng picture TayYuanGeng  ·  3Comentários

xmm1989218 picture xmm1989218  ·  3Comentários

dev-logan picture dev-logan  ·  3Comentários

mrmlnc picture mrmlnc  ·  3Comentários