mirror of
https://github.com/mintty/wsltty.git
synced 2025-11-03 08:31:51 +00:00
Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7074ff02b9 | ||
|
|
4e0bbddcc0 | ||
|
|
68e11e5775 | ||
|
|
36c134820b | ||
|
|
ef2ab5f6e4 | ||
|
|
ee57a229b0 | ||
|
|
3c7d8f3a18 | ||
|
|
937058f703 | ||
|
|
52b6a57e09 | ||
|
|
d7b4840c92 | ||
|
|
05a439b5b0 | ||
|
|
a7b8792e76 | ||
|
|
440fbec6c7 | ||
|
|
49d7a79941 | ||
|
|
6261ec43ec | ||
|
|
033d9aceb2 | ||
|
|
be4e7fef44 | ||
|
|
a2df28017b | ||
|
|
09972471b9 | ||
|
|
c13340b328 | ||
|
|
8d7ffa75bb | ||
|
|
305fd0f273 | ||
|
|
fb1bf601e9 | ||
|
|
adc7036609 | ||
|
|
fef944e1bb |
40
0012-get-vmid-from-registry.patch
Normal file
40
0012-get-vmid-from-registry.patch
Normal file
@@ -0,0 +1,40 @@
|
||||
--- wslbridge2/src/wslbridge2.cpp 2024-10-10 20:20:21.931891800 +0000
|
||||
+++ wslbridge2-0.12/src/wslbridge2.cpp 2024-10-08 09:31:35.954145800 +0000
|
||||
@@ -228,6 +228,26 @@ static void start_dummy(std::wstring wsl
|
||||
CloseHandle(pi.hThread);
|
||||
}
|
||||
|
||||
+bool GetIdFromRegistry(GUID *guid) {
|
||||
+ HKEY hKeyRoot = HKEY_LOCAL_MACHINE;
|
||||
+ std::wstring subKey = L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\HostComputeService\\VolatileStore\\ComputeSystem";
|
||||
+ HKEY hKey;
|
||||
+ if (RegOpenKeyEx(hKeyRoot, subKey.c_str(), 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
|
||||
+ DWORD index = 0;
|
||||
+ WCHAR keyName[256];
|
||||
+ DWORD keyNameSize = sizeof(keyName) / sizeof(keyName[0]);
|
||||
+
|
||||
+ while (RegEnumKeyEx(hKey, index, keyName, &keyNameSize, nullptr, nullptr, nullptr, nullptr) == ERROR_SUCCESS) {
|
||||
+ RegCloseKey(hKey);
|
||||
+ std::wstring id = L"{" + std::wstring(keyName) + L"}";
|
||||
+ return IIDFromString(id.c_str(), guid) == S_OK;
|
||||
+ }
|
||||
+ RegCloseKey(hKey);
|
||||
+ }
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
/* Minimum requirement Windows 10 build 17763 aka. version 1809 */
|
||||
@@ -387,8 +407,8 @@ int main(int argc, char *argv[])
|
||||
if (LiftedWSLVersion)
|
||||
start_dummy(wslPath, wslCmdLine, distroName, debugMode);
|
||||
|
||||
- const HRESULT hRes = GetVmId(&DistroId, &VmId, LiftedWSLVersion);
|
||||
- if (hRes != 0)
|
||||
+ const bool hRes = GetIdFromRegistry(&VmId);
|
||||
+ if (!hRes)
|
||||
fatal("GetVmId: %s\n", GetErrorMessage(hRes).c_str());
|
||||
|
||||
inputSock = win_vsock_create();
|
||||
22
README.md
22
README.md
@@ -20,15 +20,16 @@ WSLtty components
|
||||
|
||||
### Requirements ###
|
||||
|
||||
Wsltty does not seem to work with WSL V2 mode since release 2.0.0 (#343).
|
||||
As a workaround until a solution in the wslbridge gateway, it is suggested
|
||||
to install [release 1.3.17](https://github.com/microsoft/WSL/releases/tag/1.3.17);
|
||||
maybe uninstall WSL first, see [issue 343 comment](https://github.com/mintty/wsltty/issues/343#issuecomment-1818367512).
|
||||
Another remedy could be to configure your WSL distributions to run in WSL V1 mode, for example:
|
||||
`wsl --set-version Ubuntu 1`.
|
||||
To connect to WSL, wsltty uses wslbridge2, which uses undocumented
|
||||
Windows APIs that have been changed various times, so wslbridge2 needed
|
||||
to catch up with incompatible changes, particularly to support WSL V2.
|
||||
(See e.g. issue #343; to work with WSL V2, wsltty 2.0.0 needed a WSL update
|
||||
to [release 1.3.17](https://github.com/microsoft/WSL/releases/tag/1.3.17).)
|
||||
|
||||
Since release 3.0.5, WSLtty requires Windows version 1809 (the November 2018 release).
|
||||
|
||||
By end of 2024, wsltty works again with recent updates of the WSL subsystem.
|
||||
|
||||
---
|
||||
|
||||
### Installation from this repository ###
|
||||
@@ -56,6 +57,13 @@ Portable installation does not install any start menu or desktop shortcuts
|
||||
and no context menu entries. It creates a shortcut in the selected
|
||||
portable installation folder to start the default WSL distribution.
|
||||
|
||||
Note: For an update installation, either the parent directory or the target
|
||||
directory itself can be selected.
|
||||
|
||||
Note: If you rename or move the installation directory, the icon of the
|
||||
“WSL Terminal Portable” shortcut will not work anymore; re-run the
|
||||
install-portable.bat script in the installation folder to refresh it.
|
||||
|
||||
#### Installation from archive ####
|
||||
|
||||
In case a local anti-virus guard barfs about the wsltty installer, the
|
||||
@@ -210,6 +218,8 @@ WSLtty installs the following scripts into `%LOCALAPPDATA%\Microsoft\WindowsApps
|
||||
* For each installed WSL distribution, e.g. Ubuntu, a command script like `Ubuntu~.bat` to start in the WSL user home
|
||||
* `WSL.bat` and `WSL~.bat` to start the default WSL distribution
|
||||
|
||||
The scripts accept an optional invocation command (since 3.7.8).
|
||||
|
||||
Given that `%LOCALAPPDATA%\Microsoft\WindowsApps` is in your PATH,
|
||||
the scripts can be invoked from cmd.exe, PowerShell, or via WIN+R.
|
||||
|
||||
|
||||
@@ -155,17 +155,40 @@ regtool () {
|
||||
}
|
||||
fi
|
||||
|
||||
|
||||
if $config
|
||||
then while read line; do echo "$line"; done <</EOB > mkbat.bat
|
||||
@echo off
|
||||
echo Creating %1.bat
|
||||
|
||||
echo @echo off> %1.bat
|
||||
echo rem Start mintty terminal for WSL package %name% in current directory>> %1.bat
|
||||
echo %target% -i "%icon%" %minttyargs% %bridgeargs% %%*>> %1.bat
|
||||
/EOB
|
||||
fi
|
||||
mkbat () {
|
||||
echo Creating "$1.bat"
|
||||
while read line; do echo "$line"; done <<-\/EOB > "$1".bat
|
||||
@echo off
|
||||
rem Start mintty terminal for WSL
|
||||
|
||||
rem get basename of this script file,
|
||||
rem use it to select WSL distribution and homedir flag
|
||||
set dist=%~n0
|
||||
|
||||
rem start in current directory
|
||||
set cdir=
|
||||
rem if script name ends with ~, extract WSL distribution and param -~
|
||||
if "%dist:~-1%" == "~" set cdir=-~ && set dist=%dist:~0,-1%
|
||||
rem map WSL default distribution
|
||||
if "%dist%" == "WSL" set dist=
|
||||
|
||||
rem check if we have an explicit -d DIST parameter
|
||||
if "%1" == "-d" set dist=%2 && shift && shift
|
||||
|
||||
chcp 65001 > nul:
|
||||
|
||||
if "%1" == "" goto login
|
||||
|
||||
:cmd
|
||||
"%LOCALAPPDATA%/wsltty/bin/mintty.exe" -i "%LOCALAPPDATA%/wsltty/wsl.ico" --WSL="%dist%" --configdir="%APPDATA%/wsltty" %cdir% %*
|
||||
goto end
|
||||
|
||||
:login
|
||||
"%LOCALAPPDATA%/wsltty/bin/mintty.exe" -i "%LOCALAPPDATA%/wsltty/wsl.ico" --WSL="%dist%" --configdir="%APPDATA%/wsltty" %cdir% -
|
||||
|
||||
:end
|
||||
/EOB
|
||||
}
|
||||
|
||||
if $custominst && $config && ! $remove
|
||||
then
|
||||
@@ -366,7 +389,8 @@ config () {
|
||||
copy "$name Terminal %.lnk" "$APPDATA\\Microsoft\\Windows\\Start Menu\\Programs\\WSLtty"
|
||||
|
||||
# launch script in . -> WSLtty home, WindowsApps launch folder
|
||||
cmd /C mkbat.bat "$name"
|
||||
#cmd /C mkbat.bat "$name"
|
||||
mkbat "$name"
|
||||
copy "$name.bat" "$LOCALAPPDATA\\Microsoft\\WindowsApps"
|
||||
|
||||
# store backup copies in installation dir
|
||||
@@ -402,7 +426,8 @@ config () {
|
||||
fi
|
||||
|
||||
# launch script in ~ -> WSLtty home, WindowsApps launch folder
|
||||
cmd /C mkbat.bat "$name~"
|
||||
#cmd /C mkbat.bat "$name~"
|
||||
mkbat "$name~"
|
||||
copy "$name~.bat" "$LOCALAPPDATA\\Microsoft\\WindowsApps"
|
||||
|
||||
# store backup copies in installation dir
|
||||
|
||||
@@ -1,27 +1,54 @@
|
||||
@echo off
|
||||
|
||||
chcp 65001 > nul
|
||||
|
||||
if not exist "WSL Terminal Portable.lnk" goto install
|
||||
echo Rebuilding WSL Terminal Portable shortcut
|
||||
set instdir=%~dp0
|
||||
goto shortcut
|
||||
|
||||
:install
|
||||
|
||||
echo Installing WSL Terminal Portable
|
||||
echo Select target folder in popup dialog ...
|
||||
|
||||
set sel="Select folder to place installation of portable wsltty"
|
||||
|
||||
for /f "usebackq delims=" %%f in (`powershell "(new-object -COM Shell.Application).BrowseForFolder(0, '%sel%', 0, 0).self.path"`) do set f=%%f
|
||||
set instdir=%f%\wsltty
|
||||
if exist %f%\LICENSE.mintty set instdir=%f%
|
||||
|
||||
if "%f%"=="" (
|
||||
echo no installation
|
||||
echo No installation selected
|
||||
pause
|
||||
exit
|
||||
) else if not exist "%f%" (
|
||||
echo invalid installation folder %instdir%
|
||||
echo Invalid installation folder %instdir%
|
||||
pause
|
||||
exit
|
||||
)
|
||||
|
||||
rem call main installation
|
||||
call install "%instdir%" "%instdir%" /P
|
||||
rem this already changes into "%instdir%"
|
||||
|
||||
rem copy additional portable installation files
|
||||
rem do this after call install as that deletes previous .bat files
|
||||
copy "%~dp0\install-portable.bat" .
|
||||
dir "%instdir%"\install-portable.bat
|
||||
|
||||
:shortcut
|
||||
|
||||
rem create shortcut
|
||||
cd /D "%instdir%"
|
||||
rem set drive-relative path for shortcut working directory and icon
|
||||
set instpath=%instdir:~2%
|
||||
set target=%%COMSPEC%%
|
||||
set minttyargs=/C bin\mintty.exe --WSL= --icon=/wsl.ico --configdir=. -~
|
||||
set bridgeargs= -
|
||||
set wdir=%instpath%
|
||||
rem set wdir=%instpath%
|
||||
rem let mkshortcut set working directory to empty:
|
||||
set wdir=.
|
||||
set icon=%instpath%\wsl.ico
|
||||
cscript /nologo mkshortcut.vbs "/name:WSL Terminal Portable"
|
||||
|
||||
|
||||
13
install.bat
13
install.bat
@@ -12,9 +12,18 @@ call dequote oldroot
|
||||
call dequote oldhomedir
|
||||
set oldconfigdir="%oldhomedir%\.config\mintty"
|
||||
call dequote oldconfigdir
|
||||
if not "%1" == "" set refinstalldir=%1 && set installdir=%1
|
||||
if not "%2" == "" set refconfigdir=%2 && set configdir=%2
|
||||
|
||||
rem override installdir, configdir if parameters given
|
||||
set arg1=%1
|
||||
call dequote arg1
|
||||
if "%arg1%" == "%%arg1%%" goto deploy
|
||||
set refinstalldir=%arg1%
|
||||
set installdir=%arg1%
|
||||
set arg2=%2
|
||||
call dequote arg2
|
||||
if "%arg2%" == "%%arg2%%" goto deploy
|
||||
set refconfigdir=%arg2%
|
||||
set configdir=%arg2%
|
||||
|
||||
:deploy
|
||||
|
||||
|
||||
72
makefile
72
makefile
@@ -10,35 +10,24 @@
|
||||
|
||||
|
||||
# wsltty release
|
||||
ver=3.7.1
|
||||
ver=3.7.8
|
||||
|
||||
# wsltty appx release - must have 4 parts!
|
||||
verx=3.7.1.1
|
||||
verx=3.7.8.1
|
||||
|
||||
|
||||
##############################
|
||||
# mintty release version
|
||||
|
||||
minttyver=3.7.1
|
||||
minttyver=3.7.8
|
||||
|
||||
minrepo=git@github.com:mintty/mintty.git
|
||||
|
||||
##############################
|
||||
|
||||
# wslbridge2 repository
|
||||
# wslbridge2 repository and release version
|
||||
repo=Biswa96/wslbridge2
|
||||
|
||||
# wslbridge2 master release version
|
||||
wslbridgever=0.12
|
||||
|
||||
# wslbridge2 latest version
|
||||
#archive=master
|
||||
#wslbridgedir=wslbridge2-$(archive)
|
||||
|
||||
# wslbridge2 branch or commit version (from fix-window-resize branch) and dir
|
||||
#commit=70e0dcea1db122d076ce1578f2a45280cc92d09f
|
||||
#commit=8b6dd7ee2b3102d72248990c21764c5cf86c6612
|
||||
#archive=$(commit)
|
||||
#wslbridgedir=wslbridge2-$(archive)
|
||||
|
||||
wslbridgever=0.13
|
||||
|
||||
# wslbridge2 fork repository and version
|
||||
#repo=mintty/wslbridge2
|
||||
@@ -50,13 +39,30 @@ archive=v$(wslbridgever)
|
||||
wslbridgedir=wslbridge2-$(wslbridgever)
|
||||
|
||||
|
||||
# wslbridge2 latest version
|
||||
#archive=master
|
||||
#wslbridgedir=wslbridge2-$(archive)
|
||||
|
||||
|
||||
# wslbridge2 branch or commit version (from fix-window-resize branch) and dir
|
||||
#commit=70e0dcea1db122d076ce1578f2a45280cc92d09f
|
||||
#commit=8b6dd7ee2b3102d72248990c21764c5cf86c6612
|
||||
# trying post-0.12 WSL V2 patches:
|
||||
#commit=5b2b652d1a7355b004e7860b4370a585737e5ac9
|
||||
#commit=274530b35a05df203d3a69f0e28d5015844f39bd
|
||||
# pixel size patch + fix (retagged as 0.13):
|
||||
#commit=a7162d852ff438d2d5a8dd8dae61795addb3d980
|
||||
#archive=$(commit)
|
||||
#wslbridgedir=wslbridge2-$(archive)
|
||||
|
||||
|
||||
##############################
|
||||
|
||||
# mintty branch or commit version
|
||||
#minttyver=master
|
||||
|
||||
# wslbridge branch or commit to build from source;
|
||||
wslbridge=wslbridge-frontend wslbridge-backend
|
||||
wslbridge=wslbridge-source wslbridge-frontend wslbridge-backend
|
||||
|
||||
##############################
|
||||
# build backend on a musl-libc-based distribution
|
||||
@@ -73,10 +79,15 @@ WINSDKVER=`regtool list '$(WINSDKKEY)' | sed -e '$$ q' -e d`
|
||||
|
||||
all: all-$(notdir $(CURDIR))
|
||||
|
||||
all-wsltty: check pkg
|
||||
# targets and version checking
|
||||
|
||||
all-wsltty: check committed pkg
|
||||
|
||||
all-wsltty.appx: appx
|
||||
|
||||
committed:
|
||||
if git status -suno | sed -e "s,^..,," | grep .; then false; fi
|
||||
|
||||
#############################################################################
|
||||
# target checking and some defs
|
||||
|
||||
@@ -154,8 +165,15 @@ wslbridge-source: $(wslbridgedir).zip
|
||||
#cd $(wslbridgedir); patch -p1 < ../0001-notify-size-change-inband.patch
|
||||
# patch to https://github.com/Biswa96/wslbridge2/commit/41575379b416703c49e2687e957440239a4cdfb7
|
||||
#cd $(wslbridgedir); patch -p0 < ../0002-add-com-for-lifted-wsl.patch
|
||||
# patch to fix WSL 2 launching, again
|
||||
# this was replaced with another patch upstream
|
||||
#cd $(wslbridgedir); patch -p1 < ../0012-get-vmid-from-registry.patch
|
||||
# patch to add WINCH/pty pixel size support (Biswa96/wslbridge2#44)
|
||||
#cd $(wslbridgedir); patch -p1 < ../0013-pty-pixel-size.patch
|
||||
# patch to fix the pixel patch of 0.13
|
||||
#cd $(wslbridgedir); patch -p1 < ../0013-pty-pixel-size-fix.patch
|
||||
|
||||
wslbridge-frontend: wslbridge-source
|
||||
wslbridge-frontend:
|
||||
echo ------------- Compiling wslbridge2 frontend
|
||||
mkdir -p bin
|
||||
# frontend build
|
||||
@@ -165,7 +183,7 @@ wslbridge-frontend: wslbridge-source
|
||||
|
||||
windir=$(shell cd "${WINDIR}"; pwd)
|
||||
|
||||
wslbridge-backend: wslbridge-source
|
||||
wslbridge-backend:
|
||||
echo ------------- Compiling wslbridge2 backend
|
||||
#uname -m | grep x86_64
|
||||
mkdir -p bin
|
||||
@@ -176,10 +194,16 @@ wslbridge-backend: wslbridge-source
|
||||
# extract binaries
|
||||
cp $(wslbridgedir)/bin/wslbridge2-backend bin/
|
||||
|
||||
mintty-get:
|
||||
mintty-get: mintty-git # mintty-download or mintty-git
|
||||
cp mintty-$(minttyver)/icon/terminal.ico mintty.ico
|
||||
|
||||
mintty-download:
|
||||
$(wgeto) https://github.com/mintty/mintty/archive/$(minttyver).zip -o mintty-$(minttyver).zip
|
||||
unzip -o mintty-$(minttyver).zip
|
||||
cp mintty-$(minttyver)/icon/terminal.ico mintty.ico
|
||||
|
||||
mintty-git:
|
||||
test -d mintty-$(minttyver) || git clone --branch $(minttyver) --depth 1 $(minrepo) mintty-$(minttyver)
|
||||
cd mintty-$(minttyver); git checkout $(minttyver)
|
||||
|
||||
wslbuild=LDFLAGS="-static -static-libgcc -s"
|
||||
appxbuild=$(wslbuild) CCOPT=-DWSLTTY_APPX
|
||||
|
||||
@@ -23,7 +23,7 @@ UserQuietInstCmd=%UserQuietInstCmd%
|
||||
SourceFiles=SourceFiles
|
||||
|
||||
[Strings]
|
||||
InstallPrompt=Install Mintty terminal for WSL (Windows Subsystem for Linux)?
|
||||
InstallPrompt=Install Mintty terminal for WSL?
|
||||
DisplayLicense=
|
||||
FinishMessage=Mintty for WSL installed - for documentation and configuration see https://github.com/mintty/wsltty
|
||||
TargetName=wsltty-%version%-%arch%-install.exe
|
||||
|
||||
@@ -29,10 +29,14 @@ rem wscript.echo "minttyargs: " & minttyargs
|
||||
rem wscript.echo lnk.Arguments
|
||||
|
||||
rem Start in:
|
||||
rem Working directory; Arguments.Named would take "/wdir:C:\..." parameters
|
||||
rem wdir = Wscript.Arguments.Named("wdir")
|
||||
rem Working directory; function ExpandEnvironmentStrings cannot pass empty
|
||||
wdir = wshell.ExpandEnvironmentStrings("%wdir%")
|
||||
if IsEmpty(wdir) then
|
||||
lnk.WorkingDirectory = "%USERPROFILE%"
|
||||
elseif wdir = "." then
|
||||
lnk.WorkingDirectory = ""
|
||||
else
|
||||
lnk.WorkingDirectory = wdir
|
||||
end if
|
||||
|
||||
Reference in New Issue
Block a user