mirror of
https://github.com/mintty/wsltty.git
synced 2025-11-14 13:55:47 +00:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b6800f7762 | ||
|
|
8a3f7d19df | ||
|
|
4f6e12741a | ||
|
|
bc7e612b0c | ||
|
|
2aefc8ae13 | ||
|
|
83a9c12fc6 | ||
|
|
79d9ab6f70 |
24
README.md
24
README.md
@@ -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 user’s 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 ###
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
45
makefile
45
makefile
@@ -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/
|
||||
|
||||
10
makewinx.cfg
10
makewinx.cfg
@@ -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%=
|
||||
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user