Terminal: Поддержка путей linux для `startDirectory` дистрибутивов WSL

Созданный на 8 мая 2019  ·  38Комментарии  ·  Источник: microsoft/terminal

  • Номер вашей сборки Windows: Microsoft Windows [Version 10.0.18362.86]

  • Что вы делаете и что происходит:
    Установка начального каталога для wsl в profiles.json не указывает на правильный каталог.

  • Возьмите конфигурацию ниже: -
{
        "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"
}

Это приводит к запуску wsl в корневой папке.
issue1

  1. В этой конфигурации: -
{
        "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"
}

Это приводит к запуску wsl в папке пользователя Windows.
issue2

  • Что не так / что должно происходить вместо этого:
    Параметр профиля startingDirectory неправильно применяется к профилю wsl
Area-Settings Area-TerminalControl Help Wanted Issue-Feature Product-Terminal

Самый полезный комментарий

похоже, что он ожидает пути к Windows, но передача путей WSL fs напрямую в AppData не работает. У меня работает новый UNC-путь:
"startingDirectory":"//wsl$/Ubuntu/home/cem/src" -> ~/src

То же самое и с обычными локациями Windows:
"startingDirectory":"C:/wd" -> /mnt/c/wd

Все 38 Комментарий

похоже, что он ожидает пути к Windows, но передача путей WSL fs напрямую в AppData не работает. У меня работает новый UNC-путь:
"startingDirectory":"//wsl$/Ubuntu/home/cem/src" -> ~/src

То же самое и с обычными локациями Windows:
"startingDirectory":"C:/wd" -> /mnt/c/wd

Хм. Возможно, нам стоит добавить настройку, предполагающую, что startDirectory - это путь wsl. Прямо сейчас мы просто вручную устанавливаем рабочий каталог клиентского приложения, которое мы запускаем, поэтому нам нужно специально знать, что профиль пытается быть wsl, и настроить нашу логику для передачи в рабочий каталог.

один простой хак будет внутри ~/.bashrc файла wsl, добавьте строку
cd ~

Задача решена.

один простой хак будет внутри ~/.bashrc файла wsl, добавьте строку
cd ~

Задача решена.

Это также отличный способ добиться странного и неожиданного поведения всего остального, что использует bash на вашем компьютере. :улыбка:

Этот метод требует небольшой работы. Мы могли бы разобрать имя дистрибутива из команды в профиле так, чтобы wsl.exe -d Ubuntu давало нам «Ubuntu», а затем передать это в Profile::EvaluateStartingDirectory . Затем, если это не удается, перед установкой его на %userprofile% мы можем оценить \\WSL$\[distributionName][directory] и посмотреть, является ли это допустимым путем к каталогу.

Или мы могли бы сделать метод нестатическим и извлечь значение из _commandline .

EDIT: теперь я понимаю, что это не сработает. Сервер P9, скорее всего, не был запущен, и, если бы это было так, не все дистрибутивы были загружены как доступные общие ресурсы по пути UNC.

@ sandeepkv93 - Этот хакер не самый лучший. При работе, скажем, в VS Code, и вы хотите, чтобы ваш WSL-терминал открывался в каталоге вашего проекта, это предотвратит это. Определенно вызовет и другие проблемы

Мое обходное решение

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

Я только что отредактировал свой /etc/passwd после создания нового пользователя в качестве домашнего каталога пользователя Windows /c/Users/MikeLloyd и установил startingDirectory равным ~ в моем profile.json. У меня работает как положено на 18965.1005.

Мое обходное решение

"commandline" : "wsl.exe ~"

Что, если я хочу установить в качестве каталога по умолчанию каталог в C :?
Я пробовал "commandline" : "wsl.exe /mnt/c/Programming -d Ubuntu-18.04" и другие каталоги, с /mnt/c/ или без них, с одиночными кавычками или без них, и безуспешно.

@LeoLozes Второй пост в этой теме показывает, как делать именно то, что вы хотите.

в моем случае это работает так
"startingDirectory": "//wsl$/Ubuntu-18.04/home/username"

