Terminal: Admite rutas de linux para "directorio de inicio" de distribuciones WSL

Creado en 8 may. 2019  ·  38Comentarios  ·  Fuente: microsoft/terminal

  • Su número de compilación de Windows: Microsoft Windows [Version 10.0.18362.86]

  • Qué estás haciendo y qué está pasando:
    Establecer el directorio de inicio para wsl en profiles.json no hace que apunte al directorio correcto.

  • Tome la configuración a continuación: -
{
        "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"
}

Esto da como resultado que wsl se inicie en la carpeta raíz.
issue1

  1. En esta configuración: -
{
        "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"
}

Esto da como resultado que wsl se inicie en la carpeta de usuario de Windows
issue2

  • Qué está mal / qué debería estar sucediendo en su lugar:
    La configuración del perfil startingDirectory no se está aplicando correctamente en un perfil wsl
Area-Settings Area-TerminalControl Help Wanted Issue-Feature Product-Terminal

Comentario más útil

parece que espera rutas de Windows, pero pasar las rutas de WSL fs en AppData directamente no funciona. Usar la nueva ruta UNC funciona para mí:
"startingDirectory":"//wsl$/Ubuntu/home/cem/src" -> ~/src

Lo mismo ocurre con las ubicaciones habituales de Windows:
"startingDirectory":"C:/wd" -> /mnt/c/wd

Todos 38 comentarios

parece que espera rutas de Windows, pero pasar las rutas de WSL fs en AppData directamente no funciona. Usar la nueva ruta UNC funciona para mí:
"startingDirectory":"//wsl$/Ubuntu/home/cem/src" -> ~/src

Lo mismo ocurre con las ubicaciones habituales de Windows:
"startingDirectory":"C:/wd" -> /mnt/c/wd

Hmm. Quizás deberíamos agregar una configuración para sugerir que el directorio de inicio es una ruta wsl. En este momento, solo estamos configurando manualmente el directorio de trabajo de la aplicación cliente que estamos iniciando, por lo que tendríamos que saber específicamente que el perfil intentaba ser wsl y ajustar nuestra lógica para pasar un directorio de trabajo.

un truco fácil estaría dentro del archivo ~/.bashrc de wsl, agregue la línea
cd ~

Problema resuelto.

un truco fácil estaría dentro del archivo ~/.bashrc de wsl, agregue la línea
cd ~

Problema resuelto.

Esta también es una excelente manera de obtener un comportamiento extraño e inesperado en todo lo demás que use bash en su máquina. :sonreír:

Este método es un poco complicado. Podríamos analizar el nombre de la distribución del comando en el perfil para que wsl.exe -d Ubuntu nos dé "Ubuntu", y luego pasarlo a Profile::EvaluateStartingDirectory . Luego, si falla, antes de configurarlo en %userprofile% podemos evaluar \\WSL$\[distributionName][directory] y ver si esa es una ruta de directorio válida.

O podríamos convertir el método en un método no estático y extraer el valor de _commandline .

EDITAR: Ahora me doy cuenta de que esto no funcionará. Es probable que el servidor P9 no se haya iniciado y, si lo hubiera sido, no se cargarán todas las distribuciones como recursos compartidos disponibles en la ruta UNC.

@ sandeepkv93 - Ese truco no es el mejor. Cuando trabaje en, por ejemplo, VS Code y desee que su terminal WSL se abra dentro del directorio de su proyecto, esto evitará eso. Definitivamente también va a causar otros problemas

Mi solución

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

Acabo de editar mi /etc/passwd después de crear un nuevo usuario para que sea el directorio de inicio de mi usuario de Windows /c/Users/MikeLloyd y establecer startingDirectory en ~ en mi perfil.json. Funciona para mí como se esperaba en 18965.1005.

Mi solución

"commandline" : "wsl.exe ~"

¿Qué sucede si quiero establecer el directorio predeterminado en un directorio en C :?
Probé "commandline" : "wsl.exe /mnt/c/Programming -d Ubuntu-18.04" y otros directorios, con o sin /mnt/c/ , con o sin comillas simples y sin suerte.

@LeoLozes La segunda publicación de este hilo muestra cómo hacer exactamente lo que quieres.

en mi caso funciona de esta manera
"startingDirectory": "//wsl$/Ubuntu-18.04/home/username"

