1
0
mirror of https://github.com/mintty/wsltty.git synced 2025-11-04 09:01:52 +00:00

Compare commits

...

27 Commits
3.0.6 ... 3.2.0

Author SHA1 Message Date
mintty
cadefd0ec0 3.2.0 2020-06-20 19:51:21 +02:00
mintty
0b4418399b 3.1.8 2020-06-11 16:39:39 +02:00
mintty
1f4de96e01 notes on curing various WSL startup issues (#246, #248) 2020-06-02 22:45:05 +02:00
mintty
1d8c80a6d4 disclaimer for choco and scoop installation instructions (~240) 2020-04-29 17:49:49 +02:00
mintty
e85b7fbb6a add note about Windows Defender settings (#239) 2020-04-17 13:05:55 +02:00
mintty
ae9dff3427 3.1.4.2 2020-04-02 15:00:32 +02:00
mintty
b8ad6553c4 fix installer: invoke configuration (#232), shortcuts generation (#237, #162),
usernames with spaces (#230) and other chars (#213), #162 generate shortcuts
2020-04-02 14:44:32 +02:00
mintty
8964534a5c 2020-04-02 14:44:21 +02:00
mintty
70b6f4cc45 fix imported distros fix (#226) 2020-04-01 20:27:19 +02:00
mintty
223671ce0d Merge pull request #236 from Conduitry/fix-fallback-icon
fix fallback icon in generated shortcuts
2020-04-01 20:25:09 +02:00
Conduitry
37032d79fa fix fallback icon in generated shortcuts 2020-03-30 01:13:25 -04:00
mintty
bbee0d6339 3.1.4 2020-03-07 19:05:28 +01:00
Thomas Wolff
00c4c2f20b tweak removal of ALL previous shortcuts, also on reconfigure (#218) 2020-03-05 14:15:57 +01:00
Thomas Wolff
9ae697ac20 fix cd /D "%installdir%" for drive changing (#223) 2020-03-05 11:07:31 +01:00
mintty
6397307878 3.1.0.3; fix wsl invocation from cygwin32 2020-02-15 13:44:53 +01:00
Thomas Wolff
67b1596fd2 Merge branch 'master' of https://github.com/mintty/wsltty 2020-01-20 15:49:58 +01:00
Thomas Wolff
433b11c47b remove ALL shortcut lnk and bat files (#218) 2020-01-20 15:49:04 +01:00
Thomas Wolff
2aace74c9d additional quoting for CMD variables (#213) 2020-01-20 15:47:56 +01:00
mintty
afa230733a ConPTY support via bundling with cygwin 3.1.0 2019-12-17 01:04:08 +01:00
mintty
40fe1db02c 2019-12-02 22:10:53 +01:00
Thomas Wolff
b6800f7762 2019-12-02 16:39:56 +01:00
Thomas Wolff
8a3f7d19df adapt removal ref to previous installer (now arch-specific) 2019-12-02 15:48:08 +01:00
Thomas Wolff
4f6e12741a fix icon access 2019-12-02 15:18:13 +01:00
Thomas Wolff
bc7e612b0c login mode (#196, #191, #70, #56, #37) 2019-11-29 17:29:20 +01:00
Thomas Wolff
2aefc8ae13 3.1.0; support 32-bit build; propagate proxy to backend for package download 2019-11-25 16:35:07 +01:00
Thomas Wolff
83a9c12fc6 update to wslbridge2 release v0.5 2019-10-30 14:48:44 +01:00
Thomas Wolff
79d9ab6f70 ensure backend build dependencies 2019-10-14 17:42:13 +02:00
10 changed files with 265 additions and 204 deletions

View File

@@ -50,6 +50,9 @@ the optional second parameter designates the configuration directory.
### Installation with other package management environments ###
Note that these are 3rd-party contributions and do not necessarily
provide the latest version.
#### Chocolatey ####
If you use the [Chocolatey package manager](https://chocolatey.org/),
@@ -85,10 +88,22 @@ WSLtty can be invoked with
Starting the mintty terminal directly from the WSLtty installation location
is discouraged because that would bypass essential options.
#### WSL 2 ####
#### WSL V2 ####
The new wslbridge2 gateway provides two versions, for WSL V1 and V2 mode, respectively.
Mintty automatically detects the WSL version and invokes the proper gateway.
Terminal communication with WSL via its modes V1 or V2 is handled
automatically by wsltty (mintty and the wslbridge2 gateway).
#### Starting issues ####
If wsltty fails with an
`Error: Could not fork child process: Resource temporarily unavailable`...,
its runtime may be affected by some over-ambitious virus defense strategy.
For example, with Windows Defender, option “Force randomization for images”
should be disabled.
If wsltty fails with an error message that mentions a disk mount path (e.g. `/mnt/c`),
workarounds may be the shutdown of the WSL V2 virtual machine (`wsl --shutdown` on the distro)
or turning off “fast startup” in the Windows power settings (#246, #248).
---
@@ -158,10 +173,11 @@ Mintty can maintain its configuration file in various locations,
with the following precedence:
* file given with mintty option `-c` (not used by wsltty default installation)
* file `config` in directory given with mintty option `--configdir`
* This is `%APPDATA%\wsltty\config` in the default wsltty installation.
* **`%APPDATA%\wsltty\config`** in the default wsltty installation
* `%HOME%\.minttyrc` (usage deprecated with wsltty)
* `%HOME%\.config\mintty\config` (usage deprecated with wsltty)
* `%APPDATA%\mintty\config`
* common config file for all mintty installation instances
* **`%APPDATA%\mintty\config`**
* `%LOCALAPPDATA%\wsltty\etc\minttyrc` (usage deprecated with wsltty)
Note:
@@ -181,16 +197,18 @@ Note:
#### Shell selection and Login shell ####
The WSLtty deployment does not impose a shell preference.
To invoke your favourite shell or launch the shell in login mode,
you may append a shell pathname and an optional `-l` parameter
to the mintty invocation (in shortcuts, scripts, or context menu entries):
* `%LOCALAPPDATA%\wsltty\bin\mintty.exe --WSL= --configdir="%APPDATA%\wsltty" /bin/bash -l`
To just request login mode, a single `-` parameter also works:
The WSLtty deployment does not impose a shell preference;
it invokes the users default shell in login mode by the final `-` parameter:
* `%LOCALAPPDATA%\wsltty\bin\mintty.exe --WSL= --configdir="%APPDATA%\wsltty" -`
You may tweak shortcuts, scripts, or context menu entries as follows:
To launch a default shell in non-login mode, remove the final dash.
To invoke your preferred shell, replace the final dash with
a shell pathname and an optional `-l` parameter
* `%LOCALAPPDATA%\wsltty\bin\mintty.exe --WSL= --configdir="%APPDATA%\wsltty" /bin/bash -l`
---
### Components and Credits ###

View File

@@ -1 +1 @@
3.0.6
3.2.0

1
cmd2.bat Executable file
View File

@@ -0,0 +1 @@
%1 "%from%" "%to%"

View File

@@ -1,15 +1,42 @@
#! /bin/sh
# set some paths; capital variables are for the mkshortcut.exe case,
# not for the mkshortcut.vbs case
# dash built-in echo enforces interpretation of \t etc
echoc () {
#cmd /c echo $*
printf '%s\n' "$*"
}
copy () {
from="$1"
to="$2"
export from to
cmd /c cmd2.bat copy
}
delete () {
from=/F
to="$1"
export from to
cmd /c cmd2.bat del
}
compare () {
from="$1"
to="$2"
export from to
cmd /c cmd2.bat comp/M
}
case "$installdir" in
?*) custominst=true;;
"") custominst=false;;
esac
INSTDIR=${installdir:-$LOCALAPPDATA/wsltty}
INSTDIR="${installdir:-$LOCALAPPDATA/wsltty}"
echoc "Installing wsltty into $INSTDIR"
INSTDIR=`cd "$INSTDIR"; pwd`
installcop=${installdir:-"$LOCALAPPDATA\\wsltty"}
installdir=${installdir:-'%LOCALAPPDATA%\wsltty'}
target="$installdir"'\bin\mintty.exe'
@@ -18,7 +45,7 @@ case "$INSTDIR" in
*) TARGETPATH="$INSTDIR"/bin/mintty.exe;;
esac
CONFDIR=${configdir:-$APPDATA/wsltty}
CONFDIR="${configdir:-$APPDATA/wsltty}"
configdir=${configdir:-'%APPDATA%\wsltty'}
PATH=/bin:"$PATH":$SYSTEMROOT/System32
@@ -37,9 +64,14 @@ case "$1" in
-info)
config=false
shift;;
-shortcuts)
shift;;
-shortcuts-remove)
remove=true
shift;;
-default)
alldistros=false
shift;;
-contextmenu)
contextmenu=true
shift;;
@@ -77,6 +109,26 @@ case "$1" in
shift;;
esac
if $config && ! $contextmenu
then
# remove shortcut entries in Start menu and cmd-line bat shortcuts
(cd "$INSTDIR"
for lnk in *.lnk
do
if compare "$lnk" "$APPDATA\\Microsoft\\Windows\\Start Menu\\Programs\\$lnk"
then delete "$APPDATA\\Microsoft\\Windows\\Start Menu\\Programs\\$lnk"
fi
done
for bat in *.bat
do
if compare "$bat" "$LOCALAPPDATA\\Microsoft\\WindowsApps\\$bat"
then delete "$LOCALAPPDATA\\Microsoft\\WindowsApps\\$bat"
fi
done
)
fi
# test w/o WSL: call this script with REGTOOLFAKE=true dash config-distros.sh
if ${REGTOOLFAKE:-false}
then
@@ -103,10 +155,6 @@ regtool () {
}
fi
# dash built-in echo enforces interpretation of \t etc
echoc () {
cmd /c echo $*
}
if $config
then while read line; do echo "$line"; done <</EOB > mkbat.bat
@@ -140,10 +188,10 @@ then
bridgeargs=-contextmenu-remove
cscript /nologo mkshortcut.vbs "/name:remove from context menu" "/min:true"
cmd /C copy "add to context menu.lnk" "%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\WSLtty"
cmd /C copy "add default to context menu.lnk" "%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\WSLtty"
cmd /C copy "remove from context menu.lnk" "%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\WSLtty"
cmd /C copy "configure WSL shortcuts.lnk" "%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\WSLtty"
copy "add to context menu.lnk" "$APPDATA\\Microsoft\\Windows\\Start Menu\\Programs\\WSLtty"
copy "add default to context menu.lnk" "$APPDATA\\Microsoft\\Windows\\Start Menu\\Programs\\WSLtty"
copy "remove from context menu.lnk" "$APPDATA\\Microsoft\\Windows\\Start Menu\\Programs\\WSLtty"
copy "configure WSL shortcuts.lnk" "$APPDATA\\Microsoft\\Windows\\Start Menu\\Programs\\WSLtty"
# restore target
target="$installdir"'\bin\mintty.exe'
@@ -179,74 +227,76 @@ config () {
case "$distro" in
Legacy)
name="Bash on Windows"
launch=
launcher="$SYSTEMROOT/System32/bash.exe"
;;
*) name="$distro"
launch="$distro"
launcher="$LOCALAPPDATA/Microsoft/WindowsApps/$distro.exe"
;;
esac
basepath=`regtool get "$lxss/$guid/BasePath"`
if package=`regtool -q get "$lxss/$guid/PackageFamilyName"`
then
instdir=`regtool get "$schema/$package/Schemas/PackageFullName"`
distrinst=`regtool get "$schema/$package/Schemas/PackageFullName"`
# get actual executable path (may not match $distro) from app manifest
manifest="$ProgramW6432/WindowsApps/$instdir/AppxManifest.xml"
manifest="$ProgramW6432/WindowsApps/$distrinst/AppxManifest.xml"
psh_cmd='([xml]$(Get-Content '"\"$manifest\""')).Package.Applications.Application.Executable'
executable=`appex "$manifest"`
if [ -r "$ProgramW6432/WindowsApps/$instdir/$executable" ]
then icon="%PROGRAMFILES%/WindowsApps/$instdir/$executable"
elif [ -r "$ProgramW6432/WindowsApps/$instdir/images/icon.ico" ]
then icon="%PROGRAMFILES%/WindowsApps/$instdir/images/icon.ico"
else icon="$installdir"'\wsl.ico'
if [ -r "$ProgramW6432/WindowsApps/$distrinst/$executable" ]
then icon="$ProgramW6432/WindowsApps/$distrinst/$executable"
elif [ -r "$ProgramW6432/WindowsApps/$distrinst/images/icon.ico" ]
then icon="$ProgramW6432/WindowsApps/$distrinst/images/icon.ico"
else icon="$installcop"'\wsl.ico'
fi
root="$basepath/rootfs"
elif [ -f "$basepath/$distro.exe" ]
then
icon="$basepath/$distro.exe"
root="$basepath/rootfs"
else
icon="%LOCALAPPDATA%/lxss/bash.ico"
elif [ -d "$LOCALAPPDATA/lxss" ]
then
# legacy "Bash on Windows"
icon="$LOCALAPPDATA/lxss/bash.ico"
root="$basepath"
else
# imported distro? (#226, #236)
icon="$installcop"'\wsl.ico'
root="$basepath/rootfs"
fi
#minttyargs='--wsl --rootfs="'"$root"'" --configdir="'"$configdir"'" -o Locale=C -o Charset=UTF-8 /bin/wslbridge '
# invocation parameters for mintty
minttyargs='--WSL="'"$distro"'" --configdir="'"$configdir"'"'
# MINTARGS deprecated; used for mkshortcut.exe rather than mkshortcut.vbs
MINTARGS='--WSL="'"$distro"'" --configdir="'"$CONFDIR"'"'
#if [ -z "$launch" ]
#then bridgeargs='-t /bin/bash'
#else bridgeargs='-l "'"$launch"'" -t /bin/bash'
#fi
bridgeargs='--distro-guid "'"$guid"'" -t /bin/bash'
bridgeargs='--distro-guid "'"$guid"'" -t'
# invocation commands (deprecated for mintty, used for start menu scripts)
#bridgeargs='--distro-guid "'"$guid"'" -t'
ok=true;;
DefaultDistribution|"") # WSL default installation
distro=
name=WSL
icon="$installdir"'\wsl.ico'
icon="$installcop"'\wsl.ico'
minttyargs='--WSL= --configdir="'"$configdir"'"'
MINTARGS='--WSL= --configdir="'"$CONFDIR"'"'
bridgeargs='-t'
#bridgeargs='-t'
ok=true;;
esac
bridgeargs=" -" # now used to request login mode
echoc "distro '$distro'"
echoc "- name '$name'"
echoc "- guid $guid"
echoc "- (launcher $launcher)"
echoc "- icon $icon"
echoc "- root $root"
bridgeargs=" " # deprecated
wdir=%USERPROFILE%
if $ok && [ -n "$distro" ]
then # fix #163: backend missing +x with certain mount options
echo Setting +x wslbridge2 backends for distro "'$distro'"
(cd "$INSTDIR"; cd bin; wsl.exe -d "$distro" chmod +x wslbridge2-backend hvpty-backend)
# (cd "$LOCALAPPDATA/wsltty/bin"; wsl.exe -d "$distro" chmod +x wslbridge2-backend hvpty-backend)
# (cd ... ; "$SYSTEMROOT/System32/bash.exe" "$guid" -c chmod +x wslbridge2-backend hvpty-backend)
(cd "$INSTDIR"; cd bin; PATH="${WINDIR}/Sysnative:${PATH}" wsl.exe -d "$distro" chmod +x wslbridge2-backend)
# (cd "$LOCALAPPDATA/wsltty/bin"; wsl.exe -d "$distro" chmod +x wslbridge2-backend)
# (cd ... ; "$SYSTEMROOT/System32/bash.exe" "$guid" -c chmod +x wslbridge2-backend)
fi
if $ok && $config
@@ -256,46 +306,66 @@ config () {
if $contextmenu
then
# context menu entries
#cmd /C mkcontext "$name"
direckey='HKEY_CURRENT_USER\Software\Classes\Directory'
keyname="${name}_Terminal"
if $remove
then
# obsolete; handled above
reg delete "$direckey\\shell\\$keyname" /f
reg delete "$direckey\\Background\\shell\\$keyname" /f
else
reg add "$direckey\\shell\\$keyname" /d "$name Terminal" /f
reg add "$direckey\\shell\\$keyname" /v Icon /d "$icon" /f
cmd /C reg add "$direckey\\shell\\$keyname\\command" /d "\"$target\" -i \"$icon\" --dir \"%1\" $minttyargs $bridgeargs" /f
reg add "$direckey\\Background\\shell\\$keyname" /d "$name Terminal" /f
reg add "$direckey\\Background\\shell\\$keyname" /v Icon /d "$icon" /f
cmd /C reg add "$direckey\\Background\\shell\\$keyname\\command" /d "\"$target\" -i \"$icon\" $minttyargs $bridgeargs" /f
direckey='/HKEY_CURRENT_USER/Software/Classes/Directory'
echoc Registry setting "$direckey/[Background/]shell/$keyname"
target="$installcop"'\bin\mintty.exe'
regtool add "$direckey/shell"
regtool add "$direckey/shell/$keyname"
regtool set "$direckey/shell/$keyname/" -s "$name Terminal"
regtool set "$direckey/shell/$keyname/Icon" -s "$icon"
regtool add "$direckey/shell/$keyname/command"
regtool set "$direckey/shell/$keyname/command/" -s "\"$target\" -i \"$icon\" --dir \"%1\" $MINTARGS $bridgeargs"
regtool add "$direckey/Background/shell"
regtool add "$direckey/Background/shell/$keyname"
regtool set "$direckey/Background/shell/$keyname/" -s "$name Terminal"
regtool set "$direckey/Background/shell/$keyname/Icon" -s "$icon"
regtool add "$direckey/Background/shell/$keyname/command"
regtool set "$direckey/Background/shell/$keyname/command/" -s "\"$target\" -i \"$icon\" $MINTARGS $bridgeargs"
fi
else
# invocation shortcuts and scripts
if $remove
then
cmd /C del "%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\$name Terminal.lnk"
cmd /C del "%LOCALAPPDATA%\\Microsoft\\WindowsApps\\$name.bat"
cmd /C del "%LOCALAPPDATA%\\Microsoft\\WindowsApps\\$name~.bat"
delete "$APPDATA\\Microsoft\\Windows\\Start Menu\\Programs\\$name Terminal.lnk"
delete "$LOCALAPPDATA\\Microsoft\\WindowsApps\\$name.bat"
delete "$LOCALAPPDATA\\Microsoft\\WindowsApps\\$name~.bat"
if [ "$name" = "WSL" ]
then
# determine actual Desktop folder
desktopkey='\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Desktop'
desktop=`regtool get "$desktopkey"`
cmd /C del "$desktop\\$name Terminal.lnk"
case "$desktop" in
%USERPROFILE%*) desktop="$USERPROFILE${desktop#%USERPROFILE%}";;
esac
delete "$desktop\\$name Terminal.lnk"
fi
else
# desktop shortcut in %USERPROFILE% -> Start Menu - WSLtty
cscript /nologo mkshortcut.vbs "/name:$name Terminal %"
#mkshortcut.exe -n "$name Terminal %" -i "$icon" "$TARGETPATH" -a "$MINTARGS" -d "" -w %USERPROFILE%
cmd /C copy "$name Terminal %.lnk" "%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\WSLtty"
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 copy "$name.bat" "$installdir"
cmd /C copy "$name.bat" "%LOCALAPPDATA%\\Microsoft\\WindowsApps"
copy "$name.bat" "$LOCALAPPDATA\\Microsoft\\WindowsApps"
# store backup copies in installation dir
if [ "$PWD" != "$INSTDIR" ]
then
copy "$name Terminal %.lnk" "$installcop"
copy "$name.bat" "$installcop"
fi
# prepare versions to target WSL home directory
#bridgeargs="-C~ $bridgeargs"
@@ -305,24 +375,33 @@ config () {
# desktop shortcut in ~ -> Start Menu
cscript /nologo mkshortcut.vbs "/name:$name Terminal"
#mkshortcut.exe -n "$name Terminal" -i "$icon" "$TARGETPATH" -a "$MINTARGS" -d "" -w %USERPROFILE%
cmd /C copy "$name Terminal.lnk" "%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs"
copy "$name Terminal.lnk" "$APPDATA\\Microsoft\\Windows\\Start Menu\\Programs"
# default desktop shortcut in ~ -> Desktop
if [ "$name" = "WSL" ]
then
#cmd /C copy "$name Terminal.lnk" "%USERPROFILE%\\Desktop"
#cmd /C copy "$name Terminal.lnk" "%APPDATA%\\..\\Desktop\\"
#copy "$name Terminal.lnk" "$USERPROFILE\\Desktop"
#copy "$name Terminal.lnk" "$APPDATA\\..\\Desktop\\"
# the above does not work reliably (see #166)
# determine actual Desktop folder
desktopkey='\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Desktop'
desktop=`regtool get "$desktopkey"`
cmd /C copy "$name Terminal.lnk" "$desktop\\"
case "$desktop" in
%USERPROFILE%*) desktop="$USERPROFILE${desktop#%USERPROFILE%}";;
esac
copy "$name Terminal.lnk" "$desktop\\"
fi
# launch script in ~ -> WSLtty home, WindowsApps launch folder
cmd /C mkbat.bat "$name~"
cmd /C copy "$name~.bat" "$installdir"
cmd /C copy "$name~.bat" "%LOCALAPPDATA%\\Microsoft\\WindowsApps"
copy "$name~.bat" "$LOCALAPPDATA\\Microsoft\\WindowsApps"
# store backup copies in installation dir
if [ "$PWD" != "$INSTDIR" ]
then
copy "$name Terminal.lnk" "$installcop"
copy "$name~.bat" "$installcop"
fi
fi
fi

3
dequote.bat Executable file
View File

@@ -0,0 +1,3 @@
@echo off
rem https://ss64.com/nt/syntax-dequote.html
for /f "delims=" %%A in ('echo %%%1%%') do set %1=%%~A

View File

@@ -1,19 +1,24 @@
@echo off
set refinstalldir=%%LOCALAPPDATA%%\wsltty
set installdir=%LOCALAPPDATA%\wsltty
set installdir="%LOCALAPPDATA%\wsltty"
set refconfigdir=%%APPDATA%%\wsltty
set configdir=%APPDATA%\wsltty
set oldroot=%installdir%
set oldhomedir=%installdir%\home\%USERNAME%
set oldconfigdir=%oldhomedir%\.config\mintty
set configdir="%APPDATA%\wsltty"
call dequote installdir
call dequote configdir
set oldroot="%installdir%"
set oldhomedir="%installdir%\home\%USERNAME%"
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
:deploy
mkdir "%installdir%"
mkdir "%installdir%" 2> nul:
rem clean up previous installation artefacts
del /Q "%installdir%\*.bat"
@@ -31,6 +36,8 @@ rem copy "WSL Terminal %%.lnk" "%installdir%"
copy config-distros.sh "%installdir%"
copy mkshortcut.vbs "%installdir%"
copy cmd2.bat "%installdir%"
copy dequote.bat "%installdir%"
rem allow persistent customization of default icon:
if not exist "%installdir%\wsl.ico" copy tux.ico "%installdir%\wsl.ico"
@@ -39,25 +46,21 @@ copy uninstall.bat "%installdir%"
if not exist "%installdir%\bin" goto instbin
rem move previous programs possibly in use out of the way
del /Q "%installdir%\bin\*.old"
del /Q "%installdir%\bin\*.old" 2> nul:
ren "%installdir%\bin\cygwin1.dll" cygwin1.dll.old
ren "%installdir%\bin\cygwin-console-helper.exe" cygwin-console-helper.exe.old
ren "%installdir%\bin\mintty.exe" mintty.exe.old
ren "%installdir%\bin\wslbridge2.exe" wslbridge2.exe.old
ren "%installdir%\bin\wslbridge2-backend" wslbridge2-backend.old
ren "%installdir%\bin\hvpty.exe" hvpty.exe.old
ren "%installdir%\bin\hvpty-backend" hvpty-backend.old
del /Q "%installdir%\bin\*.old"
del /Q "%installdir%\bin\*.old" 2> nul:
:instbin
mkdir "%installdir%\bin"
mkdir "%installdir%\bin" 2> nul:
copy cygwin1.dll "%installdir%\bin"
copy cygwin-console-helper.exe "%installdir%\bin"
copy mintty.exe "%installdir%\bin"
copy wslbridge2.exe "%installdir%\bin"
copy wslbridge2-backend "%installdir%\bin"
copy hvpty.exe "%installdir%\bin"
copy hvpty-backend "%installdir%\bin"
copy dash.exe "%installdir%\bin"
copy regtool.exe "%installdir%\bin"
@@ -69,22 +72,23 @@ rem copy cygiconv-2.dll "%installdir%"\bin
rem copy cygintl-8.dll "%installdir%"\bin
rem create system config directory and copy config archive
mkdir "%installdir%\usr\share\mintty\lang"
mkdir "%installdir%\usr\share\mintty\lang" 2> nul:
copy lang.zoo "%installdir%\usr\share\mintty\lang"
mkdir "%installdir%\usr\share\mintty\themes"
mkdir "%installdir%\usr\share\mintty\themes" 2> nul:
copy themes.zoo "%installdir%\usr\share\mintty\themes"
mkdir "%installdir%\usr\share\mintty\sounds"
mkdir "%installdir%\usr\share\mintty\sounds" 2> nul:
copy sounds.zoo "%installdir%\usr\share\mintty\sounds"
mkdir "%installdir%\usr\share\mintty\info"
mkdir "%installdir%\usr\share\mintty\info" 2> nul:
copy charnames.txt "%installdir%\usr\share\mintty\info"
mkdir "%installdir%\usr\share\mintty\icon"
mkdir "%installdir%\usr\share\mintty\icon" 2> nul:
copy tux.ico "%installdir%\usr\share\mintty\icon"
copy mintty.ico "%installdir%\usr\share\mintty\icon"
rem create Start Menu Folder
set smf=%APPDATA%\Microsoft\Windows\Start Menu\Programs\WSLtty
mkdir "%smf%"
set smf="%APPDATA%\Microsoft\Windows\Start Menu\Programs\WSLtty"
call dequote smf
mkdir "%smf%" 2> nul:
rem clean up previous installation
del /Q "%smf%\*.lnk"
@@ -97,7 +101,7 @@ copy "configure WSL shortcuts.lnk" "%smf%"
rem copy "WSL Terminal.lnk" "%smf%"
rem copy "WSL Terminal %%.lnk" "%smf%"
rem clean up previous installation
rmdir /S /Q "%smf%\context menu shortcuts"
rmdir /S /Q "%smf%\context menu shortcuts" 2> nul:
rem unpack config files in system config directory
cd /D "%installdir%\usr\share\mintty\lang"
@@ -106,6 +110,7 @@ cd /D "%installdir%\usr\share\mintty\themes"
"%installdir%\bin\zoo" xO themes
cd /D "%installdir%\usr\share\mintty\sounds"
"%installdir%\bin\zoo" xO sounds
cd /D "%installdir%"
:migrate configuration
@@ -120,24 +125,28 @@ rmdir "%oldhomedir%\.config"
if exist "%configdir%\config" goto deloldhome
if exist "%oldhomedir%\.minttyrc" copy "%oldhomedir%\.minttyrc" "%configdir%\config" && del "%oldhomedir%\.minttyrc"
:deloldhome
rmdir "%oldhomedir%"
rmdir "%oldroot%\home"
rmdir "%oldhomedir%" 2> nul:
rmdir "%oldroot%\home" 2> nul:
:userconfig
rem create user config directory and subfolders
mkdir "%configdir%\lang"
mkdir "%configdir%\themes"
mkdir "%configdir%\sounds"
mkdir "%configdir%\lang" 2> nul:
mkdir "%configdir%\themes" 2> nul:
mkdir "%configdir%\sounds" 2> nul:
rem create config file if it does not yet exist
if not exist "%configdir%\config" echo # To use common configuration in %%APPDATA%%\mintty, simply remove this file>"%configdir%\config"
:appconfig
rem distro-specific stuff: shortcuts and launch scripts
cd "%installdir%"
bin\dash.exe "%installdir%\config-distros.sh"
rem bin\dash.exe "%installdir%\config-distros.sh" -contextmenu
cd /D "%installdir%"
echo Configuring for WSL distributions
bin\dash.exe "config-distros.sh"
rem rem bin\dash.exe "config-distros.sh" -contextmenu
:end

View File

@@ -8,16 +8,21 @@
# wsltty release
ver=3.0.6
ver=3.2.0
# wsltty appx release - must have 4 parts!
verx=3.0.6.0
verx=3.2.0.0
# mintty release version
minttyver=3.0.6
minttyver=3.2.0
# wslbridge release version
wslbridgever=0.4
# wslbridge2 release version
#repo=Biswa96/wslbridge2
#wslbridgever=0.5
repo=mintty/wslbridge2
wslbridgever=0.5.1
##############################
@@ -27,6 +32,11 @@ wslbridgever=0.4
# wslbridge branch or commit to build from source;
wslbridge=wslbridge-frontend wslbridge-backend
##############################
# build backend on a musl-libc-based distribution
# (reportedly not needed anymore but untested)
BuildDistr=-d Alpine
##############################
# Windows SDK version for appx
WINSDKKEY=/HKEY_LOCAL_MACHINE/SOFTWARE/WOW6432Node/Microsoft/.NET Framework Platform/Setup/Multi-Targeting Pack
@@ -66,14 +76,20 @@ wgeto=curl -R -L --connect-timeout 55
# - ensure the path name drag-and-drop adaptation works (-> Cygwin, not MSYS)
# - 64 Bit (x86_64) for more stable invocation (avoid fork issues)
check:
arch:=$(shell uname -m)
check: # checkarch
echo Building for:
echo $(arch) | grep .
# checking suitable host environment; run `make pkg` to bypass
# check cygwin (vs msys) for proper drag-and-drop paths:
uname | grep CYGWIN
checkarch:
# check 32 bit to ensure 32-Bit Windows support, just in case:
#uname -m | grep i686
# check 64 bit to provide 64-Bit stability support:
uname -m | grep x86_64
#uname -m | grep x86_64
#############################################################################
# patch version information for appx package configuration
@@ -88,13 +104,20 @@ fix-verx:
sed -i~ -e '/<Identity / s,Version="[.0-9]*",Version="$(verx)",' AppxManifest.xml
echo patched AppxManifest.xml
#############################################################################
# clear binaries
clean:
rm -fr wslbridge2-$(wslbridgever)/bin
rm -fr bin
#############################################################################
# generation
wslbridge: $(wslbridge)
wslbridge2-$(wslbridgever).zip:
$(wgeto) https://github.com/Biswa96/wslbridge2/archive/v$(wslbridgever).zip -o wslbridge2-$(wslbridgever).zip
$(wgeto) https://github.com/$(repo)/archive/v$(wslbridgever).zip -o wslbridge2-$(wslbridgever).zip
wslbridge-source: wslbridge2-$(wslbridgever).zip
unzip -ou wslbridge2-$(wslbridgever).zip
@@ -103,19 +126,23 @@ wslbridge-source: wslbridge2-$(wslbridgever).zip
wslbridge-frontend: wslbridge-source
echo ------------- Compiling wslbridge2 frontend
mkdir -p bin
rm -f bin/wslbridge2.exe bin/hvpty.exe
cd wslbridge2-$(wslbridgever); make RELEASE=1
# frontend build
cd wslbridge2-$(wslbridgever)/src; make -f Makefile.frontend RELEASE=1
# extract binaries
cp wslbridge2-$(wslbridgever)/bin/wslbridge2.exe bin/
cp wslbridge2-$(wslbridgever)/bin/hvpty.exe bin/
windir=$(shell cd "${WINDIR}"; pwd)
wslbridge-backend: wslbridge-source
echo ------------- Compiling wslbridge2 backend
uname -m | grep x86_64
#uname -m | grep x86_64
mkdir -p bin
rm -f bin/wslbridge2-backend bin/hvpty-backend
cd wslbridge2-$(wslbridgever); cmd /C wsl -d Alpine make RELEASE=1 < /dev/null
# provide dependencies for backend build
PATH="$(windir)/Sysnative:${PATH}" cmd /C wsl.exe -u root $(BuildDistr) $(shell env | grep http_proxy=) apk add make g++ linux-headers < /dev/null
# invoke backend build
cd wslbridge2-$(wslbridgever)/src; PATH="$(windir)/Sysnative:${PATH}" cmd /C wsl.exe $(BuildDistr) make -f Makefile.backend RELEASE=1 < /dev/null
# extract binaries
cp wslbridge2-$(wslbridgever)/bin/wslbridge2-backend bin/
cp wslbridge2-$(wslbridgever)/bin/hvpty-backend bin/
mintty-get:
$(wgeto) https://github.com/mintty/mintty/archive/$(minttyver).zip -o mintty-$(minttyver).zip
@@ -189,8 +216,8 @@ appx-bin:
cop: ver
mkdir -p rel
rm -fr rel/wsltty-$(ver)-install.exe
sed -e "s,%version%,$(ver)," makewinx.cfg > rel/wsltty.SED
rm -f rel/wsltty-$(ver)-install-$(arch).exe
sed -e "s,%version%,$(ver)," -e "s,%arch%,$(arch)," makewinx.cfg > rel/wsltty.SED
cp bin/cygwin1.dll rel/
cp bin/cygwin-console-helper.exe rel/
cp bin/dash.exe rel/
@@ -203,8 +230,6 @@ cop: ver
cp charnames.txt rel/
cp bin/wslbridge2.exe rel/
cp bin/wslbridge2-backend rel/
cp bin/hvpty.exe rel/
cp bin/hvpty-backend rel/
cp mkshortcut.vbs rel/
#cp bin/mkshortcut.exe rel/
#cp bin/cygpopt-0.dll rel/

View File

@@ -26,7 +26,7 @@ SourceFiles=SourceFiles
InstallPrompt=Install Mintty terminal for WSL (Windows Subsystem for Linux)?
DisplayLicense=
FinishMessage=Mintty for WSL installed - for documentation and configuration see https://github.com/mintty/wsltty
TargetName=wsltty-%version%-install.exe
TargetName=wsltty-%version%-install-%arch%.exe
FriendlyName=wsltty
AppLaunched=cmd.exe /c install.bat
PostInstallCmd=<None>
@@ -37,8 +37,8 @@ FILE1="cygwin-console-helper.exe"
FILE2="mintty.exe"
FILE3="wslbridge2.exe"
FILE4="wslbridge2-backend"
FILE5="hvpty.exe"
FILE6="hvpty-backend"
FILE5="LICENSE.mintty"
FILE6="LICENSE.wslbridge2"
FILE7="config-distros.sh"
FILE8="configure WSL shortcuts.lnk"
FILE9="charnames.txt"
@@ -58,8 +58,8 @@ FILE22="themes.zoo"
FILE23="sounds.zoo"
FILE24="mintty.ico"
FILE25="mkshortcut.vbs"
FILE26="LICENSE.mintty"
FILE27="LICENSE.wslbridge2"
FILE26="dequote.bat"
FILE27="cmd2.bat"
[SourceFiles]
SourceFiles0=.

View File

@@ -1,30 +1,32 @@
@echo off
if "%installdir%" == "" set installdir=%LOCALAPPDATA%\wsltty
if "%installdir%" == "" set installdir="%LOCALAPPDATA%\wsltty"
call dequote installdir
:shortcuts
rem delete Start Menu Folder
set smf=%APPDATA%\Microsoft\Windows\Start Menu\Programs\WSLtty
set smf="%APPDATA%\Microsoft\Windows\Start Menu\Programs\WSLtty"
call dequote smf
rmdir /S /Q "%smf%"
:start menu
cd %installdir%
cd /D "%installdir%"
bin\dash.exe config-distros.sh -shortcuts-remove
:explorer context menu
cd %installdir%
cd /D "%installdir%"
bin\dash.exe config-distros.sh -contextmenu-remove
:undeploy
cd %installdir%
cd /D "%installdir%"
rem currently not removing software

View File

@@ -1,76 +0,0 @@
diff -rup old/Makefile new/Makefile
--- old/Makefile 2018-05-06 01:12:36.000000000 +0200
+++ new/Makefile 2019-07-24 22:29:12.874257700 +0200
@@ -8,7 +8,9 @@ all : ../out/wslbridge-backend
-static-libgcc -static-libstdc++ \
-D_GNU_SOURCE \
-DWSLBRIDGE_VERSION=$(shell cat ../VERSION.txt) \
- -Wall -O2 $< ../common/SocketIo.cc -o $@ -lutil -pthread
+ -Wall -O2 $< ../common/SocketIo.cc -o $@ \
+ -ldl -lutil -static -pthread \
+ -Wl,--whole-archive -lpthread -Wl,--no-whole-archive
$(STRIP) $@
clean:
diff -rup old/wslbridge-backend.cc new/wslbridge-backend.cc
--- old/wslbridge-backend.cc 2018-05-06 01:12:36.000000000 +0200
+++ new/wslbridge-backend.cc 2019-07-24 22:55:25.324307400 +0200
@@ -494,6 +494,58 @@ static void frontendVersionCheck(const c
} // namespace
+#define getpwuid _getpwuid
+
+#include <dlfcn.h>
+typedef struct passwd * (*__getpwuid_t)(int uid);
+
+struct passwd * getpwuid(int uid)
+{
+ void * dl = dlopen(0, 0);
+printf("dlopen %p\n", dl);
+ if (dl) {
+ struct passwd * (*__getpwuid)(int uid) =
+ (__getpwuid_t)dlsym(dl, "getpwuid");
+printf("dlsym %p\n", __getpwuid);
+ if (__getpwuid)
+ return __getpwuid(uid);
+ }
+
+ FILE * pwd = fopen("/etc/passwd", "r");
+ if (pwd) {
+ char pwbuf[222];
+ static struct passwd pw;
+ pw.pw_shell = 0;
+ while (fgets(pwbuf, sizeof pwbuf, pwd)) {
+ char * sep = strchr(pwbuf, ':');
+ if (!sep) continue;
+ sep = strchr(++sep, ':');
+ if (!sep) continue;
+ int pwuid;
+ if (sscanf(sep, ":%d:", &pwuid) == 1 && pwuid == uid) {
+ // pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell
+ // ^
+ sep = strchr(++sep, ':');
+ if (!sep) continue;
+ sep = strchr(++sep, ':');
+ if (!sep) continue;
+ sep = strchr(++sep, ':');
+ if (!sep) continue;
+ sep = strchr(++sep, ':');
+ if (!sep) continue;
+ pw.pw_shell = ++sep;
+ sep = strchr(++sep, '\n');
+ if (sep)
+ *sep = 0;
+ break;
+ }
+ }
+ fclose(pwd);
+ return &pw;
+ }
+ return 0;
+}
+
int main(int argc, char *argv[]) {
// If the backend crashes, it prints a message to its stderr, which is a