Terminal: Prise en charge des chemins Linux pour `startingDirectory` des distributions WSL

Créé le 8 mai 2019  ·  38Commentaires  ·  Source: microsoft/terminal

  • Votre numéro de build Windows: Microsoft Windows [Version 10.0.18362.86]

  • Ce que vous faites et ce qui se passe:
    Définir le répertoire de départ pour wsl dans profiles.json ne le fait pas pointer vers le bon répertoire.

  • Prenez la configuration ci-dessous: -
{
        "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"
}

Cela entraîne le démarrage de wsl dans le dossier racine
issue1

  1. Dans cette configuration: -
{
        "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"
}

Cela entraîne le démarrage de wsl dans le dossier utilisateur Windows
issue2

  • Qu'est-ce qui ne va pas / que devrait-il se passer à la place:
    Le paramètre de profil startingDirectory n'est pas appliqué correctement sur un profil WSL
Area-Settings Area-TerminalControl Help Wanted Issue-Feature Product-Terminal

Commentaire le plus utile

il semble qu'il attend des chemins Windows, mais le passage des chemins WSL fs directement sous AppData ne fonctionne pas. L'utilisation du nouveau chemin UNC fonctionne pour moi:
"startingDirectory":"//wsl$/Ubuntu/home/cem/src" -> ~/src

Alors faites des emplacements Windows réguliers:
"startingDirectory":"C:/wd" -> /mnt/c/wd

Tous les 38 commentaires

il semble qu'il attend des chemins Windows, mais le passage des chemins WSL fs directement sous AppData ne fonctionne pas. L'utilisation du nouveau chemin UNC fonctionne pour moi:
"startingDirectory":"//wsl$/Ubuntu/home/cem/src" -> ~/src

Alors faites des emplacements Windows réguliers:
"startingDirectory":"C:/wd" -> /mnt/c/wd

Hmm. Nous devrions peut-être ajouter un paramètre pour suggérer que le startingDirectory est un chemin wsl. Pour le moment, nous définissons simplement manuellement le répertoire de travail de l'application client que nous démarrons, nous devrons donc savoir spécifiquement que le profil essayait d'être wsl et ajuster notre logique pour passer dans un répertoire de travail.

un hack facile serait dans le fichier ~/.bashrc de wsl, ajoutez la ligne
cd ~

Problème résolu.

un hack facile serait dans le fichier ~/.bashrc de wsl, ajoutez la ligne
cd ~

Problème résolu.

C'est aussi un excellent moyen d'obtenir un comportement étrange et inattendu dans tout ce qui utilise bash sur votre machine. :sourire:

Cette méthode est un peu de travail. Nous pourrions analyser le nom de la distribution à partir de la commande dans le profil afin que wsl.exe -d Ubuntu nous donne "Ubuntu", puis le passer à Profile::EvaluateStartingDirectory . Ensuite, en cas d'échec, avant de le définir sur %userprofile% nous pouvons évaluer \\WSL$\[distributionName][directory] et voir si c'est un chemin de répertoire valide.

Ou nous pourrions faire de la méthode une méthode non statique et tirer la valeur de _commandline .

EDIT: Je me rends compte maintenant que cela ne fonctionnera pas. Le serveur P9 n'aura probablement pas été démarré et, s'il l'avait été, toutes les distributions ne seront pas chargées en tant que partages disponibles sous le chemin UNC.

@ sandeepkv93 - Ce hack n'est pas le meilleur. Lorsque vous travaillez dans VS Code et que vous voulez que votre terminal WSL s'ouvre dans le répertoire de votre projet, cela évitera cela. Va certainement causer d'autres problèmes aussi

Ma solution de contournement

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

Je viens de modifier mon /etc/passwd après avoir créé un nouvel utilisateur pour être le répertoire personnel /c/Users/MikeLloyd mon utilisateur Windows startingDirectory sur ~ dans mon profile.json. Cela fonctionne pour moi comme prévu sur 18965.1005.

Ma solution de contournement

"commandline" : "wsl.exe ~"

Que faire si je veux définir le répertoire par défaut sur un répertoire dans C:?
J'ai essayé "commandline" : "wsl.exe /mnt/c/Programming -d Ubuntu-18.04" et d'autres répertoires, avec ou sans /mnt/c/ , avec ou sans guillemets simples et pas de chance.

@LeoLozes Le deuxième article de ce fil montre comment faire exactement ce que vous voulez.

dans mon cas, ça marche comme ça
"startingDirectory": "//wsl$/Ubuntu-18.04/home/username"

Les solutions //wsl$/home/<username> contournement wsl.exe ~ -d <distro> et //wsl$/home/<username> fonctionné pour moi, mais ce serait bien si les startingDirectory étaient interprétés par WSL plutôt que Windows. Par exemple, "startingDirectory": "$HOME/projects" devrait juste fonctionner.