Las soluciones alternativas wsl.exe ~ -d <distro> y //wsl$/home/<username> funcionaron para mí, pero sería bueno si las startingDirectory fueran interpretadas por WSL en lugar de Windows. Por ejemplo, "startingDirectory": "$HOME/projects" debería funcionar.

Sería bueno si Windows Terminal pudiera convertir la ruta. Seguí el # 1060 esperando comenzar mi wsl rápidamente, pero no funciona, porque el Explorador de Windows siempre pasa la ruta original a la Terminal.

Soluciono este problema con

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

en Microsoft Windows [Version 10.0.18363.592] , ver 0.8.100910.0

Mi forma de iniciar WSL siempre en $ HOME:
Cree el enlace de wt.exe,
C: \ Users \ YOURNAME \ AppData \ Local \ Microsoft \ WindowsApps \ wt.exe wsl.exe ~ -d Ubuntu
y simplemente anclarlo en mi menú de inicio, y mantener "directorio de inicio" en el perfil como nulo

Si no pasa el "directorio de inicio" a "wsl.exe", siempre se iniciará desde su directorio actual.

Mi solución es crear un nuevo perfil con la línea de comando inicial wsl.exe ~ . Última versión en la tienda de 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
},

Fácil solución
"directorio_inicio": "// wsl $ / Ubuntu / home /",

@ troy-mac que literalmente comenzará en el directorio de "inicio", no en el directorio de inicio de _your_. Consulte las respuestas anteriores para conocer innumerables soluciones de trabajo ( ejemplo )

Yo uso Ubuntu y mi solución es:
"commandline" : "ubuntu.exe"

Fácil solución
"directorioinicio": "// wsl $ / Ubuntu / home /",

Ni siquiera sé por qué dan 👎🏻

Gracias, lo descubrí ... lo siguiente que debe resolverse es el archivo /etc/resolv.conf que se sobrescribe. Probé algunas soluciones que no funcionan

¿Cómo inicio WSL en un directorio específico?

Por ejemplo, si quiero comenzar en ~/dev ¿qué escribo en la propiedad commandline ?

Intenté "commandline": "wsl.exe ~/dev" , pero obtuve un error como el siguiente:

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

[process exited with code 126]

Editar:
nvm. Descúbrelo escribiendo

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

Con la última versión hace un par de días (profile.json renombrado a settings.json), startingDirectory ahora no funciona en absoluto. Ninguna variación en este hilo funciona en absoluto para mí, ¿alguien más está viendo lo mismo?

La configuración de startingDirectory funcionó para mí, pero parece que tienes que colocarla en el perfil que estás usando. Entonces, por ejemplo, Ubuntu:

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

Tengo 4 distribuciones wsl instaladas, Ubuntu, Debian, Kali-Linux y CentOS. Cuando utilizo la configuración "startingDirectory": "\\\\wsl$\\<distroname>\\home\\jakob" En su mayor parte, Debian respeta el directorio de inicio, pero no siempre, los demás no. Sin embargo, cuando abro una segunda pestaña con una, las otras 3 distos siempre abren en ~ Parece que usar "startingDirectory": "//wsl$//<distroname>/home/jakob" no hace ninguna diferencia, pero usar \\ es más confiable

Editar: estoy ejecutando la versión preliminar de Insider 19619 y wsl2. Parece que cuando las máquinas virtuales están en funcionamiento, respetan la configuración del directorio de inicio. Si las máquinas virtuales están detenidas y deben iniciarse al abrir una pestaña, no es así.

Fácil solución
"directorioinicio": "// wsl $ / Ubuntu / home /",

Ni siquiera sé por qué dan 👎🏻

Debería ser / home / username no / home

Solo para repetir algo que ya se dijo , así es como configura su directorio de inicio para una instancia de WSL determinada:

    "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"
        }
    ],

Reemplaza "Ubuntu" con el nombre de tu distribución.

Tengo 4 distribuciones wsl instaladas, Ubuntu, Debian, Kali-Linux y CentOS. Cuando utilizo la configuración "startingDirectory": "\\\\wsl$\\<distroname>\\home\\jakob" En su mayor parte, Debian respeta el directorio de inicio, pero no siempre, los demás no. Sin embargo, cuando abro una segunda pestaña con una, las otras 3 distos siempre abren en ~ Parece que usar "startingDirectory": "//wsl$//<distroname>/home/jakob" no hace ninguna diferencia, pero usar \\ es más confiable

