1
0
mirror of https://github.com/mintty/wsltty.git synced 2025-11-06 10:01:54 +00:00

Compare commits

...

11 Commits
3.0.5 ... 3.1.0

Author SHA1 Message Date
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
mintty
49e57f64bf 3.0.6 2019-10-06 16:36:19 +02:00
mintty
3793d84b4d 2019-10-02 20:04:48 +02:00
mintty
c439d4fbdc mention login parameter "-" explicitly (#191) 2019-10-02 16:12:42 +02:00
mintty
08adea1fb4 Windows requirement (#192) 2019-10-02 11:19:38 +02:00
7 changed files with 80 additions and 147 deletions

View File

@@ -17,6 +17,12 @@ WSLtty components
---
### Requirement ###
Since release 3.0.5, WSLtty requires Windows version 1809 (the November 2018 release).
---
### Installation from this repository ###
#### WSLtty installer ([Download](https://github.com/mintty/wsltty/releases) standalone installation) ####
@@ -31,7 +37,7 @@ to enable the “Run anyway” button.
#### Installation from source repository ####
Download or checkout the wsltty repository.
Checkout the wsltty repository, or download the source archive, unpack and rename the directory to `wsltty`.
Invoke `make`, then `make install`.
Note this has to be done within a Cygwin environment.
@@ -79,10 +85,10 @@ 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).
---
@@ -175,11 +181,16 @@ Note:
#### Shell selection and Login shell ####
The WSLtty deployment does not impose a shell preference.
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" -`
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):
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`
---

View File

@@ -1 +1 @@
3.0.5
3.1.0

View File

@@ -1,8 +1,5 @@
#! /bin/sh
# set some paths; capital variables are for the mkshortcut.exe case,
# not for the mkshortcut.vbs case
case "$installdir" in
?*) custominst=true;;
"") custominst=false;;
@@ -179,26 +176,26 @@ 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"
if [ -r "$ProgramW6432/WindowsApps/$distrinst/$executable" ]
then #icon="%ProgramW6432%/WindowsApps/$distrinst/$executable"
icon="$ProgramW6432/WindowsApps/$distrinst/$executable"
elif [ -r "$ProgramW6432/WindowsApps/$distrinst/images/icon.ico" ]
then #icon="%ProgramW6432%/WindowsApps/$distrinst/images/icon.ico"
icon="$ProgramW6432/WindowsApps/$distrinst/images/icon.ico"
else icon="$installdir"'\wsl.ico'
fi
root="$basepath/rootfs"
@@ -211,15 +208,12 @@ config () {
root="$basepath"
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
@@ -228,25 +222,26 @@ config () {
icon="$installdir"'\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,7 +251,6 @@ config () {
if $contextmenu
then
# context menu entries
#cmd /C mkcontext "$name"
direckey='HKEY_CURRENT_USER\Software\Classes\Directory'
keyname="${name}_Terminal"
if $remove

View File

@@ -45,8 +45,6 @@ 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"
:instbin
@@ -56,8 +54,6 @@ 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"

View File

@@ -8,29 +8,30 @@
# wsltty release
ver=3.0.5
ver=3.1.0
# wsltty appx release - must have 4 parts!
verx=3.0.5.0
verx=3.1.0.0
# mintty release version
minttyver=3.1.0
# wslbridge2 release version
wslbridgever=0.5
##############################
# mintty branch or commit version
#minttyver=master
# wslbridge branch or commit to build from source;
wslbridge=wslbridge-frontend wslbridge-backend
##############################
# Windows SDK version for appx
WINSDKKEY=/HKEY_LOCAL_MACHINE/SOFTWARE/WOW6432Node/Microsoft/.NET Framework Platform/Setup/Multi-Targeting Pack
WINSDKVER=`regtool list '$(WINSDKKEY)' | sed -e '$$ q' -e d`
##############################
# mintty release version
minttyver=3.0.5
# or mintty branch or commit version
#minttyver=master
##############################
# wslbridge binary package; may be overridden below
wslbridgever=0.3
# or wslbridge branch or commit to build from source;
wslbridge=wslbridge-frontend wslbridge-backend
#############################################################################
# default target
@@ -65,14 +66,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
@@ -101,18 +108,25 @@ wslbridge-source: wslbridge2-$(wslbridgever).zip
wslbridge-frontend: wslbridge-source
echo ------------- Compiling wslbridge2 frontend
cd wslbridge2-$(wslbridgever); make RELEASE=1
mkdir -p bin
# 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/
# build backend on a musl-libc-based distribution
BuildDistr=Alpine
wslbridge-backend: wslbridge-source
echo ------------- Compiling wslbridge2 backend
uname -m | grep x86_64
cd wslbridge2-$(wslbridgever); cmd /C wsl -d Alpine make RELEASE=1 & (sleep 8; echo built backend)
#uname -m | grep x86_64
mkdir -p bin
# provide dependencies for backend build
PATH="${WINDIR}/Sysnative:${PATH}" cmd /C wsl.exe -u root -d $(BuildDistr) $(shell env | grep http_proxy=) apk add make g++ linux-headers
# invoke backend build
cd wslbridge2-$(wslbridgever)/src; PATH="${WINDIR}/Sysnative:${PATH}" cmd /C wsl.exe -d $(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
@@ -186,8 +200,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/
@@ -200,8 +214,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,6 @@ FILE22="themes.zoo"
FILE23="sounds.zoo"
FILE24="mintty.ico"
FILE25="mkshortcut.vbs"
FILE26="LICENSE.mintty"
FILE27="LICENSE.wslbridge2"
[SourceFiles]
SourceFiles0=.
@@ -91,6 +89,4 @@ SourceFiles0=.
%FILE23%=
%FILE24%=
%FILE25%=
%FILE26%=
%FILE27%=

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