У меня работали обходные пути wsl.exe ~ -d <distro> и //wsl$/home/<username> , но было бы неплохо, если бы startingDirectory интерпретировались WSL, а не Windows. Например, "startingDirectory": "$HOME/projects" должно работать.

Было бы неплохо, если бы Windows Terminal мог преобразовать путь. Я выполнил # 1060, ожидая быстрого запуска wsl, но это не работает, потому что проводник Windows всегда передает исходный путь к Терминалу.

Я исправляю эту проблему с помощью

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

в Microsoft Windows [Version 10.0.18363.592] , вер 0.8.100910.0

Мой способ всегда запускать WSL на $ HOME:
Создайте ссылку на wt.exe,
C: \ Users \ ВАШЕ ИМЯ \ AppData \ Local \ Microsoft \ WindowsApps \ wt.exe wsl.exe ~ -d Ubuntu
и просто закрепите его в моем меню "Пуск" и оставьте "startDirectory" в профиле как null

Если вы не передадите «начальный каталог» в «wsl.exe», он всегда будет запускаться из вашего текущего каталога.

Мое решение - создать новый профиль со стартовой командной строкой wsl.exe ~ . Последняя версия в магазине 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
},

Легко исправить
"startDirectory": "// wsl $ / Ubuntu / home /",

@ troy-mac, который буквально запускается в "домашнем" каталоге, а не в вашем домашнем каталоге. См. Ответы выше для бесчисленных рабочих решений ( пример )

Я использую Ubuntu, и мое решение:
"commandline" : "ubuntu.exe"

Легко исправить
"startDirectory": "// wsl $ / Ubuntu / home /",

Я даже не знаю, почему они дают 👎🏻

Спасибо, я понял ... следующее, что нужно решить, это перезапись файла /etc/resolv.conf. Пробовал несколько обойтись без работы

Как запустить WSL в определенном каталоге?

Например, если я хочу начать с ~/dev что мне писать в свойстве commandline ?

Я попробовал "commandline": "wsl.exe ~/dev" , но получил ошибку, как показано ниже:

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

[process exited with code 126]

Редактировать:
nvm. Выясните это, написав

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

С последней версией, выпущенной пару дней назад (profile.json переименован в settings.json), startingDirectory теперь вообще не работает. Ни один вариант в этой ветке не работает для меня, кто-нибудь еще видит то же самое?

Установка startingDirectory у меня сработала, но кажется, что вам нужно поместить ее в используемый вами профиль. Так, например, Ubuntu:

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

У меня установлено 4 дистрибутива wsl: Ubuntu, Debian, Kali-Linux и CentOS. Когда я использую настройку "startingDirectory": "\\\\wsl$\\<distroname>\\home\\jakob" По большей части Debian уважает начальный каталог, но не всегда, другие этого не делают. Однако, когда я открываю вторую вкладку с одной, другие 3 диска, которые они всегда открывают в ~ Кажется, что использование "startingDirectory": "//wsl$//<distroname>/home/jakob" имеет никакого значения, но использование \\ более надежно

Изменить: я использую сборку предварительной версии Insider 19619 и wsl2. Кажется, что когда виртуальные машины запущены и работают, они соблюдают настройку startDirectory. Если виртуальные машины остановлены и должны запускаться при открытии вкладки, они этого не делают.

Легко исправить
"startDirectory": "// wsl $ / Ubuntu / home /",

Я даже не знаю, почему они дают 👎🏻

Это должно быть / home / username, а не / home

Чтобы повторить то, что уже было сказано , вот как вы устанавливаете начальный каталог для данного экземпляра WSL:

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

Замените «Ubuntu» названием своего дистрибутива.

У меня установлено 4 дистрибутива wsl: Ubuntu, Debian, Kali-Linux и CentOS. Когда я использую настройку "startingDirectory": "\\\\wsl$\\<distroname>\\home\\jakob" По большей части Debian уважает начальный каталог, но не всегда, другие этого не делают. Однако, когда я открываю вторую вкладку с одной, другие 3 диска, которые они всегда открывают в ~ Кажется, что использование "startingDirectory": "//wsl$//<distroname>/home/jakob" имеет никакого значения, но использование \\ более надежно