Ce serait bien si Windows Terminal pouvait convertir le chemin. J'ai suivi # 1060 en m'attendant à démarrer mon wsl rapidement, mais cela ne fonctionne pas, car l'Explorateur Windows passe toujours le chemin d'origine vers Terminal.

Je résout ce problème avec

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

dans Microsoft Windows [Version 10.0.18363.592] , ver 0.8.100910.0

Ma façon de toujours démarrer WSL sur $ HOME:
Créez le lien wt.exe,
C: \ Users \ VOTRE NOM \ AppData \ Local \ Microsoft \ WindowsApps \ wt.exe wsl.exe ~ -d Ubuntu
et épinglez-le simplement sur mon menu Démarrer, et gardez "startingDirectory" dans le profil comme nul

Si vous ne passez pas le "répertoire de départ" à "wsl.exe", il démarrera toujours à partir de votre répertoire actuel.

Ma solution est de créer un nouveau profil avec la ligne de commande de départ wsl.exe ~ . Dernière version sur MS Store.

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

Solution facile
"startingDirectory": "// wsl $ / Ubuntu / home /",

@ troy-mac qui démarrera littéralement dans le répertoire "home", pas dans _votre_ répertoire personnel. Veuillez consulter les réponses ci-dessus pour d'innombrables solutions de travail ( exemple )

J'utilise Ubuntu et ma solution de contournement est:
"commandline" : "ubuntu.exe"

Solution facile
"startingDirectory": "// wsl $ / Ubuntu / home /",

Je ne sais même pas pourquoi ils donnent 👎🏻

Merci, je l'ai compris ... la prochaine chose à résoudre est le fichier /etc/resolv.conf qui est écrasé. J'ai essayé quelques contournements sans travail

Comment démarrer WSL dans un répertoire spécifique?

Par exemple, si je veux commencer à ~/dev que dois-je écrire dans la propriété commandline ?

J'ai essayé "commandline": "wsl.exe ~/dev" , mais j'ai eu une erreur comme ci-dessous:

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

[process exited with code 126]

Éditer:
nvm. Comprenez-le en écrivant

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

Avec la dernière version d'il y a quelques jours (profile.json renommé settings.json), startingDirectory ne fonctionne plus du tout. Pas une seule variation de ce fil ne fonctionne du tout pour moi, est-ce que quelqu'un d'autre voit la même chose?

La configuration de startingDirectory fonctionné pour moi, mais il semble que vous deviez la placer dans le profil que vous utilisez. Par exemple, Ubuntu:

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

J'ai 4 distributions wsl installées, Ubuntu, Debian, Kali-Linux et CentOS. Quand j'utilise le paramètre "startingDirectory": "\\\\wsl$\\<distroname>\\home\\jakob" Pour la plupart, Debian respecte le répertoire de départ mais pas toujours, les autres ne le font pas. Cependant, quand j'ouvre un deuxième onglet avec l'une des 3 autres distos, elles s'ouvrent toujours dans ~ Il semble qu'utiliser "startingDirectory": "//wsl$//<distroname>/home/jakob" ne fait aucune différence mais utiliser \\ est plus fiable

Edit: J'exécute Insider preview build 19619 et wsl2. Il semble que lorsque les machines virtuelles sont opérationnelles, elles respectent le paramètre startingDirectory. Si les machines virtuelles sont arrêtées et doivent démarrer lors de l'ouverture d'un onglet, elles ne le font pas.

Solution facile
"startingDirectory": "// wsl $ / Ubuntu / home /",

Je ne sais même pas pourquoi ils donnent 👎🏻

Ce devrait être / home / username pas / home

Juste pour répéter quelque chose qui a déjà été

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

Remplacez "Ubuntu" par le nom de votre distribution.

J'ai 4 distributions wsl installées, Ubuntu, Debian, Kali-Linux et CentOS. Quand j'utilise le paramètre "startingDirectory": "\\\\wsl$\\<distroname>\\home\\jakob" Pour la plupart, Debian respecte le répertoire de départ mais pas toujours, les autres ne le font pas. Cependant, quand j'ouvre un deuxième onglet avec l'une des 3 autres distos, elles s'ouvrent toujours dans ~ Il semble qu'utiliser "startingDirectory": "//wsl$//<distroname>/home/jakob" ne fait aucune différence mais utiliser \\ est plus fiable

Edit: J'exécute Insider preview build 19619 et wsl2. Il semble que lorsque les machines virtuelles sont opérationnelles, elles respectent le paramètre startingDirectory. Si les machines virtuelles sont arrêtées et doivent démarrer lors de l'ouverture d'un onglet, elles ne le font pas.

