mirror of
https://github.com/mintty/wsltty.git
synced 2025-11-05 17:41:51 +00:00
Compare commits
138 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5136d7e878 | ||
|
|
0d39faaaf6 | ||
|
|
d61e551236 | ||
|
|
3f60e3f48c | ||
|
|
a207cae3a8 | ||
|
|
79c3f9e450 | ||
|
|
75c67869bf | ||
|
|
7776748081 | ||
|
|
bac370cfce | ||
|
|
975dbb9398 | ||
|
|
432b71d2fd | ||
|
|
1b41dfa1e0 | ||
|
|
336db2f19b | ||
|
|
1f67e41333 | ||
|
|
0520b71e1f | ||
|
|
92b982690e | ||
|
|
f0a3449ada | ||
|
|
3d4055a63b | ||
|
|
2fb994604a | ||
|
|
5da3a053a9 | ||
|
|
ad65aa9931 | ||
|
|
c9acce8d76 | ||
|
|
1533c27b36 | ||
|
|
3e3eaf6e31 | ||
|
|
482df018c9 | ||
|
|
23fc790c26 | ||
|
|
e5c67ecc7c | ||
|
|
20075c6378 | ||
|
|
05ce002fc6 | ||
|
|
cc37c6c2d5 | ||
|
|
5ef4879be2 | ||
|
|
97699c2010 | ||
|
|
4316b754da | ||
|
|
b8171d61a6 | ||
|
|
d7f14146fd | ||
|
|
46ee1b4c1c | ||
|
|
27a9ce6f42 | ||
|
|
e88e60a786 | ||
|
|
dfeaf49ae9 | ||
|
|
fd81d580d6 | ||
|
|
3281c12216 | ||
|
|
46ab74d6b4 | ||
|
|
a5b546ee4a | ||
|
|
fc8e7cda45 | ||
|
|
b23a0a4b3d | ||
|
|
a2414e0dc7 | ||
|
|
963a40d919 | ||
|
|
017b05c48c | ||
|
|
52b03a43d9 | ||
|
|
26a1abb148 | ||
|
|
e7709798c5 | ||
|
|
37c5e0dc40 | ||
|
|
55c034ec66 | ||
|
|
df054073ef | ||
|
|
ace39cbd03 | ||
|
|
e9b2e108f7 | ||
|
|
f66c87cc62 | ||
|
|
36e0d9c58a | ||
|
|
5db1916332 | ||
|
|
8911503a87 | ||
|
|
55792acd8d | ||
|
|
b8330e46d8 | ||
|
|
65553b90ef | ||
|
|
2fb7d02091 | ||
|
|
4c7eb01b93 | ||
|
|
0fd1dd9077 | ||
|
|
64c2d04b56 | ||
|
|
e283f413ba | ||
|
|
4ce4b11094 | ||
|
|
84c16fb927 | ||
|
|
65bf9273ad | ||
|
|
36a39d99de | ||
|
|
be761f3aab | ||
|
|
c3b062c00b | ||
|
|
149b1a6f1a | ||
|
|
9fd7a1135b | ||
|
|
92a7cceae2 | ||
|
|
1ef83d72e1 | ||
|
|
9be0b3ec10 | ||
|
|
276fb6ae88 | ||
|
|
288c56a3d2 | ||
|
|
082eb760eb | ||
|
|
d5cc2bfe77 | ||
|
|
1e453b05e9 | ||
|
|
ee8d3b0678 | ||
|
|
2f69d2740d | ||
|
|
4a55503707 | ||
|
|
48f69cb11f | ||
|
|
0a39c664e2 | ||
|
|
fecb6c49af | ||
|
|
b017982c19 | ||
|
|
f6016239df | ||
|
|
b5349bf6db | ||
|
|
3b1ecb2e01 | ||
|
|
beed642144 | ||
|
|
a3c32980e7 | ||
|
|
e6ce36e2bd | ||
|
|
d865b01135 | ||
|
|
1e7bb5fc6e | ||
|
|
8ffb732330 | ||
|
|
0d1f0875be | ||
|
|
d7c73fb40e | ||
|
|
1049ca2baf | ||
|
|
088f3bc06b | ||
|
|
28dfd66e09 | ||
|
|
3b6a356585 | ||
|
|
195f4069b4 | ||
|
|
9b3b1a89aa | ||
|
|
4e937486f5 | ||
|
|
a9a9ad5155 | ||
|
|
b4a26196eb | ||
|
|
4bca6510b5 | ||
|
|
01274fc94c | ||
|
|
d7c156c2fa | ||
|
|
c820364bd6 | ||
|
|
c3c54a397f | ||
|
|
d8c9b21b9c | ||
|
|
ae637e4645 | ||
|
|
81b586a86a | ||
|
|
0ae7cb6d80 | ||
|
|
e1a21714b9 | ||
|
|
e9306241d4 | ||
|
|
9b4fade447 | ||
|
|
6419d8c3a2 | ||
|
|
b735929c5c | ||
|
|
edf7787539 | ||
|
|
98d4697bca | ||
|
|
1106032955 | ||
|
|
a6d96ff1a2 | ||
|
|
74cb9ea92b | ||
|
|
eef97b91d7 | ||
|
|
480bbce851 | ||
|
|
f5df7b32d3 | ||
|
|
91c1b89050 | ||
|
|
ff527bcd12 | ||
|
|
a6e090a37c | ||
|
|
abe617cfc8 | ||
|
|
95203252b8 |
Binary file not shown.
39
LICENSE.mintty
Normal file
39
LICENSE.mintty
Normal file
@@ -0,0 +1,39 @@
|
||||
mintty is copyright 2008-13 Andy Koppe, 2015-18 Thomas Wolff.
|
||||
|
||||
Licensed under the terms of the GNU General Public License version 3 or later,
|
||||
amended with the bundling clause to clarify ambiguous interpretation.
|
||||
|
||||
The bundling clause can be found in the accompanying file LICENSE.bundling.
|
||||
|
||||
The GPL license text can be found in the accompanying file LICENSE.GPL,
|
||||
at /usr/share/doc/common-licenses/GPL-3.0 on Cygwin installs,
|
||||
or on the GNU website at http://www.gnu.org/licenses/gpl.html.
|
||||
|
||||
Sources are available from the project page at http://mintty.github.io/.
|
||||
|
||||
Based on PuTTY version 0.60 by Simon Tatham and contributors.
|
||||
Big thanks to everyone involved for their work on PuTTY.
|
||||
See LICENSE.PuTTY for PuTTY's copyright notice, contributors, and license.
|
||||
The sources of PuTTY 0.60 can be downloaded from
|
||||
ftp://ftp.chiark.greenend.org.uk/users/sgtatham/putty-0.60.
|
||||
|
||||
The minibidi algorithm is under MIT license as quoted in the source file.
|
||||
|
||||
Sixel code (sixel.c) is relicensed under GPL like mintty with the
|
||||
permission of its author (kmiya@culti); Sixel colour conversion code
|
||||
(sixel_hls.c) is licensed by its author Ross Combs under the license
|
||||
quoted in the source file.
|
||||
|
||||
The program icon is the apps/utilities-terminal icon from KDE's Oxygen theme,
|
||||
retrieved from http://websvn.kde.org/trunk/KDE/kdebase/runtime/pics/oxygen.
|
||||
Thanks to the KDE artists for their sleek design. The Oxygen icons are licensed
|
||||
under the terms of the LGPLv3; see LICENSE.Oxygen for details.
|
||||
|
||||
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.
|
||||
|
||||
22
LICENSE.wslbridge
Normal file
22
LICENSE.wslbridge
Normal file
@@ -0,0 +1,22 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 Ryan Prichard
|
||||
Copyright (c) 2017-2018 Google LLC
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to
|
||||
deal in the Software without restriction, including without limitation the
|
||||
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
sell copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
204
README.md
204
README.md
@@ -1,21 +1,203 @@
|
||||
Mintty as a terminal for Bash on Ubuntu on Windows / WSL.
|
||||
Mintty as a terminal for WSL (Windows Subsystem for Linux).
|
||||
|
||||
#### Overview ####
|
||||
<img align=right src=wsltty.png>
|
||||
|
||||
Run the installer to install
|
||||
* wsltty package components (see below) in the user’s application directory (where WSL is also installed)
|
||||
* an empty “home directory” to enable storage of a mintty config file
|
||||
* a Desktop Shortcut and a Start Menu Shortcut to start WSL with a login bash in the user’s WSL home directory
|
||||
* context menu entries for Windows Explorer to start WSL with a bash in the respective directory
|
||||
### Overview ###
|
||||
|
||||
An uninstaller is not provided.
|
||||
WSLtty components
|
||||
* wsltty package components (see below) in the user’s local application folder
|
||||
`%LOCALAPPDATA%`
|
||||
* a wsltty configuration directory in the user’s application folder `%APPDATA%`
|
||||
(“home”-located configuration files from a previously installed version
|
||||
will be migrated to the new default location)
|
||||
* Start Menu shortcuts to start WSL terminals
|
||||
* `*.bat` scripts to invoke WSL terminals from the command line
|
||||
* optional context menu entries for Windows Explorer to start WSL terminals in the respective folder
|
||||
* install/uninstall context menu items from Start Menu subfolder `WSLtty`
|
||||
|
||||
#### Components ####
|
||||
---
|
||||
|
||||
For mintty, see the [Mintty homepage](http://mintty.github.io/).
|
||||
### Installation from this repository ###
|
||||
|
||||
#### WSLtty installer ([Download](https://github.com/mintty/wsltty/releases) standalone installation) ####
|
||||
|
||||
Run the [installer](https://github.com/mintty/wsltty/releases) to install
|
||||
the components listed above.
|
||||
If Windows complains with a “Windows protected your PC” popup,
|
||||
you may need to click “Run anyway” to proceed with the installation.
|
||||
You may need to open the Properties of the installer first, tab “General”
|
||||
section “Security” (if available) and select “Unblock”,
|
||||
to enable the “Run anyway” button.
|
||||
|
||||
#### Installation from source repository ####
|
||||
|
||||
Download or checkout the wsltty repository.
|
||||
Invoke `make`, then `make install`.
|
||||
Note this has to be done within a Cygwin environment.
|
||||
|
||||
#### Installation to non-default locations ####
|
||||
|
||||
(For experts)
|
||||
Within the installation process, provide parameters to the script `install.bat`.
|
||||
The optional first parameter designates the installation target,
|
||||
the optional second parameter designates the configuration directory.
|
||||
|
||||
### Installation with other package management environments ###
|
||||
|
||||
#### Chocolatey ####
|
||||
|
||||
If you use the [Chocolatey package manager](https://chocolatey.org/),
|
||||
invoke one of
|
||||
<img height=222 align=right src=https://github.com/mintty/wsltty.appx/raw/master/wsltty.appx.png>
|
||||
* `choco install wsltty`
|
||||
* `choco upgrade wsltty`
|
||||
|
||||
#### Scoop ####
|
||||
|
||||
If you use the [Scoop package manager](https://scoop.sh/),
|
||||
* `scoop bucket add extras`
|
||||
|
||||
then, invoke one of
|
||||
* `scoop install wsltty`
|
||||
* `scoop update wsltty`
|
||||
|
||||
#### Windows Appx package ####
|
||||
|
||||
A Windows Appx package and certificate is available in the [wsltty.appx](https://github.com/mintty/wsltty.appx/) repository.
|
||||
|
||||
<br clear=all>
|
||||
|
||||
---
|
||||
|
||||
### Invocation ###
|
||||
|
||||
WSLtty can be invoked with
|
||||
* installed Start Menu shortcuts (or Desktop shortcuts if copied there)
|
||||
* *.bat scripts (optionally with WSL command as parameters)
|
||||
* Explorer context menu (if installed from the Start Menu `WSLtty` subfolder)
|
||||
|
||||
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 ###
|
||||
|
||||
#### Start Menu and Desktop shortcuts ####
|
||||
|
||||
In the Start Menu, the following shortcuts are installed:
|
||||
* For each installed WSL distribution D, D` Terminal` to start in the WSL user home
|
||||
* `WSL Terminal` to start the default WSL distribution (as configured with the Windows tool `wslconfig`)
|
||||
|
||||
In the Start Menu subfolder WSLtty, the following shortcuts are installed:
|
||||
* For each installed WSL distribution D, D` Terminal %` to start in the Windows %USERPROFILE% home
|
||||
* `WSL Terminal %` to start the default WSL distribution in the Windows %USERPROFILE% home
|
||||
|
||||
One Desktop shortcut is installed:
|
||||
* `WSL Terminal` to start the default WSL distribution (as configured with the Windows tool `wslconfig`)
|
||||
|
||||
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`
|
||||
(and a copy in its application folder `%LOCALAPPDATA%\wsltty`):
|
||||
|
||||
* For each installed WSL distribution D, D`.bat` to start in the current folder/directory
|
||||
* For each installed WSL distribution D, D`~.bat` to start in the WSL user home
|
||||
* `WSL.bat` and `WSL~.bat` to start the default WSL distribution
|
||||
|
||||
Given that `%LOCALAPPDATA%\Microsoft\WindowsApps` is in your PATH,
|
||||
the scripts can be invoked from cmd.exe, PowerShell, or via WIN+R.
|
||||
|
||||
#### Context menu entries ####
|
||||
|
||||
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`:
|
||||
* <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 ####
|
||||
|
||||
Wsltty installation and the mintty terminal try to use the icon of the
|
||||
respective WSL distribution. If it cannot be determined, a penguin icon
|
||||
is used as a default. You can replace it with your preferred fallback icon
|
||||
by replacing the icon file `%LOCALAPPDATA%\wsltty\wsl.ico`.
|
||||
|
||||
#### Mintty settings ####
|
||||
|
||||
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.
|
||||
* `%HOME%\.minttyrc` (usage deprecated with wsltty)
|
||||
* `%HOME%\.config\mintty\config` (usage deprecated with wsltty)
|
||||
* `%APPDATA%\mintty\config`
|
||||
* `%LOCALAPPDATA%\wsltty\etc\minttyrc` (usage deprecated with wsltty)
|
||||
|
||||
Note:
|
||||
* `%APPDATA%\wsltty\config` is the new user configuration file location.
|
||||
Further subdirectories of `%APPDATA%\wsltty` are used for language,
|
||||
themes, and sounds resource configuration.
|
||||
Note the distinction from `%LOCALAPPDATA%\wsltty` which is the default
|
||||
wsltty software installation location.
|
||||
* The `%APPDATA%\mintty\config` option provides the possibility to
|
||||
maintain common mintty settings for various installations (like
|
||||
wsltty, Cygwin, MinGW/msys, Git for Windows, MinEd for Windows).
|
||||
* (About deprecated options) By default, `%HOME%` would refer to the
|
||||
root directory of the cygwin standalone installation hosting wsltty.
|
||||
So `%HOME%` would mean `%LOCALAPPDATA%\wsltty\home\%USERNAME%`.
|
||||
If you define `HOME` at Windows level, this changes accordingly.
|
||||
Note, however, that the WSL `HOME` is a completely different setting.
|
||||
|
||||
#### Shell selection and Login shell ####
|
||||
|
||||
The WSLtty deployment does not impose a shell preference anymore.
|
||||
However, the intermediate gateways (`wslbridge` and its backend and the `bash.exe` Windows launcher)
|
||||
are also involved.
|
||||
|
||||
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`
|
||||
|
||||
---
|
||||
|
||||
### Components and Credits ###
|
||||
|
||||
For mintty, see the [Mintty homepage](http://mintty.github.io/)
|
||||
(with further screenshots),
|
||||
the [Mintty manual page](http://mintty.github.io/mintty.1.html),
|
||||
<br>and the [Mintty Wiki](https://github.com/mintty/mintty/wiki),
|
||||
including a [Hints and Tips page](https://github.com/mintty/mintty/wiki/Tips).
|
||||
|
||||
It is based on [Cygwin](http://cygwin.com)
|
||||
and includes its runtime library ([sources](http://mirrors.dotsrc.org/cygwin/x86/release/cygwin)).
|
||||
|
||||
For interacting with WSL, it uses [wslbridge](https://github.com/rprichard/wslbridge).
|
||||
|
||||
Many thanks for this enabling gateway go especially to Ryan Prichard.
|
||||
|
||||
BIN
add default to context menu.lnk
Executable file
BIN
add default to context menu.lnk
Executable file
Binary file not shown.
BIN
add to context menu.lnk
Executable file
BIN
add to context menu.lnk
Executable file
Binary file not shown.
282
config-distros.sh
Executable file
282
config-distros.sh
Executable file
@@ -0,0 +1,282 @@
|
||||
#! /bin/sh
|
||||
|
||||
installdir=${installdir:-'%LOCALAPPDATA%\wsltty'}
|
||||
configdir=${configdir:-'%APPDATA%\wsltty'}
|
||||
|
||||
PATH=/bin:"$PATH":$SYSTEMROOT/System32
|
||||
|
||||
contextmenu=false
|
||||
remove=false
|
||||
alldistros=true
|
||||
config=true
|
||||
|
||||
case "/$0" in
|
||||
*/wsl*)
|
||||
config=false;;
|
||||
esac
|
||||
|
||||
case "$1" in
|
||||
-info)
|
||||
config=false
|
||||
shift;;
|
||||
-shortcuts-remove)
|
||||
remove=true
|
||||
shift;;
|
||||
-contextmenu)
|
||||
contextmenu=true
|
||||
shift;;
|
||||
-contextmenu-default)
|
||||
contextmenu=true
|
||||
alldistros=false
|
||||
shift;;
|
||||
-contextmenu-remove)
|
||||
contextmenu=true
|
||||
remove=true
|
||||
direckey='/HKEY_CURRENT_USER/Software/Classes/Directory'
|
||||
|
||||
regtool list "$direckey/shell" 2>/dev/null |
|
||||
while read name
|
||||
do
|
||||
case `regtool get "$direckey/shell/$name/command/"` in
|
||||
*bin\\mintty.exe*/bin/wslbridge*|*bin\\mintty.exe*--WSL*)
|
||||
regtool remove "$direckey/shell/$name/command"
|
||||
regtool remove "$direckey/shell/$name"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
regtool list "$direckey/Background/shell" 2>/dev/null |
|
||||
while read name
|
||||
do
|
||||
case `regtool get "$direckey/Background/shell/$name/command/"` in
|
||||
*bin\\mintty.exe*/bin/wslbridge*|*bin\\mintty.exe*--WSL*)
|
||||
regtool remove "$direckey/Background/shell/$name/command"
|
||||
regtool remove "$direckey/Background/shell/$name"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
exit
|
||||
shift;;
|
||||
esac
|
||||
|
||||
# test w/o WSL: call this script with REGTOOLFAKE=true dash config-distros.sh
|
||||
if ${REGTOOLFAKE:-false}
|
||||
then
|
||||
regtool () {
|
||||
case "$1" in
|
||||
-*) shift;;
|
||||
esac
|
||||
key=`echo $2 | sed -e 's,.*{\(.*\)}.*,\1,' -e t -e d`
|
||||
case "$1.$2" in
|
||||
list.*)
|
||||
if $contextmenu
|
||||
then echo "{0}"
|
||||
else echo "{1}"; echo "{2}"
|
||||
fi;;
|
||||
get.*/DistributionName)
|
||||
echo "distro$key";;
|
||||
get.*/BasePath)
|
||||
echo "C:\\Program\\{$key}\\State";;
|
||||
get.*/PackageFamilyName)
|
||||
echo "distro{$key}";;
|
||||
get.*/PackageFullName)
|
||||
echo "C:\\Program\\{$key}";;
|
||||
esac
|
||||
}
|
||||
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
|
||||
@echo off
|
||||
echo Creating %1.bat
|
||||
|
||||
echo @echo off> %1.bat
|
||||
echo rem Start mintty terminal for WSL package %name% in current directory>> %1.bat
|
||||
echo %target% -i "%icon%" %minttyargs% %bridgeargs% %%*>> %1.bat
|
||||
/EOB
|
||||
fi
|
||||
|
||||
lxss="/HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Lxss"
|
||||
schema="/HKEY_CURRENT_USER/Software/Classes/Local Settings/Software/Microsoft/Windows/CurrentVersion/AppModel/SystemAppData"
|
||||
|
||||
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
|
||||
{*)
|
||||
distro=`regtool get "$lxss/$guid/DistributionName"`
|
||||
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"`
|
||||
# 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"
|
||||
fi
|
||||
|
||||
minttyargs='--wsl --rootfs="'"$root"'" --configdir="'"$configdir"'" -o Locale=C -o Charset=UTF-8 /bin/wslbridge '
|
||||
minttyargs='--WSL="'"$distro"'" --configdir="'"$configdir"'"'
|
||||
#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'
|
||||
|
||||
ok=true;;
|
||||
DefaultDistribution|"") # WSL default installation
|
||||
distro=
|
||||
name=WSL
|
||||
icon="$installdir"'\wsl.ico'
|
||||
minttyargs='--WSL= --configdir="'"$configdir"'"'
|
||||
bridgeargs='-t'
|
||||
|
||||
ok=true;;
|
||||
esac
|
||||
echoc "distro '$distro'"
|
||||
echoc "- name '$name'"
|
||||
echoc "- guid $guid"
|
||||
echoc "- (launcher $launcher)"
|
||||
echoc "- icon $icon"
|
||||
echoc "- root $root"
|
||||
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
|
||||
|
||||
if $contextmenu
|
||||
then
|
||||
# context menu entries
|
||||
#cmd /C mkcontext "$name"
|
||||
direckey='HKEY_CURRENT_USER\Software\Classes\Directory'
|
||||
keyname="${name}_Terminal"
|
||||
if $remove
|
||||
then
|
||||
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
|
||||
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"
|
||||
else
|
||||
# desktop shortcut in %USERPROFILE% -> Start Menu - WSLtty
|
||||
cscript /nologo mkshortcut.vbs "/name:$name Terminal %"
|
||||
cmd /C 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"
|
||||
|
||||
# prepare versions to target WSL home directory
|
||||
#bridgeargs="-C~ $bridgeargs"
|
||||
minttyargs="$minttyargs -~"
|
||||
|
||||
# desktop shortcut in ~ -> Start Menu
|
||||
cscript /nologo mkshortcut.vbs "/name:$name Terminal"
|
||||
cmd /C 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\\"
|
||||
# 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
|
||||
cmd /C mkbat.bat "$name~"
|
||||
cmd /C copy "$name~.bat" "$installdir"
|
||||
cmd /C copy "$name~.bat" "%LOCALAPPDATA%\\Microsoft\\WindowsApps"
|
||||
fi
|
||||
|
||||
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
|
||||
|
||||
BIN
configure WSL shortcuts.lnk
Executable file
BIN
configure WSL shortcuts.lnk
Executable file
Binary file not shown.
164
install.bat
164
install.bat
@@ -1,53 +1,131 @@
|
||||
@echo off
|
||||
goto explorer
|
||||
|
||||
mkdir "%LOCALAPPDATA%\wsltty"
|
||||
copy LICENSE.mintty "%LOCALAPPDATA%\wsltty"
|
||||
copy LICENSE.wslbridge "%LOCALAPPDATA%\wsltty"
|
||||
|
||||
mkdir "%LOCALAPPDATA%\wsltty\bin"
|
||||
copy cygwin1.dll "%LOCALAPPDATA%\wsltty\bin"
|
||||
copy cygwin-console-helper.exe "%LOCALAPPDATA%\wsltty\bin"
|
||||
copy mintty.exe "%LOCALAPPDATA%\wsltty\bin"
|
||||
copy wslbridge.exe "%LOCALAPPDATA%\wsltty\bin"
|
||||
copy wslbridge-backend "%LOCALAPPDATA%\wsltty\bin"
|
||||
|
||||
rem create "home directory" to enable storage of config file
|
||||
mkdir "%LOCALAPPDATA%\wsltty\home
|
||||
mkdir "%LOCALAPPDATA%\wsltty\home\%USERNAME%"
|
||||
|
||||
rem create Desktop Shorcut
|
||||
copy "Bash on UoW in Mintty.lnk" "%USERPROFILE%\Desktop"
|
||||
|
||||
rem create Start Menu Shortcut
|
||||
copy "Bash on UoW in Mintty.lnk" "%APPDATA%\Microsoft\Windows\Start Menu"
|
||||
set refinstalldir=%%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
|
||||
if not "%1" == "" set refinstalldir=%1 && set installdir=%1
|
||||
if not "%2" == "" set refconfigdir=%2 && set configdir=%2
|
||||
|
||||
|
||||
:explorer
|
||||
rem Explorer context menu
|
||||
set userdirname=HKEY_CURRENT_USER\Software\Classes\Directory\shell
|
||||
set userdirpane=HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell
|
||||
:deploy
|
||||
|
||||
rem WSL in Mintty
|
||||
set label=WSL in Mintty
|
||||
rem set here=in this directory
|
||||
set here=Here
|
||||
mkdir "%installdir%"
|
||||
|
||||
rem WSL icon
|
||||
set icon=%LOCALAPPDATA%\lxss\bash.ico
|
||||
rem clean up previous installation artefacts
|
||||
del /Q "%installdir%\*.bat"
|
||||
del /Q "%installdir%\*.lnk"
|
||||
|
||||
rem WSL target shell
|
||||
set shell=/bin/bash
|
||||
copy LICENSE.mintty "%installdir%"
|
||||
copy LICENSE.wslbridge "%installdir%"
|
||||
|
||||
rem Mintty invocation
|
||||
set cmd=%LOCALAPPDATA%\wsltty\bin\mintty.exe
|
||||
set arg=/bin/wslbridge -t %shell%
|
||||
set target=\"%cmd%\" %arg%
|
||||
copy "add to context menu.lnk" "%installdir%"
|
||||
copy "add default to context menu.lnk" "%installdir%"
|
||||
copy "remove from context menu.lnk" "%installdir%"
|
||||
copy "configure WSL shortcuts.lnk" "%installdir%"
|
||||
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"
|
||||
|
||||
reg add "%userdirname%\wsltty" /d "%label% %here%" /f
|
||||
reg add "%userdirname%\wsltty" /v Icon /d "%icon%" /f
|
||||
reg add "%userdirname%\wsltty\command" /d "%target%" /f
|
||||
reg add "%userdirpane%\wsltty" /d "%label% %here%" /f
|
||||
reg add "%userdirpane%\wsltty" /v Icon /d "%icon%" /f
|
||||
reg add "%userdirpane%\wsltty\command" /d "%target%" /f
|
||||
if not exist "%installdir%\bin" goto instbin
|
||||
rem move previous programs possibly in use out of the way
|
||||
del /Q "%installdir%\bin\*.old"
|
||||
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\wslbridge.exe" wslbridge.exe.old
|
||||
ren "%installdir%\bin\wslbridge-backend" wslbridge-backend.old
|
||||
del /Q "%installdir%\bin\*.old"
|
||||
|
||||
:instbin
|
||||
mkdir "%installdir%\bin"
|
||||
copy cygwin1.dll "%installdir%\bin"
|
||||
copy cygwin-console-helper.exe "%installdir%\bin"
|
||||
copy mintty.exe "%installdir%\bin"
|
||||
copy wslbridge.exe "%installdir%\bin"
|
||||
copy wslbridge-backend "%installdir%\bin"
|
||||
|
||||
copy dash.exe "%installdir%\bin"
|
||||
copy regtool.exe "%installdir%\bin"
|
||||
copy zoo.exe "%installdir%\bin"
|
||||
|
||||
rem create system config directory and copy config archive
|
||||
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"
|
||||
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%"
|
||||
|
||||
rem clean up previous installation
|
||||
del /Q "%smf%\*.lnk"
|
||||
|
||||
copy "wsltty home & help.url" "%smf%"
|
||||
copy "add to context menu.lnk" "%smf%"
|
||||
copy "add default to context menu.lnk" "%smf%"
|
||||
copy "remove from context menu.lnk" "%smf%"
|
||||
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"
|
||||
|
||||
rem unpack config files in system config directory
|
||||
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
|
||||
|
||||
rem migrate old config resource files to new config dir
|
||||
if exist "%configdir%" goto configfile
|
||||
if not exist "%oldconfigdir%" goto configfile
|
||||
if exist "%oldhomedir%\.minttyrc" copy "%oldhomedir%\.minttyrc" "%oldconfigdir%\config" && del "%oldhomedir%\.minttyrc"
|
||||
xcopy /E /I /Y "%oldconfigdir%" "%configdir%" && rmdir /S /Q "%oldconfigdir%"
|
||||
rmdir "%oldhomedir%\.config"
|
||||
:configfile
|
||||
if exist "%configdir%\config" goto deloldhome
|
||||
if exist "%oldhomedir%\.minttyrc" copy "%oldhomedir%\.minttyrc" "%configdir%\config" && del "%oldhomedir%\.minttyrc"
|
||||
:deloldhome
|
||||
rmdir "%oldhomedir%"
|
||||
rmdir "%oldroot%\home"
|
||||
|
||||
|
||||
:userconfig
|
||||
|
||||
rem create user config directory and subfolders
|
||||
mkdir "%configdir%\lang"
|
||||
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"
|
||||
|
||||
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
|
||||
|
||||
|
||||
:end
|
||||
|
||||
238
makefile
238
makefile
@@ -1,9 +1,67 @@
|
||||
#############################################################################
|
||||
# default: generate all
|
||||
all: wslbridge mintty cygwin wsltty pkg
|
||||
# build a wsltty installer package:
|
||||
# configure ver=... and minttyver= in this makefile
|
||||
# make targets:
|
||||
# make [all] build a distributable installer (default)
|
||||
# make pkg build an installer, bypassing the system checks
|
||||
# make wsltty build the software, using the local copy of mintty
|
||||
|
||||
ver=0.5
|
||||
wslbridgever=0.1.0
|
||||
|
||||
# wsltty release
|
||||
ver=3.0.2.2
|
||||
|
||||
# wsltty appx release - must have 4 parts!
|
||||
verx=3.0.2.2
|
||||
|
||||
# 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.2
|
||||
|
||||
# or mintty branch or commit version
|
||||
#minttyver=master
|
||||
|
||||
##############################
|
||||
# wslbridge binary package; may be overridden below
|
||||
wslbridge=wslbridge-package
|
||||
wslbridgever=0.2.4
|
||||
|
||||
# or wslbridge branch or commit to build from source;
|
||||
# also set wslbridge-commit
|
||||
wslbridge=wslbridge-frontend wslbridge-backend
|
||||
|
||||
# release 0.2.0 does not have cygwin_internal(CW_SYNC_WINENV) yet:
|
||||
#wslbridge-commit=master
|
||||
|
||||
# use --distro-guid option (merged into 0.2.4):
|
||||
#wslbridge-commit=cb22e3f6f989cefe5b6599d3c04422ded74db664
|
||||
|
||||
# after 0.2.4, from branch login-mode:
|
||||
wslbridge-commit=04a060505860915c99bc336dbeb80269771a80b7
|
||||
|
||||
# after 0.2.4, from branch wslpath:
|
||||
wslbridge-commit=29df86d87135caec8424c08f031ce121a3a39ae1
|
||||
|
||||
# after 0.2.4, merged wslpath branch:
|
||||
wslbridge-commit=06fb7acba28d7f37611f3911685af214739895a0
|
||||
|
||||
# after 0.2.4, with --backend option:
|
||||
wslbridge-commit=47b41bec6c32da58ab01de9345087b1a4fd836e3
|
||||
|
||||
#############################################################################
|
||||
# default target
|
||||
|
||||
all: all-$(notdir $(CURDIR))
|
||||
|
||||
all-wsltty: check pkg
|
||||
|
||||
all-wsltty.appx: appx
|
||||
|
||||
#############################################################################
|
||||
# target checking and some defs
|
||||
|
||||
TARGET := $(shell $(CC) -dumpmachine)
|
||||
|
||||
@@ -19,47 +77,187 @@ else
|
||||
$(error Target '$(TARGET)' not supported)
|
||||
endif
|
||||
|
||||
wget=curl -R -L -O --connect-timeout 55
|
||||
wget=curl -R -L --connect-timeout 55 -O
|
||||
wgeto=curl -R -L --connect-timeout 55
|
||||
|
||||
#############################################################################
|
||||
# system check:
|
||||
# - ensure the path name drag-and-drop adaptation works (-> Cygwin, not MSYS)
|
||||
# - 64 Bit (x86_64) for more stable invocation (avoid fork issues)
|
||||
|
||||
check:
|
||||
# checking suitable host environment; run `make pkg` to bypass
|
||||
# check cygwin (vs msys) for proper drag-and-drop paths:
|
||||
uname | grep CYGWIN
|
||||
# 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
|
||||
|
||||
#############################################################################
|
||||
# patch version information for appx package configuration
|
||||
|
||||
fix-verx:
|
||||
echo patching $(WINSDKVER) into Launcher config
|
||||
cd Launcher; sed -i~ -e "/<supportedRuntime / s,Version=v[.0-9]*,Version=$(WINSDKVER)," app.config
|
||||
echo patched app.config
|
||||
cd Launcher; sed -i~ -e "/<TargetFrameworkVersion>/ s,v[.0-9]*,$(WINSDKVER)," Launcher.csproj
|
||||
echo patched Launcher.csproj
|
||||
echo patching $(verx) into app config
|
||||
sed -i~ -e '/<Identity / s,Version="[.0-9]*",Version="$(verx)",' AppxManifest.xml
|
||||
echo patched AppxManifest.xml
|
||||
|
||||
#############################################################################
|
||||
# generation
|
||||
|
||||
wslbridge:
|
||||
wslbridge: $(wslbridge)
|
||||
|
||||
wslbridge-package:
|
||||
$(wget) https://github.com/rprichard/wslbridge/releases/download/$(wslbridgever)/wslbridge-$(wslbridgever)-$(sys).tar.gz
|
||||
tar xvzf wslbridge-$(wslbridgever)-$(sys).tar.gz
|
||||
mkdir -p bin
|
||||
cp wslbridge-$(wslbridgever)-$(sys)/wslbridge* bin/
|
||||
cp wslbridge-$(wslbridgever)-$(sys)/LICENSE.txt LICENSE.wslbridge
|
||||
tr -d '\015' < wslbridge-$(wslbridgever)-$(sys)/LICENSE.txt > LICENSE.wslbridge
|
||||
|
||||
mintty:
|
||||
$(wget) https://github.com/mintty/mintty/archive/master.zip
|
||||
mv master.zip mintty-master.zip
|
||||
unzip mintty-master.zip
|
||||
cd mintty-master/src; make LDFLAGS="-static -static-libgcc -s"
|
||||
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 mintty-master/bin/mintty.exe bin/
|
||||
cp mintty-master/LICENSE LICENSE.mintty
|
||||
cp wslbridge-$(wslbridge-commit)/out/wslbridge.exe bin/
|
||||
|
||||
#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/
|
||||
|
||||
mintty-get:
|
||||
$(wgeto) https://github.com/mintty/mintty/archive/$(minttyver).zip -o mintty-$(minttyver).zip
|
||||
unzip -o mintty-$(minttyver).zip
|
||||
cp mintty-$(minttyver)/icon/terminal.ico mintty.ico
|
||||
|
||||
wslbuild=LDFLAGS="-static -static-libgcc -s"
|
||||
appxbuild=$(wslbuild) CCOPT=-DWSLTTY_APPX
|
||||
wslversion=VERSION_SUFFIX="– wsltty $(ver)" WSLTTY_VERSION="$(ver)"
|
||||
appxversion=VERSION_SUFFIX="– wsltty appx $(verx)" WSLTTY_VERSION="$(verx)"
|
||||
|
||||
mintty-build:
|
||||
# ensure rebuild of version-specific check and message
|
||||
rm -f mintty-$(minttyver)/bin/*/windialog.o
|
||||
# build mintty
|
||||
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
|
||||
rm -f mintty-$(minttyver)/bin/*/windialog.o
|
||||
# build mintty
|
||||
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 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/
|
||||
|
||||
cygwin:
|
||||
mkdir -p bin
|
||||
cp /bin/cygwin1.dll bin/
|
||||
cp /bin/cygwin-console-helper.exe bin/
|
||||
cp /bin/dash.exe bin/
|
||||
cp /bin/regtool.exe bin/
|
||||
cp /bin/zoo.exe bin/
|
||||
|
||||
wsltty:
|
||||
appx-bin:
|
||||
mkdir -p bin
|
||||
cp /bin/cygwin1.dll bin/
|
||||
cp /bin/cygwin-console-helper.exe bin/
|
||||
|
||||
pkg:
|
||||
cop: ver
|
||||
mkdir -p rel
|
||||
rm -fr rel/wsltty-$(ver)-install.exe
|
||||
sed -e "s,%version%,$(ver)," makewinx.cfg > rel/wsltty.SED
|
||||
cp bin/cygwin1.dll rel/
|
||||
cp bin/cygwin-console-helper.exe rel/
|
||||
cp bin/dash.exe rel/
|
||||
cp bin/regtool.exe rel/
|
||||
cp bin/mintty.exe rel/
|
||||
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/
|
||||
cp LICENSE.mintty rel/
|
||||
cp LICENSE.wslbridge rel/
|
||||
cp "Bash on UoW in Mintty.lnk" rel/
|
||||
cp install.bat rel/
|
||||
cp LICENSE.* rel/
|
||||
cp VERSION rel/
|
||||
cp *.lnk rel/
|
||||
cp *.ico rel/
|
||||
cp *.url rel/
|
||||
cp *.bat rel/
|
||||
cp *.sh rel/
|
||||
cp *.vbs rel/
|
||||
|
||||
cab: cop
|
||||
cd rel; iexpress /n wsltty.SED
|
||||
|
||||
install: cop installbat
|
||||
|
||||
installbat:
|
||||
cd rel; cmd /C install
|
||||
|
||||
ver:
|
||||
echo $(ver) > VERSION
|
||||
|
||||
mintty: mintty-get mintty-build
|
||||
|
||||
mintty-usr: mintty-get mintty-appx
|
||||
|
||||
# local wsltty build target:
|
||||
wsltty: wslbridge cygwin mintty-build mintty-pkg
|
||||
|
||||
# standalone wsltty package build target:
|
||||
pkg: wslbridge cygwin mintty-get mintty-build mintty-pkg cab
|
||||
|
||||
# appx package contents target:
|
||||
wsltty-appx: wslbridge appx-bin mintty-get mintty-build-appx mintty-appx
|
||||
|
||||
# appx package target:
|
||||
appx: wsltty-appx fix-verx
|
||||
sh ./build.sh
|
||||
|
||||
#############################################################################
|
||||
# end
|
||||
|
||||
42
makewinx.cfg
42
makewinx.cfg
@@ -23,9 +23,9 @@ UserQuietInstCmd=%UserQuietInstCmd%
|
||||
SourceFiles=SourceFiles
|
||||
|
||||
[Strings]
|
||||
InstallPrompt=Install Mintty terminal for WSL / Ubuntu on Windows?
|
||||
InstallPrompt=Install Mintty terminal for WSL (Windows Subsystem for Linux)?
|
||||
DisplayLicense=
|
||||
FinishMessage=Mintty for WSL installed - for documentation see https://github.com/mintty/mintty/wiki/Tips
|
||||
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
|
||||
@@ -39,8 +39,25 @@ FILE3="wslbridge.exe"
|
||||
FILE4="wslbridge-backend"
|
||||
FILE5="LICENSE.mintty"
|
||||
FILE6="LICENSE.wslbridge"
|
||||
FILE7="Bash on UoW in Mintty.lnk"
|
||||
FILE8="install.bat"
|
||||
FILE7="config-distros.sh"
|
||||
FILE8="configure WSL shortcuts.lnk"
|
||||
FILE9="charnames.txt"
|
||||
FILE10="VERSION"
|
||||
FILE11="dash.exe"
|
||||
FILE12="regtool.exe"
|
||||
FILE13="install.bat"
|
||||
FILE14="uninstall.bat"
|
||||
FILE15="tux.ico"
|
||||
FILE16="add to context menu.lnk"
|
||||
FILE17="add default to context menu.lnk"
|
||||
FILE18="remove from context menu.lnk"
|
||||
FILE19="wsltty home & help.url"
|
||||
FILE20="zoo.exe"
|
||||
FILE21="lang.zoo"
|
||||
FILE22="themes.zoo"
|
||||
FILE23="sounds.zoo"
|
||||
FILE24="mkshortcut.vbs"
|
||||
FILE25="mintty.ico"
|
||||
|
||||
[SourceFiles]
|
||||
SourceFiles0=.
|
||||
@@ -55,4 +72,21 @@ SourceFiles0=.
|
||||
%FILE6%=
|
||||
%FILE7%=
|
||||
%FILE8%=
|
||||
%FILE9%=
|
||||
%FILE10%=
|
||||
%FILE11%=
|
||||
%FILE12%=
|
||||
%FILE13%=
|
||||
%FILE14%=
|
||||
%FILE15%=
|
||||
%FILE16%=
|
||||
%FILE17%=
|
||||
%FILE18%=
|
||||
%FILE19%=
|
||||
%FILE20%=
|
||||
%FILE21%=
|
||||
%FILE22%=
|
||||
%FILE23%=
|
||||
%FILE24%=
|
||||
%FILE25%=
|
||||
|
||||
|
||||
57
mkshortcut.vbs
Executable file
57
mkshortcut.vbs
Executable file
@@ -0,0 +1,57 @@
|
||||
rem cscript mkshortcut.vbs [/param:arg] /target:link
|
||||
|
||||
rem /target:%LOCALAPPDATA%\wsltty\bin\mintty.exe
|
||||
rem /workingdir:%USERPROFILE%
|
||||
rem /icon:%LOCALAPPDATA%\wsltty\wsl.ico
|
||||
rem deprecated: /icon:%LOCALAPPDATA%\lxss\bash.ico
|
||||
rem deprecated: %
|
||||
rem /arguments:--wsl -o Locale=C -o Charset=UTF-8 /bin/wslbridge -t /bin/bash
|
||||
rem deprecated: ~
|
||||
rem /arguments:--wsl -o Locale=C -o Charset=UTF-8 /bin/wslbridge -C~ -t /bin/bash
|
||||
rem deprecated: -l
|
||||
rem /arguments:--wsl -o Locale=C -o Charset=UTF-8 /bin/wslbridge -t /bin/bash -l
|
||||
|
||||
rem General - Name:
|
||||
name = Wscript.Arguments.Named("name") & ".lnk"
|
||||
set wshell = WScript.CreateObject("WScript.Shell")
|
||||
wscript.echo "Creating " & name
|
||||
set lnk = wshell.CreateShortcut(name)
|
||||
|
||||
rem Target:
|
||||
rem lnk.TargetPath = Wscript.Arguments.Named("target")
|
||||
rem lnk.Arguments = Wscript.Arguments.Named("arguments")
|
||||
|
||||
lnk.TargetPath = wshell.ExpandEnvironmentStrings("%target%")
|
||||
minttyargs = wshell.ExpandEnvironmentStrings("%minttyargs%")
|
||||
bridgeargs = wshell.ExpandEnvironmentStrings("%bridgeargs%")
|
||||
lnk.Arguments = minttyargs & " " & bridgeargs
|
||||
rem wscript.echo "minttyargs: " & minttyargs
|
||||
rem wscript.echo lnk.Arguments
|
||||
|
||||
rem Start in:
|
||||
rem lnk.WorkingDirectory = Wscript.Arguments.Named("workingdir")
|
||||
lnk.WorkingDirectory = "%USERPROFILE%"
|
||||
|
||||
rem Icon:
|
||||
rem icon = Wscript.Arguments.Named("icon")
|
||||
rem rem iconoffset = Wscript.Arguments.Named("iconoffset")
|
||||
rem rem icon = icon & ", " & iconoffset
|
||||
icon = wshell.ExpandEnvironmentStrings("%icon%")
|
||||
rem wscript.echo "icon: " & icon
|
||||
lnk.IconLocation = icon
|
||||
rem rem lnk.IconLocation = "%LOCALAPPDATA%\lxss\bash.ico"
|
||||
rem lnk.IconLocation = "%LOCALAPPDATA%\wsltty\wsl.ico"
|
||||
|
||||
rem Shorcut key:
|
||||
rem lnk.HotKey = "ALT+CTRL+W"
|
||||
|
||||
rem Run:
|
||||
rem lnk.WindowStyle = 1
|
||||
|
||||
rem Comment:
|
||||
rem lnk.IconLocation = Wscript.Arguments.Named("desc")
|
||||
rem lnk.Description = "WSLtty"
|
||||
|
||||
lnk.Save
|
||||
wscript.echo "Created " & name
|
||||
wscript.echo
|
||||
BIN
remove from context menu.lnk
Executable file
BIN
remove from context menu.lnk
Executable file
Binary file not shown.
35
uninstall.bat
Executable file
35
uninstall.bat
Executable file
@@ -0,0 +1,35 @@
|
||||
@echo off
|
||||
|
||||
if "%installdir%" == "" set installdir=%LOCALAPPDATA%\wsltty
|
||||
|
||||
|
||||
:shortcuts
|
||||
|
||||
rem delete Start Menu Folder
|
||||
set smf=%APPDATA%\Microsoft\Windows\Start Menu\Programs\WSLtty
|
||||
rmdir /S /Q "%smf%"
|
||||
|
||||
rem delete Desktop Shortcuts (not installed anymore)
|
||||
rem del "%USERPROFILE%\Desktop\WSL % in Mintty.lnk"
|
||||
rem del "%USERPROFILE%\Desktop\WSL ~ in Mintty.lnk"
|
||||
|
||||
|
||||
:start menu
|
||||
|
||||
cd %installdir%
|
||||
bin\dash.exe config-distros.sh -shortcuts-remove
|
||||
|
||||
|
||||
:explorer context menu
|
||||
|
||||
cd %installdir%
|
||||
bin\dash.exe config-distros.sh -contextmenu-remove
|
||||
|
||||
|
||||
:undeploy
|
||||
|
||||
cd %installdir%
|
||||
rem currently not removing software
|
||||
|
||||
|
||||
:end
|
||||
76
wslbridge-backend-static.patch
Normal file
76
wslbridge-backend-static.patch
Normal 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
|
||||
2
wsltty home & help.url
Normal file
2
wsltty home & help.url
Normal file
@@ -0,0 +1,2 @@
|
||||
[InternetShortcut]
|
||||
URL=https://github.com/mintty/wsltty
|
||||
BIN
wsltty.png
Normal file
BIN
wsltty.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
Reference in New Issue
Block a user