Editar: estoy ejecutando la versión preliminar de Insider 19619 y wsl2. Parece que cuando las máquinas virtuales están en funcionamiento, respetan la configuración del directorio de inicio. Si las máquinas virtuales están detenidas y deben iniciarse al abrir una pestaña, no es así.

Esto se debe a que // la carpeta wsl $ / no se inicializa hasta que se inicia una instancia de wsl. Entonces, la primera instancia no comenzará en ~, pero las otras comenzarán en ~ porque la primera instancia inicializó la carpeta // wsl $ /

@ troy-mac que literalmente comenzará en el directorio de "inicio", no en el directorio de inicio de _your_. Consulte las respuestas anteriores para conocer innumerables soluciones de trabajo ( ejemplo )

@antoineco Estoy usando Ubuntu (no estoy seguro de si eso importa) pero me pone en _mi_ directorio de inicio / home / troymac, así que obtengo los resultados que estaba buscando ...

@ troy-mac Acabo de probarlo en Ubuntu y no es así. Probablemente tenga otra directiva, ya sea en su archivo de configuración o en su archivo bashrc, pero esto por sí solo _no_ lo coloca en su directorio personal.

De todos modos, mi punto principal fue que deberíamos mantener este hilo libre de información errónea. Se propuso una

Para mí (quizás debido a zsh), la solución "commandline": "wsl.exe /mnt/d/workspace -d Debian" no funciona:

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

[process exited with code 126]

pero "startingDirectory": "D:/workspace" sin ningún "commandline" funciona bien, como se sugirió al principio.

No hay ningún mundo en el que funcione especificar el directorio haciendo wsl /directory . Eso _siempre_ (¡no solo cuando se usa zsh!) Dará como resultado que el shell intente _ ejecutar el directorio_ y luego salir. Eso nunca es lo que quieres.

¿Algún avance en esto?

@maximgeerinck Nop . Nos aseguraremos de actualizar este hilo cuando lo haya. Mientras tanto, ¿puedo recomendar el botón Suscribirse?
image
De esa manera, se le notificará de cualquier actualización de este hilo, sin hacer ping innecesariamente a todos en este hilo ☺️

Hola, todo lo que sé, obtuve algunos pulgares hacia abajo por esta sugerencia que publiqué anteriormente, pero acabo de instalar WSL y Ubuntu-20.04 en un nuevo sistema y todo lo que hice fue agregar las siguientes líneas a mi archivo settings.json y 100% trabajó para colocarme en mi directorio de inicio. No estoy diciendo que funcione para todos, ya que no estoy seguro de que los usuarios con el pulgar hacia abajo realmente lo hayan probado o no, pero me ha funcionado en 2 sistemas diferentes, ambos con Ubuntu-20.04 y 18.04. Creo que es lo más fácil de probar primero y si no funciona para usted, intente un par de sugerencias más en este hilo.

"directorio de inicio": "//wsl$/Ubuntu-20.04/home/troy-mac"
"directorioinicio": "//wsl$/Ubuntu-18.04/home/troy-mac"

o use la sugerencia de @antoineco que puede funcionar todo el tiempo ...
"línea de comandos": "wsl.exe ~ -d Ubuntu"

@ troy-mac Estoy hablando por mí mismo aquí, pero el pulgar hacia abajo fue una forma de decir _ "Advertencia, lector. La solución sugerida en este mensaje no funciona para todos, consulte la solución aceptada en su lugar" _. No fue un intento de despedirte.

Como dijiste, "commandline": "wsl.exe ~ -d <distro_name>" (https://github.com/microsoft/terminal/issues/592#issuecomment-504947429) funciona en prácticamente cualquier caso, así que asegurémonos de que esta solución sea visible para las personas que van a través de este problema, en lugar de tratar de encontrar nuevas soluciones aproximadas.

Al instalar Ubuntu, puede usar

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

Si no está seguro de qué es [DISTRONAME], haga lo siguiente:

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

Ahora obtendrá el recurso compartido de archivos en un explorador. Fx

image

Simplemente siga la ruta desde donde desea comenzar cuando abra una nueva pestaña en la Terminal de Windows. Recuerda:

  1. cuatro barras diagonales inversas al principio y
  2. dos barras diagonales inversas entre los nombres de las carpetas

Me gusta:
image

al construir el startingDirectory . Reinicie la Terminal de Windows y estará listo.

¿Fue útil esta página
0 / 5 - 0 calificaciones