En effet, le dossier // wsl $ / n'est pas initialisé tant qu'une instance wsl n'est pas démarrée. Ainsi, la première instance ne démarrera pas dans ~, mais les autres commenceront dans ~ car la première instance a initialisé le dossier // wsl $ /

@ troy-mac qui démarrera littéralement dans le répertoire "home", pas dans _votre_ répertoire personnel. Veuillez consulter les réponses ci-dessus pour d'innombrables solutions de travail ( exemple )

@antoineco J'utilise Ubuntu (je ne sais pas si cela compte) mais cela me place dans le répertoire _my_ home / home / troymac donc pour moi j'obtiens les résultats que je recherchais ...

@ troy-mac Je viens d'essayer sur Ubuntu, et ce n'est pas le cas. Vous avez probablement une autre directive, soit dans votre fichier de paramètres, soit dans votre fichier bashrc, mais cela seul ne vous met pas dans votre répertoire personnel.

Quoi qu'il en soit, mon point principal était que nous devrions garder ce fil exempt d'informations erronées. Une solution de travail a été proposée , encourageons les utilisateurs à l'utiliser au lieu de partager des astuces alternatives inexactes.

Pour moi (peut-être à cause de zsh), la solution "commandline": "wsl.exe /mnt/d/workspace -d Debian" contournement "commandline": "wsl.exe /mnt/d/workspace -d Debian" ne fonctionne pas:

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

[process exited with code 126]

mais "startingDirectory": "D:/workspace" sans "commandline" fonctionne très bien, comme cela a été suggéré au tout début.

Il n'y a pas de monde dans lequel spécifier le répertoire en faisant wsl /directory fonctionnera. Cela _toujours_ (pas seulement lors de l'utilisation de zsh!) Entraînera le shell qui tentera _exécuter le répertoire_ puis de quitter. Ce n'est jamais ce que tu veux.

Une mise à jour pour ceci?

@maximgeerinck Non. Nous nous assurerons de mettre à jour ce fil de discussion le cas échéant. En attendant, puis-je recommander le bouton S'abonner?
image
De cette façon, vous serez informé de toute mise à jour de ce fil, sans envoyer inutilement un ping à tout le monde sur ce fil ☺️

Salut tout ce que je sais, j'ai eu quelques pouces vers le bas pour cette suggestion que j'ai publiée plus tôt, mais je viens d'installer WSL et Ubuntu-20.04 sur un nouveau système et tout ce que j'ai fait a été d'ajouter les lignes ci-dessous à mon fichier settings.json et 100% travaillé pour me déposer dans mon répertoire personnel. Je ne dis pas que cela fonctionnera pour tout le monde car je ne suis pas sûr que les utilisateurs de Thumbs down aient réellement testé cela ou non, mais cela a fonctionné pour moi sur 2 systèmes différents avec Ubuntu-20.04 et 18.04. Je pense que c'est la chose la plus simple à essayer en premier et si cela ne fonctionne pas pour vous, essayez quelques autres suggestions sur ce fil.

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

ou utilisez la suggestion @antoineco qui peut fonctionner tout le temps ...
"ligne de commande": "wsl.exe ~ -d Ubuntu"

@ troy-mac Je parle pour moi ici, mais le pouce vers le bas était une façon de dire _ "Attention, lecteur. La solution suggérée dans ce message ne fonctionne pas pour tout le monde, veuillez vous référer à la solution acceptée à la place" _. Ce n'était pas une tentative de vous renvoyer.

Comme vous l'avez dit, "commandline": "wsl.exe ~ -d <distro_name>" (https://github.com/microsoft/terminal/issues/592#issuecomment-504947429) fonctionne dans à peu près tous les cas, alors assurons-nous que cette solution est visible pour les personnes qui y vont à travers ce problème, au lieu d'essayer de trouver de nouvelles solutions approximatives.

Lors de l'installation d'Ubuntu, peut utiliser

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

Si vous ne savez pas ce qu'est [DISTRONAME], procédez comme suit:

  1. Gagner + R
  2. \\ wsl $
  3. Appuyez sur Entrée

Vous obtiendrez maintenant le partage de fichiers dans un explorateur. Fx

image

Suivez simplement le chemin à partir duquel vous souhaitez commencer lors de l'ouverture d'un nouvel onglet dans Windows Terminal. Rappelles toi:

  1. quatre barres obliques au début et
  2. deux barres obliques inverses entre les noms de dossier

Comme:
image

lors de la construction du startingDirectory . Redémarrez Windows Terminal et vous êtes prêt à partir.

Cette page vous a été utile?
0 / 5 - 0 notes