1
0
mirror of https://github.com/mintty/wsltty.git synced 2025-11-14 13:55:47 +00:00

Compare commits

...

7 Commits
3.0.6 ... 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
7 changed files with 62 additions and 141 deletions

View File

@@ -85,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).
---
@@ -181,16 +181,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.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,16 +8,16 @@
# wsltty release
ver=3.0.6
ver=3.1.0
# wsltty appx release - must have 4 parts!
verx=3.0.6.0
verx=3.1.0.0
# mintty release version
minttyver=3.0.6
minttyver=3.1.0
# wslbridge release version
wslbridgever=0.4
# wslbridge2 release version
wslbridgever=0.5
##############################
@@ -66,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
@@ -103,19 +109,24 @@ 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/
# build backend on a musl-libc-based distribution
BuildDistr=Alpine
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 -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
@@ -189,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/
@@ -203,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