Open marcodiiga opened 2 years ago
What version are you on? Could you share your settings.json file?
I'm mildly worried that our ~
auto promotion may have accidentally interfered with the ability to use the explorer context menu entry with a WSL profile 😬
aside: Is there a reason you're not just using the explorer context menu entry that the Terminal creates itself when you install it/?
Sure, here's my settings.json:
{
"$help": "https://aka.ms/terminal-documentation",
"$schema": "https://aka.ms/terminal-profiles-schema",
"actions":
[
{
"command":
{
"action": "copy",
"singleLine": false
},
"keys": "ctrl+c"
},
{
"command": "paste",
"keys": "ctrl+v"
},
{
"command": "find",
"keys": "ctrl+shift+f"
},
{
"command":
{
"action": "splitPane",
"split": "auto",
"splitMode": "duplicate"
},
"keys": "alt+shift+d"
}
],
"copyFormatting": "none",
"copyOnSelect": false,
"defaultProfile": "{51855cb2-8cce-5362-8f54-464b92b32386}",
"language": "en-US",
"profiles":
{
"defaults": {},
"list":
[
{
"commandline": "%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"hidden": false,
"name": "Windows PowerShell"
},
{
"commandline": "%SystemRoot%\\System32\\cmd.exe",
"guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
"hidden": false,
"name": "Prompt dei comandi"
},
{
"guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
"hidden": true,
"name": "Ubuntu",
"source": "Windows.Terminal.Wsl",
"startingDirectory": "%USERPROFILE%"
},
{
"guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
"hidden": false,
"name": "Azure Cloud Shell",
"source": "Windows.Terminal.Azure"
},
{
"guid": "{5b849eef-e172-55b9-8019-ef031bec368c}",
"hidden": false,
"name": "Developer Command Prompt for VS 2022",
"source": "Windows.Terminal.VisualStudio"
},
{
"guid": "{8c6e956b-317a-5194-b80e-c5281032870f}",
"hidden": false,
"name": "Developer PowerShell for VS 2022",
"source": "Windows.Terminal.VisualStudio"
},
{
"guid": "{51855cb2-8cce-5362-8f54-464b92b32386}",
"hidden": false,
"name": "Ubuntu",
"source": "CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc",
"startingDirectory": "%USERPROFILE%"
}
]
},
"schemes":
[
... unimportant I guess...
]
}
For the second question: the context menu entry created at install time doesn't set the starting directory to the current one I was browsing while I clicked with Shift+RightClick either, seems to work with the WSL profile, not with the other Ubuntu profile.
{
"guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
"hidden": true,
"name": "Ubuntu",
"source": "Windows.Terminal.Wsl",
"startingDirectory": "%USERPROFILE%"
},
// ...
{
"guid": "{51855cb2-8cce-5362-8f54-464b92b32386}",
"hidden": false,
"name": "Ubuntu",
"source": "CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc",
"startingDirectory": "%USERPROFILE%"
}
Interesting - canonical is shipping their own profile, but not one layered with the existing profile. Curious....
Interesting. I really can't get this to repro... Is this always affecting a specific path? I know there have been troubles with doing this in the root of a drive before (e.g. c:\
, or D:\
), but child directories seem to work fine.
Which OS version and Terminal version are you on/? IIRC there were some os-side issues with Directory/Background entries in the past
Windows 10 (10.0.19044 Build 19044), wt 1.12.10982.0. It is affecting any path that I could try, not only root drives but also child dirs.
I found a workaround to make this work: this opens up the shit+right-click context menu directory in Windows Terminal in the default profile (which I have set to Canonical's own profile).
Oh heck that's probably it! I bet they've got the commandline
of their profile set up so that it doesn't actually obey the startingDirectory
!
Is your profile using wsl.exe -d Ubuntu
or Ubuntu.exe
?
The latter will not respect the starting directory, and always opens in $HOME
The latter will not respect the starting directory, and always opens in $HOME
That's exactly it. There's definitely and issue with the Ubuntu profiles that Canonical is shipping. Sorry about that! I'm reaching out to them to see what we can do here.
Same problem here after removing one of the distros I had installed; Windows Terminal settings also still recognizing two distros at the selection for the default one.
I had the same problem with Ubuntu-22.04 installed via Microsoft Store. The terminal always started in /home/"commandline": "wsl.exe -d Ubuntu-22.04 /bin/bash"
to terminal profile fixed the issue.
Is your profile using
wsl.exe -d Ubuntu
orUbuntu.exe
?The latter will not respect the starting directory, and always opens in $HOME
WORKS!!!!!
Thanks for this! Managed to get it working by adding the commandLine
to it. However, now when opening it normally, it will always open default to /mnt/c/WINDOWS/System32
. Is there a way to keep opening in current directory context menu, while also having it open in the default /home
directory when opening terminal on it's own?
Is your profile using
wsl.exe -d Ubuntu
orUbuntu.exe
? The latter will not respect the starting directory, and always opens in $HOMEWORKS!!!!!
sir can you help me out , what i need to change here , please sir thankyou
"list": [ { "commandline": "%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe", "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}", "hidden": false, "name": "Windows PowerShell" }, { "commandline": "%SystemRoot%\System32\cmd.exe", "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}", "hidden": false, "name": "Command Prompt" }, { "guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}", "hidden": false, "name": "PowerShell", "source": "Windows.Terminal.PowershellCore" }, { "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}", "hidden": false, "name": "Azure Cloud Shell", "source": "Windows.Terminal.Azure" }, { "commandline": "wsl.exe -d Ubuntu-22.04 /bin/bash", "guid": "{51855cb2-8cce-5362-8f54-464b92b32386}", "hidden": false, "name": "Ubuntu", "source": "CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc" }, { "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}", "hidden": false, "name": "Ubuntu", "source": "Windows.Terminal.Wsl", "startingDirectory": null } ]
Is your profile using
wsl.exe -d Ubuntu
orUbuntu.exe
? The latter will not respect the starting directory, and always opens in $HOMEWORKS!!!!!
sir can you help me out , what i need to change here , please sir thankyou
"list": [ { "commandline": "%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe", "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}", "hidden": false, "name": "Windows PowerShell" }, { "commandline": "%SystemRoot%\System32\cmd.exe", "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}", "hidden": false, "name": "Command Prompt" }, { "guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}", "hidden": false, "name": "PowerShell", "source": "Windows.Terminal.PowershellCore" }, { "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}", "hidden": false, "name": "Azure Cloud Shell", "source": "Windows.Terminal.Azure" }, { "commandline": "wsl.exe -d Ubuntu-22.04 /bin/bash", "guid": "{51855cb2-8cce-5362-8f54-464b92b32386}", "hidden": false, "name": "Ubuntu", "source": "CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc" }, { "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}", "hidden": false, "name": "Ubuntu", "source": "Windows.Terminal.Wsl", "startingDirectory": null } ]
Check if you really have sat up right distro name:
Try to run from CMD or PS:
wsl -l -v
Then open terminal settings (json file). Search for your profile and change "commandline" value to this:
"commandline": "C:\\windows\\System32\\wsl.exe -d Ubuntu-22.04",
or
"commandline": "wsl.exe -d Ubuntu-22.04",
Is your profile using
wsl.exe -d Ubuntu
orUbuntu.exe
? The latter will not respect the starting directory, and always opens in $HOMEWORKS!!!!!
sir can you help me out , what i need to change here , please sir thankyou "list": [ { "commandline": "%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe", "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}", "hidden": false, "name": "Windows PowerShell" }, { "commandline": "%SystemRoot%\System32\cmd.exe", "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}", "hidden": false, "name": "Command Prompt" }, { "guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}", "hidden": false, "name": "PowerShell", "source": "Windows.Terminal.PowershellCore" }, { "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}", "hidden": false, "name": "Azure Cloud Shell", "source": "Windows.Terminal.Azure" }, { "commandline": "wsl.exe -d Ubuntu-22.04 /bin/bash", "guid": "{51855cb2-8cce-5362-8f54-464b92b32386}", "hidden": false, "name": "Ubuntu", "source": "CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc" }, { "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}", "hidden": false, "name": "Ubuntu", "source": "Windows.Terminal.Wsl", "startingDirectory": null } ]
Check if you really have sat up right distro name:
Try to run from CMD or PS:
wsl -l -v
Then open terminal settings (json file). Search for your profile and change "commandline" value to this:
"commandline": "C:\\windows\\System32\\wsl.exe -d Ubuntu-22.04",
or
"commandline": "wsl.exe -d Ubuntu-22.04",
i just cant thankyou enough this worked like a charm...thankyou once again just one more thing if u can help sir ...some icon error
Is your profile using
wsl.exe -d Ubuntu
orUbuntu.exe
? The latter will not respect the starting directory, and always opens in $HOMEWORKS!!!!!
sir can you help me out , what i need to change here , please sir thankyou "list": [ { "commandline": "%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe", "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}", "hidden": false, "name": "Windows PowerShell" }, { "commandline": "%SystemRoot%\System32\cmd.exe", "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}", "hidden": false, "name": "Command Prompt" }, { "guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}", "hidden": false, "name": "PowerShell", "source": "Windows.Terminal.PowershellCore" }, { "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}", "hidden": false, "name": "Azure Cloud Shell", "source": "Windows.Terminal.Azure" }, { "commandline": "wsl.exe -d Ubuntu-22.04 /bin/bash", "guid": "{51855cb2-8cce-5362-8f54-464b92b32386}", "hidden": false, "name": "Ubuntu", "source": "CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc" }, { "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}", "hidden": false, "name": "Ubuntu", "source": "Windows.Terminal.Wsl", "startingDirectory": null } ]
Check if you really have sat up right distro name: Try to run from CMD or PS:
wsl -l -v
Then open terminal settings (json file). Search for your profile and change "commandline" value to this:
"commandline": "C:\\windows\\System32\\wsl.exe -d Ubuntu-22.04",
or
"commandline": "wsl.exe -d Ubuntu-22.04",
i just cant thankyou enough this worked like a charm...thankyou once again just one more thing if u can help sir ...some icon error
You can pick icon from the internet, by setting Icon value to:
https://assets.ubuntu.com/v1/49a1a858-favicon-32x32.png
Or download and save it on your computer, then just set correct path to the icon.
For example I use one of local app icons (Linux icon):
ms-appx:///ProfileIcons/{9acb9455-ca41-5af7-950f-6bca1bc9722f}.png
Is your profile using
wsl.exe -d Ubuntu
orUbuntu.exe
? The latter will not respect the starting directory, and always opens in $HOMEWORKS!!!!!
sir can you help me out , what i need to change here , please sir thankyou "list": [ { "commandline": "%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe", "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}", "hidden": false, "name": "Windows PowerShell" }, { "commandline": "%SystemRoot%\System32\cmd.exe", "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}", "hidden": false, "name": "Command Prompt" }, { "guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}", "hidden": false, "name": "PowerShell", "source": "Windows.Terminal.PowershellCore" }, { "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}", "hidden": false, "name": "Azure Cloud Shell", "source": "Windows.Terminal.Azure" }, { "commandline": "wsl.exe -d Ubuntu-22.04 /bin/bash", "guid": "{51855cb2-8cce-5362-8f54-464b92b32386}", "hidden": false, "name": "Ubuntu", "source": "CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc" }, { "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}", "hidden": false, "name": "Ubuntu", "source": "Windows.Terminal.Wsl", "startingDirectory": null } ]
Check if you really have sat up right distro name: Try to run from CMD or PS:
wsl -l -v
Then open terminal settings (json file). Search for your profile and change "commandline" value to this:
"commandline": "C:\\windows\\System32\\wsl.exe -d Ubuntu-22.04",
or
"commandline": "wsl.exe -d Ubuntu-22.04",
i just cant thankyou enough this worked like a charm...thankyou once again just one more thing if u can help sir ...some icon error
You can pick icon from the internet, by setting Icon value to:
https://assets.ubuntu.com/v1/49a1a858-favicon-32x32.png
Or download and save it on your computer, then just set correct path to the icon.
For example I use one of local app icons (Linux icon):
ms-appx:///ProfileIcons/{9acb9455-ca41-5af7-950f-6bca1bc9722f}.png
thankyou so much will try later in evening , thankyou again sir
Came here to report that using ubuntu.exe
DOES work with the run
command proceeding, which starts the default shell in the current directory (where invoked). So, for my Windows Terminal profile, I have the following in the Command Line setting:
ubuntu.exe run
I would like to see the default change to use this setting value.
Thanks for this! Managed to get it working by adding the
commandLine
to it. However, now when opening it normally, it will always open default to/mnt/c/WINDOWS/System32
. Is there a way to keep opening in current directory context menu, while also having it open in the default/home
directory when opening terminal on it's own?
The ubuntu.exe run
method also has this problem. Anyone have ideas? I assume this is because the starting directory for wt.exe by default is the system directory (C:\WINDOWS\system32).
EDIT: I can create a shortcut to the wt.exe executable and set the starting location to my WSL $HOME (\wsl.localhost\Ubuntu\home\
Workaround - add the following in .bashrc
inside WSL:
# Change starting directory for the default system directory
if [ "$PWD" = "/mnt/c/WINDOWS/system32" ]; then
cd ~
fi
Interesting - canonical is shipping their own profile, but not one layered with the existing profile. Curious....
Did you ever figure out why we have two? Which one should we use?
Workaround - add the following in
.bashrc
inside WSL:# Change starting directory for the default system directory if [ "$PWD" = "/mnt/c/WINDOWS/system32" ]; then cd ~ fi
Thank you! Why didn't I think of this?
Thank you! Why didn't I think of this?
Can't really think of a downside, unless you explicitly want to open terminal in the system directory.
The only thing that still doesn't work with this setup is opening terminal within a network share. It ends up landing in $HOME
in this case. Still have to look around issues here to see if it's reported already.
The only thing that still doesn't work with this setup is opening terminal within a network share. It ends up landing in
$HOME
in this case. Still have to look around issues here to see if it's reported already.
WSL does not automatically map network shares. It cannot be launched in any directory that is not represented or representable in the Linux filesystem. You would need to mount them explicitly in /etc/fstab
, and even then it may not be able to figure it out.
This would make an excellent feature request for the WSL repo :smile:
WSL does not automatically map network shares.
I could have sworn I had this working in WSL2. But I could be getting confused with my previous cygwin setup.
Ah, even WSL 1 doesn't automatically map network shares.
Interesting - canonical is shipping their own profile, but not one layered with the existing profile. Curious....
Did you ever figure out why we have two? Which one should we use?
Exactly my question. Why are 2 profiles generated and the bad one is enabled and not vice versa?
From all the related bugs, the profile generated by ? (with the Tux icon) is the correct one and the one generated by Canonical (with the Ubuntu icon, ubuntu.exe
) is wrong. So why is it so that both profiles are generated and moreover that the correct one is disabled by default? Basically, it comes to the question, why the WSL / Terminal team cannot do anything about this (yet)?
IMO, from user's perspective, this seems absurd, so it would deserve at least a short explanation. And also a dedicated issue like #15560 - @zadjii-msft, are you really sure you want to continue the discussion here, where logically stuff quite unrelated to this profiles bug (like "mapping network shares" just above) were and will be discussed?
Anyway, thank you guys for pushing this further, I believe this confuses tons of people and is a huge waste of time in the sum.
From all the related bugs, the profile generated by ? (with the Tux icon) is the correct one and the one generated by Canonical (with the Ubuntu icon,
ubuntu.exe
) is wrong. So why is it so that both profiles are generated and moreover that the correct one is disabled by default? Basically, it comes to the question, why the WSL / Terminal team cannot do anything about this (yet)?
This is a choice in the Canonical code snippet, it creates a new profile and (attempts to) disable the built-in generator's profile. Nothing we can do about it in the WT code except break that feature, which seems unlikely to be an acceptable choice.
Having just help a user hitting this issue starting from https://github.com/microsoft/terminal/issues/3158#issuecomment-2295720051, here's what appears to be the current state of making the Ubuntu-provided profile (or any other WSL distribution's custom profile) work, thanks to comments earlier in this ticket, and some testing by the user having the issue.
If you want to use the Ubuntu generated profile, you need to do one of two things:
"commandline": "wsl.exe -d Ubuntu-22.04",
"startingDirectory": "~",
Note that this approach loses anything the Ubuntu launcher does before it chains out into wsl.exe. I think that is only first-run stuff, but I expect it does make this approach a non-starter for the Ubuntu-provided snippet.
run
argument plus an explicit default startingDirectory
to not start in C:\Windows\System32
:
"commandline": "ubuntu2204.exe run",
"startingDirectory": "\\\\wsl$\\Ubuntu-2404\\home\\<yourWSLAccountName>",
You can get the startingDirectory
value for option 2 from inside Ubuntu by going to the desired directory and running wslpath -w "$PWD"
, or browsing from \\wsl$
or \\wsl.localhost
in Windows Explorer.
In both cases the commandline
value will depend on the existing command-line: If you do it in the GUI editor, you should see the existing command line.
Both approaches should make both "open-in-current-directory folder context menu" and "OSC9;9 duplicate current session" work, as AFAIK they rely on being able to override the profile's defined startingDirectory
, as does wt newtab -d
. However, neither approach will make drag-and-drop path mangling work.
Note that if you're adding cd
calls to your bash startup scripts, they should not be necessary with the above two approaches. You can still use https://github.com/microsoft/terminal/issues/12961#issuecomment-1584764956 to avoid setting the startingDirectory
with only the minor cost of not being able to start in C:\Windows\System32
... And it not working if you aren't actually running bash. So I personally disprefer this approach.
There's two current code-paths in WT that are issues for this ticket AFAIK:
"startingDirectory": "~",
depends on the commandline starting with wsl.exe
or C:\Windows\System32\wsl.exe
.. Without it, you have to provide the full path to your WSL user's home directory. (--cd
on the command-line when the startingDirectory
is ~
or starts with ~
, as those are the only times it actually matters.profileSource
being literally `Windows.Terminal.Wsl
.So there's probably some low-hanging fruit for someone to unify those two hacks to both work the same way. (Of the two hacks, I think matching wsl.exe is better than checking the profileSource
, since approach 1 above has fewer side-effects that changing the profileSource
value would have)
And some higher-branch fruit to then expose them as not-hacks by perhaps either detecting WSL or exposing an isWSL
flag in the profile that activates both hacks and probably also provides a default "startingDirectory": "~"
value.
Other solutions are possible, of course, and I make no suggestion on the acceptability of my suggestions to the WT maintainers.
This code could be improved to only pass --cd on the command-line when the startingDirectory is ~ or starts with ~, as those are the only times it actually matters.
Thanks for the investigation! One note about this: we use --cd
to support startingDirectory
set to things like /root
or perhaps more saliently /tank/projects/foo
. It does not only apply to homedir based paths.
Ah, yes. I misparsed the code: the ~
check I skimmed over is an exclusion check for the provided command-line.
So it does make sense to use --cd
in the case where we know it exists (I'm not sure if the template WSL Distribution Launcher handles it, on consideration, as I don't know if that's handled by wsl.exe directly, or by the underlying API shared by the template WSL Distribution Launcher), even though it's not needed for Windows-filesystem paths, rather than trying to distinguish them here.
Description of the new feature/enhancement
I couldn't find a way to open up
wt.exe
in a linux profile (e.g.Ubuntu
) via right-click in the context menu that pops up in explorer by setting the current working directory to whatever I was browsing before.To rephrase: I added some
HKCR\Directory\Background\shell\wt\command
key withwt.exe -d "%V"
so that I can Shift+RightClick in a folder in explorer.exe and have aOpen in Windows Terminal with Linux
item in the context menu. Windows Terminal opens but the starting directory, no matter what I set the profilestartingDirectory
field in the JSON to, is always set to my home directory. It would be nice ifwt.exe -d "C:\\"
or whatever actually opened, for the linux profile, in/mnt/c
as starting directory.