Изменить: я использую сборку предварительной версии Insider 19619 и wsl2. Кажется, что когда виртуальные машины запущены и работают, они соблюдают настройку startDirectory. Если виртуальные машины остановлены и должны запускаться при открытии вкладки, они этого не делают.

Это потому, что // папка wsl $ / не инициализируется, пока не будет запущен экземпляр wsl. Таким образом, первый экземпляр не будет запускаться в ~, но остальные начнутся в ~, потому что первый экземпляр инициализировал папку // wsl $ /

@ troy-mac, который буквально запускается в "домашнем" каталоге, а не в вашем домашнем каталоге. См. Ответы выше для бесчисленных рабочих решений ( пример )

@antoineco Я использую Ubuntu (не уверен, что это имеет значение), но он помещает меня в _my_ домашний каталог / home / troymac, поэтому для меня я получаю результаты, которые искал ...

@ troy-mac Я только что попробовал Ubuntu, но это не так. У вас, вероятно, есть другая директива, либо в вашем файле настроек, либо в вашем файле bashrc, но только она _не_ помещает вас в ваш домашний каталог.

В любом случае, моя главная мысль заключалась в том, что мы не должны содержать в этой ветке ошибочной информации. Было предложено рабочее решение , давайте посоветуем пользователям использовать его вместо того, чтобы делиться неточными альтернативными приемами.

Для меня (возможно, из-за zsh) обходной путь "commandline": "wsl.exe /mnt/d/workspace -d Debian" не работает:

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

[process exited with code 126]

но "startingDirectory": "D:/workspace" без "commandline" работает нормально, как было предложено в самом начале.

Нет мира, в котором указание каталога с помощью wsl /directory будет работать. Это _всегда_ (не только при использовании zsh!) Приведет к тому, что оболочка попытается _выполнить каталог_, а затем завершится. Это никогда не то, чего вы хотите.

какие-нибудь обновления по этому поводу?

@maximgeerinck Нет. Мы обязательно обновим эту ветку, когда она появится. А пока могу я порекомендовать кнопку «Подписаться»?
image
Таким образом, вы будете уведомлены обо всех обновлениях этой ветки, без необходимости пинговать всех в этой ветке

Привет всем, что я знаю, я получил несколько отрицательных отзывов за это предложение, которое я опубликовал ранее, но я только что установил WSL и Ubuntu-20.04 в новой системе, и все, что я сделал, это добавил следующие строки в свой файл settings.json, и это 100% работал для того, чтобы перетащить меня в мой домашний каталог. Я не говорю, что это сработает для всех, так как я не уверен, что пользователи, поставившие отметку «Нравится», действительно тестировали это или нет, но он работал у меня в двух разных системах как с Ubuntu-20.04, так и с 18.04. Я думаю, что это проще всего попробовать в первую очередь, и если это не сработает для вас, попробуйте еще пару предложений в этой теме.

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

или используйте предложение @antoineco, которое может работать все время ...
"командная строка": "wsl.exe ~ -d Ubuntu"

@ troy-mac Я говорю здесь от себя, но большой палец вниз был способом сказать _ «Внимание, читатель. Решение, предложенное в этом сообщении, не работает для всех, пожалуйста, обратитесь к принятому решению» _. Это не была попытка вас уволить.

Как вы сказали, "commandline": "wsl.exe ~ -d <distro_name>" (https://github.com/microsoft/terminal/issues/592#issuecomment-504947429) работает практически в любом случае, поэтому давайте сделаем так, чтобы это решение было видно людям, которые через эту проблему, вместо того, чтобы пытаться найти новые приблизительные решения.

При установке Ubuntu можно использовать

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

Если вы не уверены, что такое [DISTRONAME], выполните:

  1. Win + R
  2. \\ wsl $
  3. Нажмите Enter

Теперь вы получите общий доступ к файлам в проводнике. Fx

image

Просто следуйте пути туда, откуда вы хотите начать, открывая новую вкладку в Терминале Windows. Помните:

  1. четыре обратных слеша в начале и
  2. две обратные косые черты между именами папок

Подобно:
image

при построении startingDirectory . Перезагрузите Терминал Windows, и все готово.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги