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

Compare commits

..

25 Commits

Author SHA1 Message Date
mintty
5136d7e878 3.0.2.2 beta 2019-07-24 23:32:05 +02:00
mintty
0d39faaaf6 deploy uninstall.bat in installation directory (#170, ~#175, ~#15) 2019-07-24 23:30:49 +02:00
mintty
d61e551236 backend patch v3, linking properly (#169), with dlopen for getpwuid (#156) 2019-07-24 23:06:41 +02:00
mintty
3f60e3f48c find proper icon and rootfs for wsldl-built distros (#169) 2019-07-24 22:38:36 +02:00
mintty
a207cae3a8 3.0.2 2019-07-13 11:20:31 +02:00
mintty
79c3f9e450 ensure cmd.exe is available in PATH during installation/configuration (#172) 2019-07-07 19:07:48 +02:00
mintty
75c67869bf instruction to disable WSL 2 (#171) 2019-07-03 13:06:30 +02:00
mintty
7776748081 do without powershell to determine the exe with the icon 2019-05-28 22:31:08 +02:00
mintty
bac370cfce Merge pull request #111 from caksoylar/patch-1
use icon from exe if determined from manifest
2019-05-28 22:30:26 +02:00
mintty
975dbb9398 3.0.1.2 2019-05-28 19:49:33 +02:00
mintty
432b71d2fd 3.0.1 2019-05-28 07:33:38 +02:00
mintty
1b41dfa1e0 determine Desktop folder from registry (#166) 2019-05-22 10:40:41 +02:00
mintty
336db2f19b package sounds (mintty/mintty#711) 2019-05-03 05:01:28 +02:00
mintty
1f67e41333 avoid %USERPROFILE% (#166) 2019-05-02 16:53:33 +02:00
mintty
0520b71e1f improve description to configure shortcuts and context menu entries (#166) 2019-05-02 16:04:58 +02:00
mintty
92b982690e facilitate build testing on non-Windows 10 2019-05-02 16:04:22 +02:00
mintty
f0a3449ada static linking of wslbridge-backend to make it work in all distros (#156),
own (partial) implementation of getpwuid to this aim
2019-05-01 11:01:10 +02:00
mintty
3d4055a63b chmod +x wslbridge-backend for all distros (#163) 2019-05-01 10:59:21 +02:00
mintty
2fb994604a 3.0.0 2019-04-11 16:13:49 +02:00
Cem Aksoylar
fc8e7cda45 slashes in paths consistency 2018-06-20 23:29:57 -07:00
Cem Aksoylar
b23a0a4b3d restore deleted root definition, fallback to icon.ico first 2018-06-20 23:29:41 -07:00
Cem Aksoylar
a2414e0dc7 restore tabs 2018-06-20 23:13:38 -07:00
Cem Aksoylar
963a40d919 restore missing fi 2018-06-10 16:06:43 -07:00
Cem Aksoylar
017b05c48c fix EOL, restore misdeleted chunk on original L138-141, tabs to spaces 2018-06-10 12:15:21 -07:00
C Aksoylar
52b03a43d9 Fix missing icons for distros
Instead of looking for `images\icon.ico` in `$instdir` for each distro, instead check inside AppxManifest.xml for the executable name and point to it for the shortcut icon as suggested in https://github.com/mintty/wsltty/issues/110#issuecomment-395999015.
2018-06-10 11:35:20 -07:00
8 changed files with 194 additions and 23 deletions

View File

@@ -33,3 +33,7 @@ The colour schemes / theme files bundled with mintty are included
under various licenses. The source and license or permission are
quoted in the respective theme files.
Bell sounds files are included, mostly under the creative commons license
(https://creativecommons.org/publicdomain/zero/1.0/), see also the README
in the sounds subdirectory.

View File

@@ -79,6 +79,13 @@ 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 ####
Due to some incompatible changes by Microsoft, wslbridge cannot connect
in WSL 2 mode at this time.
Workaround:
* `wsl --set-default-version 1`
---
### Configuration ###
@@ -99,6 +106,12 @@ One Desktop shortcut is installed:
Other, distribution-specific shortcuts can be copied to the desktop
from the Start Menu if desired.
The Start menu folder WSLtty contains the link
<img align=absmiddle height=25 src=https://user-images.githubusercontent.com/12740416/57078483-a7846a00-6cee-11e9-9c5e-8c2e9e56cae4.png>`configure WSL shortcuts`.
This function is initially run when wsltty is installed.
If should be rerun after adding or removing WSL distributions,
in order to create the respective set of shortcuts in the Start menu.
#### Command line scripts `wsl*.bat` ####
WSLtty installs the following scripts into `%LOCALAPPDATA%\Microsoft\WindowsApps`
@@ -117,9 +130,16 @@ WSLtty provides context menu entries for all installed WSL distributions
and one for the configured default distribution,
to start a respective WSL terminal in a specific folder from an Explorer window.
They are not installed by default.
To add launch entries for the default or all WSL distributions to the
Explorer context menu, or remove them, run the respective script from the
Start Menu subfolder `WSLtty`.
Start Menu subfolder `WSLtty`:
* <img align=absmiddle height=25 src=https://user-images.githubusercontent.com/12740416/57078483-a7846a00-6cee-11e9-9c5e-8c2e9e56cae4.png>`add default to context menu`
adds context menu entries for the default WSL distribution
* <img align=absmiddle height=25 src=https://user-images.githubusercontent.com/12740416/57078483-a7846a00-6cee-11e9-9c5e-8c2e9e56cae4.png>`add to context menu`
adds context menu entries for all WSL distributions
* <img align=absmiddle height=25 src=https://user-images.githubusercontent.com/12740416/57078483-a7846a00-6cee-11e9-9c5e-8c2e9e56cae4.png>`remove from context menu`
removes context menu entries for WSL distributions
#### Icon ####

View File

@@ -1 +1 @@
1.9.7
3.0.2.2

View File

@@ -3,7 +3,7 @@
installdir=${installdir:-'%LOCALAPPDATA%\wsltty'}
configdir=${configdir:-'%APPDATA%\wsltty'}
PATH=/bin:"$PATH"
PATH=/bin:"$PATH":$SYSTEMROOT/System32
contextmenu=false
remove=false
@@ -104,14 +104,26 @@ fi
lxss="/HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Lxss"
schema="/HKEY_CURRENT_USER/Software/Classes/Local Settings/Software/Microsoft/Windows/CurrentVersion/AppModel/SystemAppData"
#(regtool list "$lxss" 2>/dev/null && echo || echo "No WSL packages registered" >&2) |
(
if $alldistros
then regtool list "$lxss" 2>/dev/null
else true
fi && echo || echo "No WSL packages registered" >&2) |
while read guid
do
appex () {
while read line
do
case "$line" in
*Application*Executable*)
for item in $line
do case "$item" in
Executable=*)
eval $item
echo "$Executable"
break;;
esac
done
break;;
esac
done < $*
}
config () {
guid="$1"
ok=false
case $guid in
{*)
@@ -131,11 +143,21 @@ do
if package=`regtool -q get "$lxss/$guid/PackageFamilyName"`
then
instdir=`regtool get "$schema/$package/Schemas/PackageFullName"`
if [ -r "$ProgramW6432/WindowsApps/$instdir/images/icon.ico" ]
# get actual executable path (may not match $distro) from app manifest
manifest="$ProgramW6432/WindowsApps/$instdir/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'
fi
root="$basepath/rootfs"
elif [ -f "$basepath/$distro.exe" ]
then
icon="$basepath/$distro.exe"
root="$basepath/rootfs"
else
icon="%LOCALAPPDATA%/lxss/bash.ico"
root="$basepath"
@@ -151,7 +173,7 @@ do
bridgeargs='--distro-guid "'"$guid"'" -t'
ok=true;;
"") # WSL default installation
DefaultDistribution|"") # WSL default installation
distro=
name=WSL
icon="$installdir"'\wsl.ico'
@@ -169,6 +191,13 @@ do
target="$installdir"'\bin\mintty.exe'
bridgeargs=" " # deprecated
if $ok && [ -n "$distro" ]
then # fix #163: backend missing +x with certain mount options
echo Setting +x wslbridge-backend for distro "'$distro'"
(cd "$LOCALAPPDATA/wsltty/bin"; wsl.exe -d "$distro" chmod +x wslbridge-backend)
# (cd "$LOCALAPPDATA/wsltty/bin"; "$SYSTEMROOT/System32/bash.exe" "$guid" -c chmod +x wslbridge-backend)
fi
if $ok && $config
then
export name target minttyargs bridgeargs icon
@@ -218,7 +247,14 @@ do
# default desktop shortcut in ~ -> Desktop
if [ "$name" = "WSL" ]
then cmd /C copy "$name Terminal.lnk" "%USERPROFILE%\\Desktop"
then
#cmd /C copy "$name Terminal.lnk" "%USERPROFILE%\\Desktop"
#cmd /C 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\\"
fi
# launch script in ~ -> WSLtty home, WindowsApps launch folder
@@ -229,4 +265,18 @@ do
fi
fi
}
# ensure proper parameter passing to cmd /C
chcp.com 65001 # just in case; seems to work without as well
# configure for all distros, plus default distro
for guid in `
if $alldistros
then regtool list "$lxss" 2>/dev/null
else echo DefaultDistribution
fi || echo "No WSL packages registered" >&2
`
do config $guid
done

View File

@@ -30,6 +30,7 @@ rem copy "WSL Terminal.lnk" "%installdir%"
rem copy "WSL Terminal %%.lnk" "%installdir%"
copy config-distros.sh "%installdir%"
copy mkshortcut.vbs "%installdir%"
copy uninstall.bat "%installdir%"
rem allow persistent customization of default icon:
if not exist "%installdir%\wsl.ico" copy tux.ico "%installdir%\wsl.ico"
@@ -60,6 +61,8 @@ mkdir "%installdir%\usr\share\mintty\lang"
copy lang.zoo "%installdir%\usr\share\mintty\lang"
mkdir "%installdir%\usr\share\mintty\themes"
copy themes.zoo "%installdir%\usr\share\mintty\themes"
mkdir "%installdir%\usr\share\mintty\sounds"
copy sounds.zoo "%installdir%\usr\share\mintty\sounds"
mkdir "%installdir%\usr\share\mintty\info"
copy charnames.txt "%installdir%\usr\share\mintty\info"
mkdir "%installdir%\usr\share\mintty\icon"
@@ -89,6 +92,8 @@ cd /D "%installdir%\usr\share\mintty\lang"
"%installdir%\bin\zoo" xO lang
cd /D "%installdir%\usr\share\mintty\themes"
"%installdir%\bin\zoo" xO themes
cd /D "%installdir%\usr\share\mintty\sounds"
"%installdir%\bin\zoo" xO sounds
:migrate configuration
@@ -111,8 +116,8 @@ rmdir "%oldroot%\home"
rem create user config directory and subfolders
mkdir "%configdir%\lang"
mkdir "%configdir%\sounds"
mkdir "%configdir%\themes"
mkdir "%configdir%\sounds"
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"

View File

@@ -8,10 +8,10 @@
# wsltty release
ver=1.9.8
ver=3.0.2.2
# wsltty appx release - must have 4 parts!
verx=1.9.8.0
verx=3.0.2.2
# Windows SDK version for appx
WINSDKKEY=/HKEY_LOCAL_MACHINE/SOFTWARE/WOW6432Node/Microsoft/.NET Framework Platform/Setup/Multi-Targeting Pack
@@ -19,7 +19,7 @@ WINSDKVER=`regtool list '$(WINSDKKEY)' | sed -e '$$ q' -e d`
##############################
# mintty release version
minttyver=2.9.8
minttyver=3.0.2
# or mintty branch or commit version
#minttyver=master
@@ -121,18 +121,26 @@ wslbridge-package:
wslbridge-source: wslbridge-$(wslbridge-commit).zip
unzip -o wslbridge-$(wslbridge-commit).zip
cd wslbridge-$(wslbridge-commit)/backend; patch -T -p1 < ../../wslbridge-backend-static.patch
tr -d '\015' < wslbridge-$(wslbridge-commit)/LICENSE.txt > LICENSE.wslbridge
wslbridge-$(wslbridge-commit).zip:
$(wgeto) https://github.com/rprichard/wslbridge/archive/$(wslbridge-commit).zip -o wslbridge-$(wslbridge-commit).zip
wslbridge-frontend: wslbridge-source
echo ------------- Compiling wslbridge frontend
cd wslbridge-$(wslbridge-commit)/frontend; make
strip wslbridge-$(wslbridge-commit)/out/wslbridge.exe
mkdir -p bin
cp wslbridge-$(wslbridge-commit)/out/wslbridge.exe bin/
wslbridge-backend: wslbridge-source
#wslbridge-backend: wslbridge-source
# tweak dependency to support build testing on non-Windows 10:
backend-bin=wslbridge-$(wslbridge-commit)/out/wslbridge-backend
backend-src=wslbridge-$(wslbridge-commit)/backend/wslbridge-backend.cc
wslbridge-backend: $(backend-bin) wslbridge-source
$(backend-bin): $(backend-src)
echo ------------- Compiling wslbridge backend
cd wslbridge-$(wslbridge-commit)/backend; if uname -m | grep x86_64; then cmd /C wsl make; else wslbridge make; fi
mkdir -p bin
cp wslbridge-$(wslbridge-commit)/out/wslbridge-backend bin/
@@ -154,6 +162,7 @@ mintty-build:
cd mintty-$(minttyver)/src; make $(wslbuild) $(wslversion)
mkdir -p bin
cp mintty-$(minttyver)/bin/mintty.exe bin/
strip bin/mintty.exe
mintty-build-appx:
# ensure rebuild of version-specific check and message
@@ -162,20 +171,24 @@ mintty-build-appx:
cd mintty-$(minttyver)/src; make $(appxbuild) $(appxversion)
mkdir -p bin
cp mintty-$(minttyver)/bin/mintty.exe bin/
strip bin/mintty.exe
mintty-pkg:
cp mintty-$(minttyver)/LICENSE LICENSE.mintty
cd mintty-$(minttyver)/lang; zoo a lang *.po; mv lang.zoo ../../
cd mintty-$(minttyver)/themes; zoo a themes *[!~]; mv themes.zoo ../../
cd mintty-$(minttyver)/sounds; zoo a sounds *.wav *.WAV *.md; mv sounds.zoo ../../
# add charnames.txt to support "Character Info"
cd mintty-$(minttyver)/src; sh ./mknames
cp mintty-$(minttyver)/src/charnames.txt .
mintty-appx:
mkdir -p usr/share/mintty
cd usr/share/mintty; mkdir -p lang themes info
cd usr/share/mintty; mkdir -p lang themes sounds info
cp mintty-$(minttyver)/lang/*.po usr/share/mintty/lang/
cp mintty-$(minttyver)/themes/*[!~] usr/share/mintty/themes/
cp mintty-$(minttyver)/sounds/*.wav usr/share/mintty/sounds/
cp mintty-$(minttyver)/sounds/*.WAV usr/share/mintty/sounds/
# add charnames.txt to support "Character Info"
cd mintty-$(minttyver)/src; sh ./mknames
cp mintty-$(minttyver)/src/charnames.txt usr/share/mintty/info/
@@ -205,6 +218,7 @@ cop: ver
cp bin/zoo.exe rel/
cp lang.zoo rel/
cp themes.zoo rel/
cp sounds.zoo rel/
cp charnames.txt rel/
cp bin/wslbridge.exe rel/
cp bin/wslbridge-backend rel/

View File

@@ -25,7 +25,7 @@ SourceFiles=SourceFiles
[Strings]
InstallPrompt=Install Mintty terminal for WSL (Windows Subsystem for Linux)?
DisplayLicense=
FinishMessage=Mintty for WSL installed - for documentation see https://github.com/mintty/wsltty
FinishMessage=Mintty for WSL installed - for documentation and configuration see https://github.com/mintty/wsltty
TargetName=wsltty-%version%-install.exe
FriendlyName=wsltty
AppLaunched=cmd.exe /c install.bat
@@ -55,8 +55,9 @@ FILE19="wsltty home & help.url"
FILE20="zoo.exe"
FILE21="lang.zoo"
FILE22="themes.zoo"
FILE23="mkshortcut.vbs"
FILE24="mintty.ico"
FILE23="sounds.zoo"
FILE24="mkshortcut.vbs"
FILE25="mintty.ico"
[SourceFiles]
SourceFiles0=.
@@ -87,4 +88,5 @@ SourceFiles0=.
%FILE22%=
%FILE23%=
%FILE24%=
%FILE25%=

View File

@@ -0,0 +1,76 @@
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