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

Compare commits

...

49 Commits
3.2.0 ... 3.6.5

Author SHA1 Message Date
mintty
ab84d5bbde 3.6.5 2023-09-03 13:06:35 +02:00
mintty
943d83da69 add package check links for 3rd-party installers 2023-03-30 11:47:37 +02:00
mintty
0be30273f5 project page tweaks 2023-03-30 11:30:39 +02:00
mintty
e8177d77d7 2023-03-25 05:13:33 +01:00
mintty
756f5f5844 3.6.4 2023-03-25 04:58:07 +01:00
mintty
bbbef4fc89 install emoji deployment scripts 2023-03-24 10:09:49 +01:00
mintty
eee9516a23 3.6.1.2 build 2022-11-08 23:15:40 +01:00
mintty
449a310d90 update to wslbridge2 0.9 (to fix #302), drop patches;
update to mintty 3.6.1
2022-10-30 11:30:07 +01:00
mintty
87aa168b41 CI: install build environment 2022-04-01 00:05:05 +02:00
mintty
9de7d8d6f1 CI control file 2022-03-31 21:46:17 +02:00
mintty
c91ec886b5 3.6.0 2022-03-25 19:28:34 +01:00
mintty
4caa2c34eb portable installation (#306) 2022-03-22 15:54:28 +01:00
mintty
73fcc66790 fix previous change 2022-03-01 00:11:44 +01:00
mintty
5cee2c341b installer: support customized install dirs via environment vars (#304) 2022-02-28 09:49:30 +01:00
mintty
ea570a191e (#304) 2022-02-19 23:50:24 +01:00
mintty
2dd099265d mention winget package 2022-02-05 22:52:32 +01:00
mintty
2ddd2cd1ff add 41575379b4
as a patch: add COM instance for new lifted WSL service
2022-02-03 21:00:40 +01:00
mintty
d1fa49985b add wsltty quiet installer (microsoft/winget-pkgs#40573) 2022-01-18 19:37:26 +01:00
mintty
76fad756e1 3.5.1 2021-09-03 22:37:00 +02:00
mintty
600df69bb8 3.5.1 2021-09-03 22:05:59 +02:00
mintty
97dc68d64a ensure wsltty-specific recompile for mintty -V message (#284) 2021-05-11 00:57:26 +02:00
mintty
9469b2b5f5 3.5.0.2 2021-05-01 19:16:58 +02:00
mintty
5b27a3d3c8 update to wslbridge 0.8, matching the updated patch 2021-04-27 21:46:31 +02:00
mintty
ab46c2b1b0 Merge pull request #282 from Biswa96/master
update wslbridge2 patch file, to catch up with wslbridge2 0.8, to fix #281
2021-04-27 21:44:37 +02:00
Biswapriyo Nath
2e56730282 update wslbridge2 patch file 2021-04-27 23:42:59 +05:30
mintty
d67ce45c3e 3.5.0 2021-04-15 18:07:12 +02:00
mintty
6e74ab4d5b filter out "docker" default distributions from configuration (#277) 2021-04-09 10:29:21 +02:00
mintty
ee4e403f4c filter out "docker" distributions from configuration (#277) 2021-04-07 14:30:15 +02:00
mintty
a332cf8eaa 3.4.7 2021-03-18 19:38:25 +01:00
mintty
07aa6c692d fix rebased patch; restore backend patch part 2021-03-18 19:38:07 +01:00
mintty
74dad091ce rebase patch; add setlocale patch (#273) 2021-03-16 12:07:18 +01:00
mintty
8d896ceb36 3.4.5 2021-02-17 14:29:07 +01:00
mintty
90cf6f5d15 align install file names for better sorting in release area (fixed) 2020-12-27 18:57:32 +01:00
mintty
2cd6d190d6 align install file names for better sorting in release area 2020-12-20 23:24:36 +01:00
mintty
38b8a5e93d 3.4.4 2020-12-20 23:12:13 +01:00
mintty
105d0b4ec5 uninstall: skip backend stuff, fix del parameters (~#263) 2020-11-13 12:35:13 +01:00
mintty
6c5a0f1fba support and describe local installation (from repository) without installer 2020-11-13 12:14:40 +01:00
mintty
f31eae1a41 add missing patch to repository 2020-11-12 14:33:51 +01:00
mintty
600e6e69ba instructions for installation from archive (#250) 2020-11-11 12:06:01 +01:00
mintty
9c9b88d416 3.4.3 2020-11-11 11:59:08 +01:00
mintty
9feb6b7187 build also cab file to circumvent anti-virus issues with installer (#250) 2020-11-11 11:49:57 +01:00
mintty
416fcd1d0d 3.4.2 2020-11-04 18:39:06 +01:00
mintty
2457a1fb10 doc build (#247) 2020-10-24 17:39:42 +02:00
mintty
8e09414b4b 3.4.1 2020-10-24 17:22:10 +02:00
mintty
4a0b7328da document uninstallation (#258) 2020-10-13 14:53:25 +02:00
mintty
afd3d6d9e8 hint to workaround for #197;
some minor tweaks
2020-09-04 11:58:28 +02:00
mintty
9c6d75b09e add details for installation cygwin for an installation from source 2020-08-27 14:59:12 +02:00
mintty
47ede36283 3.3.0 2020-08-06 20:50:20 +02:00
mintty
b488a82a52 3.3.0 2020-08-06 19:58:27 +02:00
11 changed files with 600 additions and 77 deletions

View File

@@ -0,0 +1,226 @@
diff --git a/src/wslbridge2-backend.cpp b/src/wslbridge2-backend.cpp
index 8b86cc6..63a19e5 100644
--- a/src/wslbridge2-backend.cpp
+++ b/src/wslbridge2-backend.cpp
@@ -17,6 +17,7 @@
#include <sys/wait.h>
#include <unistd.h>
#include <wordexp.h>
+#include <limits.h> // PIPE_BUF
#include <string>
#include <vector>
@@ -196,6 +197,7 @@ int main(int argc, char *argv[])
ssize_t readRet = 0, writeRet = 0;
char data[1024]; /* Buffer to hold raw data from pty */
+ assert(sizeof data <= PIPE_BUF);
do
{
@@ -206,8 +208,85 @@ int main(int argc, char *argv[])
if (fds[0].revents & POLLIN)
{
readRet = recv(ioSockets.inputSock, data, sizeof data, 0);
- if (readRet > 0)
- writeRet = write(mfd_dp, data, readRet);
+ char * s = data;
+ int len = readRet;
+ writeRet = 1;
+ while (writeRet > 0 && len > 0)
+ {
+ if (!*s)
+ {
+ // dispatch NUL escaped inband information
+ s++;
+ len--;
+
+ if (len < 9 && s + 9 >= data + sizeof data)
+ {
+ // make room for additional loading
+ memcpy(data, s, len);
+ s = data;
+ }
+
+ // ensure 1 more byte is loaded to dispatch on
+ if (!len)
+ {
+ readRet = recv(ioSockets.inputSock, s, 1, 0);
+ if (readRet > 0)
+ {
+ len += readRet;
+ }
+ else
+ {
+ writeRet = -1;
+ break;
+ }
+ }
+ if (*s == 2)
+ {
+ // STX: escaped NUL
+ s++;
+ len--;
+ writeRet = write(mfd_dp, "", 1);
+ }
+ else if (*s == 16)
+ {
+ // DLE: terminal window size change
+ s++;
+ len--;
+ // ensure 8 more bytes are loaded for winsize
+ while (readRet > 0 && len < 8)
+ {
+ readRet = recv(ioSockets.inputSock, s + len, 8 - len, 0);
+ if (readRet > 0)
+ {
+ len += readRet;
+ }
+ }
+ if (readRet <= 0)
+ {
+ writeRet = -1;
+ break;
+ }
+ struct winsize * winsp = (struct winsize *)s;
+ s += 8;
+ len -= 8;
+ winsp->ws_xpixel = 0;
+ winsp->ws_ypixel = 0;
+ ret = ioctl(mfd, TIOCSWINSZ, winsp);
+ if (ret != 0)
+ perror("ioctl(TIOCSWINSZ)");
+ }
+ }
+ else
+ {
+ int n = strnlen(s, len);
+ writeRet = write(mfd_dp, s, n);
+ if (writeRet > 0)
+ {
+ s += writeRet;
+ len -= writeRet;
+ }
+ }
+ }
}
/* Resize window when buffer received in control socket */
diff --git a/src/wslbridge2.cpp b/src/wslbridge2.cpp
index 300ad57..3ba9096 100644
--- a/src/wslbridge2.cpp
+++ b/src/wslbridge2.cpp
@@ -43,19 +43,41 @@ union IoSockets
/* global variable */
static volatile union IoSockets g_ioSockets = { 0 };
+#define dont_debug_inband
+#define dont_use_controlsocket
+
static void resize_window(int signum)
{
+#ifdef use_controlsocket
+#warning this may crash for unknown reason, maybe terminate the backend
struct winsize winp;
+ ioctl(STDIN_FILENO, TIOCGWINSZ, &winp);
/* Send terminal window size to control socket */
- ioctl(STDIN_FILENO, TIOCGWINSZ, &winp);
send(g_ioSockets.controlSock, (char *)&winp, sizeof winp, 0);
+#else
+ static char wins[2 + sizeof(struct winsize)] = {0, 16};
+ static struct winsize * winsp = (struct winsize *)&wins[2];
+ ioctl(STDIN_FILENO, TIOCGWINSZ, winsp);
+
+#ifdef debug_inband
+ /* Send terminal window size inband, visualized as ESC sequence */
+ char resizesc[55];
+ //sprintf(resizesc, "\e_8;%u;%u\a", winsp->ws_row, winsp->ws_col);
+ sprintf(resizesc, "^[_8;%u;%u^G", winsp->ws_row, winsp->ws_col);
+ send(g_ioSockets.inputSock, resizesc, strlen(resizesc), 0);
+#else
+ /* Send terminal window size inband, with NUL escape */
+ send(g_ioSockets.inputSock, wins, sizeof wins, 0);
+#endif
+#endif
}
static void* send_buffer(void *param)
{
int ret;
char data[1024];
+ assert(sizeof data <= PIPE_BUF);
while (1)
{
@@ -65,8 +87,33 @@ static void* send_buffer(void *param)
closesocket(g_ioSockets.inputSock);
break;
}
- if (!send(g_ioSockets.inputSock, data, ret, 0))
- break;
+ char * s = data;
+ int len = ret;
+ while (ret > 0 && len > 0)
+ {
+ if (!*s)
+ {
+ // send NUL STX
+#ifdef debug_inband
+ ret = send(g_ioSockets.inputSock, (void*)"nul", 3, 0);
+#else
+ static char NUL_STX[] = {0, 2};
+ ret = send(g_ioSockets.inputSock, NUL_STX, 2, 0);
+#endif
+ s++;
+ len--;
+ }
+ else
+ {
+ int n = strnlen(s, len);
+ ret = send(g_ioSockets.inputSock, s, n, 0);
+ if (ret > 0)
+ {
+ s += ret;
+ len -= ret;
+ }
+ }
+ }
}
pthread_exit(&ret);
@@ -480,16 +527,6 @@ int main(int argc, char *argv[])
g_ioSockets.controlSock = win_local_accept(controlSock);
}
- /* Capture window resize signal and send buffer to control socket */
- {
- struct sigaction act;
- memset(&act, 0, sizeof act);
- act.sa_handler = resize_window;
- act.sa_flags = SA_RESTART;
- ret = sigaction(SIGWINCH, &act, NULL);
- assert(ret == 0);
- }
-
/* Create thread to send input buffer to input socket */
pthread_t tidInput;
ret = pthread_create(&tidInput, nullptr, send_buffer, nullptr);
@@ -502,6 +539,17 @@ int main(int argc, char *argv[])
termState.enterRawMode();
+ /* Create thread to send window size through control socket */
+ struct sigaction act = {};
+ act.sa_handler = resize_window;
+ act.sa_flags = SA_RESTART;
+ ret = sigaction(SIGWINCH, &act, NULL);
+ assert(ret == 0);
+
+ /* Notify initial size in case it's changed since starting */
+ //resize_window(0);
+ kill(getpid(), SIGWINCH);
+
/*
* wsltty#254: WORKAROUND: Terminates input thread forcefully
* when output thread exits. Need some inter-thread syncing.

View File

@@ -0,0 +1,62 @@
diff -rup src/sav/GetVmId.cpp src/GetVmId.cpp
--- src/sav/GetVmId.cpp 2021-04-27 13:50:51.000000000 +0000
+++ src/GetVmId.cpp 2022-02-03 19:43:53.684999800 +0000
@@ -46,11 +46,24 @@ void ComInit(void)
EOAC_STATIC_CLOAKING, NULL);
assert(hRes == 0);
- hRes = CoCreateInstance(CLSID_LxssUserSession,
+ // First try with COM server in lifted WSL service
+ hRes = CoCreateInstance(CLSID_WslService,
NULL,
CLSCTX_LOCAL_SERVER,
- IID_ILxssUserSession,
+ IID_IWSLService,
(PVOID *)&wslSession);
+
+
+ // Now try with COM server in system WSL service
+ if (FAILED(hRes))
+ {
+ hRes = CoCreateInstance(CLSID_LxssUserSession,
+ NULL,
+ CLSCTX_LOCAL_SERVER,
+ IID_ILxssUserSession,
+ (PVOID *)&wslSession);
+ }
+
assert(hRes == 0);
}
diff -rup src/sav/LxssUserSession.hpp src/LxssUserSession.hpp
--- src/sav/LxssUserSession.hpp 2021-04-27 13:50:51.000000000 +0000
+++ src/LxssUserSession.hpp 2022-02-03 19:45:22.846298200 +0000
@@ -11,14 +11,26 @@
#ifndef LXSSUSERSESSION_H
#define LXSSUSERSESSION_H
-/* Class identifier */
+// COM IDs for lifted WSL service
+static const GUID CLSID_WslService = {
+ 0xF122531F,
+ 0x326B,
+ 0x4514,
+ { 0x85, 0xAE, 0xDC, 0x99, 0xD3, 0x1D, 0x82, 0x56 } };
+
+static const GUID IID_IWSLService = {
+ 0x50047071,
+ 0x122C,
+ 0x4CAD,
+ { 0x9C, 0x93, 0x94, 0x72, 0x0E, 0xB7, 0x7B, 0x06 } };
+
+// COM IDs for system WSL service
static const GUID CLSID_LxssUserSession = {
0x4F476546,
0xB412,
0x4579,
{ 0xB6, 0x4C, 0x12, 0x3D, 0xF3, 0x31, 0xE3, 0xD6 } };
-/* Interface identifier */
static const GUID IID_ILxssUserSession = {
0x536A6BCF,
0xFE04,

View File

@@ -1,4 +1,4 @@
mintty is copyright 2008-13 Andy Koppe, 2015-18 Thomas Wolff. mintty is copyright 2008-22 Andy Koppe, 2015-22 Thomas Wolff.
Licensed under the terms of the GNU General Public License version 3 or later, Licensed under the terms of the GNU General Public License version 3 or later,
amended with the bundling clause to clarify ambiguous interpretation. amended with the bundling clause to clarify ambiguous interpretation.

112
README.md
View File

@@ -11,6 +11,7 @@ WSLtty components
(“home”-located configuration files from a previously installed version (“home”-located configuration files from a previously installed version
will be migrated to the new default location) will be migrated to the new default location)
* Start Menu shortcuts to start WSL terminals * Start Menu shortcuts to start WSL terminals
* Desktop shorcut to start a terminal for the default WSL distribution
* `*.bat` scripts to invoke WSL terminals from the command line * `*.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 * 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` * install/uninstall context menu items from Start Menu subfolder `WSLtty`
@@ -35,11 +36,35 @@ You may need to open the Properties of the installer first, tab “General”
section “Security” (if available) and select “Unblock”, section “Security” (if available) and select “Unblock”,
to enable the “Run anyway” button. to enable the “Run anyway” button.
#### WSLtty Portable installer
For a portable installation, e.g. on a USB stick, choose the
“-install-portable.exe” file for download. Installation will prompt
for a portable installation folder interactively.
For example, choosing `U:\opt` will create and use folder
`U:\opt\wsltty` both as installation directory and configuration directory.
Portable installation does not install any start menu or desktop shortcuts
and no context menu entries. It creates a shortcut in the selected
portable installation folder to start the default WSL distribution.
#### Installation from archive ####
In case a local anti-virus guard barfs about the wsltty installer, the
release also contains a `.cab` file. Download it, open it, extract its files
to some temporary deployment directory, and invoke `install.bat` from there,
or `install-portable.bat` for a portable installation.
#### Installation from source repository #### #### Installation from source repository ####
Checkout the wsltty repository, or download the source archive, unpack and rename the directory to `wsltty`. Checkout the wsltty repository, or download the source archive, unpack and rename the directory to `wsltty`.
Invoke `make`, then `make install`. Install Alpine WSL from the Microsoft Store.
Note this has to be done within a Cygwin environment. Invoke `make build`, then `make install`.
Note this has to be done within a Cygwin environment. A minimal Cygwin
environment for this purpose would be installed with the
[Cygwin installer](https://cygwin.com/setup-x86_64.exe)
from [cygwin.com](https://cygwin.com/),
with additional packages `make`, `gcc-g++`, `unzip`, `zoo`, `patch`, (`lcab`).
#### Installation to non-default locations #### #### Installation to non-default locations ####
@@ -50,19 +75,28 @@ the optional second parameter designates the configuration directory.
### Installation with other package management environments ### ### Installation with other package management environments ###
Note that these are 3rd-party contributions and do not necessarily Note: These are 3rd-party packages, not managed by this repository.
provide the latest version.
#### Windows Package Manager ####
([Check package](https://github.com/microsoft/winget-pkgs/tree/master/manifests/m/Mintty/WSLtty))
To install wsltty from the
[Windows Package Manager Community Repository](https://github.com/microsoft/winget-pkgs),
invoke one of
* `winget install wsltty`
* `winget upgrade wsltty`
#### Chocolatey #### #### Chocolatey ####
([Check package](https://community.chocolatey.org/packages/wsltty))
If you use the [Chocolatey package manager](https://chocolatey.org/), If you use the [Chocolatey package manager](https://chocolatey.org/),
invoke one of invoke one of
<img height=222 align=right src=https://github.com/mintty/wsltty.appx/raw/master/wsltty.appx.png>
* `choco install wsltty` * `choco install wsltty`
* `choco upgrade wsltty` * `choco upgrade wsltty`
#### Scoop #### #### Scoop ####
([Check package](https://scoop.sh/#/apps?q=wsltty))
If you use the [Scoop package manager](https://scoop.sh/), If you use the [Scoop package manager](https://scoop.sh/),
* `scoop bucket add extras` * `scoop bucket add extras`
@@ -70,11 +104,12 @@ then, invoke one of
* `scoop install wsltty` * `scoop install wsltty`
* `scoop update wsltty` * `scoop update wsltty`
#### Windows Appx package #### ### Uninstallation ###
A Windows Appx package and certificate is available in the [wsltty.appx](https://github.com/mintty/wsltty.appx/) repository. To uninstall wsltty desktop, start menu, and context menu integration:
Open a Windows `cmd`, go into the wsltty installation folder:
<br clear=all> `cd %LOCALAPPDATA%\wsltty` and run the `uninstall` script.
To uninstall wsltty software completely, remove the installation folder manually.
--- ---
@@ -82,7 +117,7 @@ A Windows Appx package and certificate is available in the [wsltty.appx](https:/
WSLtty can be invoked with WSLtty can be invoked with
* installed Start Menu shortcuts (or Desktop shortcuts if copied there) * installed Start Menu shortcuts (or Desktop shortcuts if copied there)
* *.bat scripts (optionally with WSL command as parameters) * *.bat scripts (optionally with WSL command as parameters) (see [Command line scripts](#command-line-scripts-wslbat) below)
* Explorer context menu (if installed from the Start Menu `WSLtty` subfolder) * Explorer context menu (if installed from the Start Menu `WSLtty` subfolder)
Starting the mintty terminal directly from the WSLtty installation location Starting the mintty terminal directly from the WSLtty installation location
@@ -105,6 +140,21 @@ If wsltty fails with an error message that mentions a disk mount path (e.g. `/mn
workarounds may be the shutdown of the WSL V2 virtual machine (`wsl --shutdown` on the distro) workarounds may be the shutdown of the WSL V2 virtual machine (`wsl --shutdown` on the distro)
or turning off “fast startup” in the Windows power settings (#246, #248). or turning off “fast startup” in the Windows power settings (#246, #248).
#### WSL shell starting issues ####
With WSL V2, an additional background shell is run which may cause trouble
for example when setting up automatic interaction between Windows side and
WSL side
(see https://github.com/mintty/wsltty/issues/197#issuecomment-687030527).
As a workaround, the following may be added to (the beginning of) the
WSL shell initialization script `.bashrc` (adapt for other shells):
```
# work around https://github.com/mintty/wsltty/issues/197
if [[ -n "$WSL_DISTRO_NAME" ]]; then
command -v cmd.exe > /dev/null || exit
fi
```
--- ---
### Configuration ### ### Configuration ###
@@ -112,7 +162,7 @@ or turning off “fast startup” in the Windows power settings (#246, #248).
#### Start Menu and Desktop shortcuts #### #### Start Menu and Desktop shortcuts ####
In the Start Menu, the following shortcuts are installed: In the Start Menu, the following shortcuts are installed:
* Shortcut <img align=absmiddle height=40 src=tux1.png>`WSL Terminal` to start the default WSL distribution (as configured with the Windows tool `wslconfig`) * Shortcut <img align=absmiddle height=40 src=tux1.png>`WSL Terminal` to start the default WSL distribution (as configured with the Windows tool `wslconfig` or `wsl -s`)
* For each installed WSL distribution, for example `Ubuntu`, a shortcut like <img align=absmiddle height=40 src=ubuntu1.png>`Ubuntu Terminal` to start in the WSL user home * For each installed WSL distribution, for example `Ubuntu`, a shortcut like <img align=absmiddle height=40 src=ubuntu1.png>`Ubuntu Terminal` to start in the WSL user home
In the Start Menu subfolder WSLtty, the following additional shortcuts are installed: In the Start Menu subfolder WSLtty, the following additional shortcuts are installed:
@@ -120,7 +170,7 @@ In the Start Menu subfolder WSLtty, the following additional shortcuts are insta
* For each installed WSL distribution, for example `Ubuntu`, a shortcut like <img align=absmiddle height=40 src=ubuntu1.png>`Ubuntu Terminal %` to start in the Windows %USERPROFILE% home * For each installed WSL distribution, for example `Ubuntu`, a shortcut like <img align=absmiddle height=40 src=ubuntu1.png>`Ubuntu Terminal %` to start in the Windows %USERPROFILE% home
One Desktop shortcut is installed: One Desktop shortcut is installed:
* Shortcut <img align=absmiddle height=40 src=tux1.png>`WSL Terminal` to start the default WSL distribution (as configured with the Windows tool `wslconfig`) * Shortcut <img align=absmiddle height=40 src=tux1.png>`WSL Terminal` to start the default WSL distribution (as configured with the Windows tool `wslconfig` or `wsl -s`)
Other, distribution-specific shortcuts can be copied to the desktop Other, distribution-specific shortcuts can be copied to the desktop
from the Start Menu if desired. from the Start Menu if desired.
@@ -128,7 +178,7 @@ from the Start Menu if desired.
The Start menu folder WSLtty contains the link 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`. <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. This function is initially run when wsltty is installed.
If should be rerun after adding or removing WSL distributions, It should be rerun after adding or removing WSL distributions,
in order to create the respective set of shortcuts in the Start menu. in order to create the respective set of shortcuts in the Start menu.
#### Command line scripts `wsl*.bat` #### #### Command line scripts `wsl*.bat` ####
@@ -181,7 +231,7 @@ with the following precedence:
* `%LOCALAPPDATA%\wsltty\etc\minttyrc` (usage deprecated with wsltty) * `%LOCALAPPDATA%\wsltty\etc\minttyrc` (usage deprecated with wsltty)
Note: Note:
* `%APPDATA%\wsltty\config` is the new user configuration file location. * `%APPDATA%\wsltty\config` is the user configuration file location.
Further subdirectories of `%APPDATA%\wsltty` are used for language, Further subdirectories of `%APPDATA%\wsltty` are used for language,
themes, and sounds resource configuration. themes, and sounds resource configuration.
Note the distinction from `%LOCALAPPDATA%\wsltty` which is the default Note the distinction from `%LOCALAPPDATA%\wsltty` which is the default
@@ -193,7 +243,21 @@ Note:
root directory of the cygwin standalone installation hosting wsltty. root directory of the cygwin standalone installation hosting wsltty.
So `%HOME%` would mean `%LOCALAPPDATA%\wsltty\home\%USERNAME%`. So `%HOME%` would mean `%LOCALAPPDATA%\wsltty\home\%USERNAME%`.
If you define `HOME` at Windows level, this changes accordingly. If you define `HOME` at Windows level, this changes accordingly.
Note, however, that the WSL `HOME` is a completely different setting. Note, however, that the WSL `$HOME` is a completely different setting.
#### Emoji deployment ####
Mintty and the wsltty package do not bundle actual emoji graphics but
there are scripts to support easy download and deployment.
If you have another instance of mintty installed (e.g. in cygwin)
and have emojis deployed already in the common config folder
`%APPDATA%\mintty\emojis`, they will be reused by wsltty.
To deploy emojis standalone for wsltty, use the scripts installed in
`%APPDATA%\wsltty\emojis` within WSL:
* `cd $(wslpath "$APPDATA/wsltty/emojis")`
* `getemojis` to provide emoji graphics as listed by Unicode.org
* `getflags` to provide emoji flag graphics (extending Unicode dynamically) from various sources
#### Shell selection and Login shell #### #### Shell selection and Login shell ####
@@ -211,6 +275,24 @@ a shell pathname and an optional `-l` parameter
--- ---
### WSL locale setup and character encoding ###
Character encoding setup by locale setting is propagated from the terminal
towards WSL. So you can select your favourite locale with configuration
options or with command-line options, for example in a copied dedicated
desktop shortcut.
If for example you wish to run WSL in GB18030 encoding, you may set options
`Locale=zh_CN` and `Charset=GB18030` and the WSL shell will adopt that
setting, provided that the selected locale is configured to be available
in the locale database of the WSL distribution.
This can be achieved in Ubuntu with the following commands:
* `sudo mkdir -p /var/lib/locales/supported.d`
* `sudo echo zh_CN.GB18030 GB18030 >> /var/lib/locales/supported.d/local`
* `sudo locale-gen`
---
### Components and Credits ### ### Components and Credits ###
For mintty, see the [Mintty homepage](http://mintty.github.io/) For mintty, see the [Mintty homepage](http://mintty.github.io/)

View File

@@ -1 +1 @@
3.2.0 3.6.5

31
appveyor.yml Normal file
View File

@@ -0,0 +1,31 @@
# This file is part of wsltty project
# Build image; of course wsltty has nothing to do with Visual Studio -
# this is just the name of Appveyor's build environment image
# that also contains cygwin
image: Visual Studio 2022
# Version format
version: "#{build}"
# Do not increment build number after pull requests
pull_requests:
do_not_increment_build_number: true
# Do not start a new build when a new Git tag is created
skip_tags: true
init:
- cmd: |
set PATH=C:\cygwin64;C:\cygwin64\bin;%windir%\System32
setup-x86_64 -q -P unzip -P zoo -P patch -P lcab
winget install Alpine
build_script:
- cmd: |
make
test_script:
- cmd: |
bin\mintty.exe --log mintty.log --exec echo hello mintty
grep echo mintty.log

View File

@@ -14,10 +14,10 @@ copy () {
} }
delete () { delete () {
from=/F from="$1"
to="$1" to="$1" # same again, to fill parameter
export from to export from to
cmd /c cmd2.bat del cmd /c cmd2.bat del/F
} }
compare () { compare () {
@@ -291,7 +291,16 @@ config () {
echoc "- root $root" echoc "- root $root"
wdir=%USERPROFILE% wdir=%USERPROFILE%
if $ok && [ -n "$distro" ] case "$name" in
docker*) echo skipping docker system
return;;
esac
case "$root" in
*\\Docker*) echo skipping docker system
return;;
esac
if $ok && ! $remove && [ -n "$distro" ]
then # fix #163: backend missing +x with certain mount options then # fix #163: backend missing +x with certain mount options
echo Setting +x wslbridge2 backends for distro "'$distro'" echo Setting +x wslbridge2 backends for distro "'$distro'"
(cd "$INSTDIR"; cd bin; PATH="${WINDIR}/Sysnative:${PATH}" wsl.exe -d "$distro" chmod +x wslbridge2-backend) (cd "$INSTDIR"; cd bin; PATH="${WINDIR}/Sysnative:${PATH}" wsl.exe -d "$distro" chmod +x wslbridge2-backend)

27
install-portable.bat Executable file
View File

@@ -0,0 +1,27 @@
@echo off
set sel="Select folder to place installation of portable wsltty"
for /f "usebackq delims=" %%f in (`powershell "(new-object -COM Shell.Application).BrowseForFolder(0, '%sel%', 0, 0).self.path"`) do set f=%%f
set instdir=%f%\wsltty
if "%f%"=="" (
echo no installation
exit
) else if not exist "%f%" (
echo invalid installation folder %instdir%
exit
)
call install "%instdir%" "%instdir%" /P
rem create shortcut
cd /D "%instdir%"
set instpath=%instdir:~2%
set target=%%COMSPEC%%
set minttyargs=/C bin\mintty.exe --WSL= --icon=/wsl.ico --configdir=. -~
set bridgeargs= -
set wdir=%instpath%
set icon=%instpath%\wsl.ico
cscript /nologo mkshortcut.vbs "/name:WSL Terminal Portable"

View File

@@ -1,9 +1,9 @@
@echo off @echo off
set refinstalldir=%%LOCALAPPDATA%%\wsltty set refinstalldir=%%LOCALAPPDATA%%\wsltty
set installdir="%LOCALAPPDATA%\wsltty"
set refconfigdir=%%APPDATA%%\wsltty set refconfigdir=%%APPDATA%%\wsltty
set configdir="%APPDATA%\wsltty" if "%installdir%" == "" set installdir="%LOCALAPPDATA%\wsltty"
if "%configdir%" == "" set configdir="%APPDATA%\wsltty"
call dequote installdir call dequote installdir
call dequote configdir call dequote configdir
set oldroot="%installdir%" set oldroot="%installdir%"
@@ -71,7 +71,7 @@ rem copy cygpopt-0.dll "%installdir%"\bin
rem copy cygiconv-2.dll "%installdir%"\bin rem copy cygiconv-2.dll "%installdir%"\bin
rem copy cygintl-8.dll "%installdir%"\bin rem copy cygintl-8.dll "%installdir%"\bin
rem create system config directory and copy config archive rem create system config directory and copy config archive and scripts
mkdir "%installdir%\usr\share\mintty\lang" 2> nul: mkdir "%installdir%\usr\share\mintty\lang" 2> nul:
copy lang.zoo "%installdir%\usr\share\mintty\lang" copy lang.zoo "%installdir%\usr\share\mintty\lang"
mkdir "%installdir%\usr\share\mintty\themes" 2> nul: mkdir "%installdir%\usr\share\mintty\themes" 2> nul:
@@ -83,6 +83,9 @@ copy charnames.txt "%installdir%\usr\share\mintty\info"
mkdir "%installdir%\usr\share\mintty\icon" 2> nul: mkdir "%installdir%\usr\share\mintty\icon" 2> nul:
copy tux.ico "%installdir%\usr\share\mintty\icon" copy tux.ico "%installdir%\usr\share\mintty\icon"
copy mintty.ico "%installdir%\usr\share\mintty\icon" copy mintty.ico "%installdir%\usr\share\mintty\icon"
mkdir "%installdir%\usr\share\mintty\emojis" 2> nul:
copy getemojis "%installdir%\usr\share\mintty\emojis" 2> nul:
copy getflags "%installdir%\usr\share\mintty\emojis" 2> nul:
rem create Start Menu Folder rem create Start Menu Folder
@@ -131,17 +134,25 @@ rmdir "%oldroot%\home" 2> nul:
:userconfig :userconfig
rem create user config directory and subfolders rem create user config directory and subfolders, copy scripts
mkdir "%configdir%\lang" 2> nul: mkdir "%configdir%\lang" 2> nul:
mkdir "%configdir%\themes" 2> nul: mkdir "%configdir%\themes" 2> nul:
mkdir "%configdir%\sounds" 2> nul: mkdir "%configdir%\sounds" 2> nul:
mkdir "%configdir%\emojis" 2> nul:
copy "%installdir%\usr\share\mintty\emojis\getemojis" "%configdir%\emojis" 2> nul:
copy "%installdir%\usr\share\mintty\emojis\getflags" "%configdir%\emojis" 2> nul:
rem create config file if it does not yet exist 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" if exist "%configdir%\config" goto appconfig
echo # To use common configuration in %%APPDATA%%\mintty, simply remove this file>"%configdir%\config"
if "%3" == "/P" echo # Do not remove this file for WSLtty Portable>>"%configdir%\config"
:appconfig :appconfig
rem skip configuration for WSLtty Portable
if "%3" == "/P" goto end
rem distro-specific stuff: shortcuts and launch scripts rem distro-specific stuff: shortcuts and launch scripts
cd /D "%installdir%" cd /D "%installdir%"
echo Configuring for WSL distributions echo Configuring for WSL distributions

169
makefile
View File

@@ -4,25 +4,51 @@
# make targets: # make targets:
# make [all] build a distributable installer (default) # make [all] build a distributable installer (default)
# make pkg build an installer, bypassing the system checks # make pkg build an installer, bypassing the system checks
# make build build the software (no installer)
# make install install wsltty locally from build (no installer needed)
# make wsltty build the software, using the local copy of mintty # make wsltty build the software, using the local copy of mintty
# wsltty release # wsltty release
ver=3.2.0 ver=3.6.5
# wsltty appx release - must have 4 parts! # wsltty appx release - must have 4 parts!
verx=3.2.0.0 verx=3.6.5.1
##############################
# mintty release version # mintty release version
minttyver=3.2.0
# wslbridge2 release version minttyver=3.6.5
#repo=Biswa96/wslbridge2
#wslbridgever=0.5 ##############################
# wslbridge2 repository
repo=Biswa96/wslbridge2
# wslbridge2 master release version
wslbridgever=0.11
# wslbridge2 latest version
#archive=master
#wslbridgedir=wslbridge2-$(archive)
# wslbridge2 branch or commit version (from fix-window-resize branch) and dir
#commit=70e0dcea1db122d076ce1578f2a45280cc92d09f
#commit=8b6dd7ee2b3102d72248990c21764c5cf86c6612
#archive=$(commit)
#wslbridgedir=wslbridge2-$(archive)
# wslbridge2 fork repository and version
#repo=mintty/wslbridge2
#wslbridgever=0.5.1
# wslbridge2 release or fork archive and dir
archive=v$(wslbridgever)
wslbridgedir=wslbridge2-$(wslbridgever)
repo=mintty/wslbridge2
wslbridgever=0.5.1
############################## ##############################
@@ -108,7 +134,7 @@ fix-verx:
# clear binaries # clear binaries
clean: clean:
rm -fr wslbridge2-$(wslbridgever)/bin rm -fr $(wslbridgedir)/bin
rm -fr bin rm -fr bin
############################################################################# #############################################################################
@@ -116,20 +142,26 @@ clean:
wslbridge: $(wslbridge) wslbridge: $(wslbridge)
wslbridge2-$(wslbridgever).zip: $(wslbridgedir).zip:
$(wgeto) https://github.com/$(repo)/archive/v$(wslbridgever).zip -o wslbridge2-$(wslbridgever).zip $(wgeto) https://github.com/$(repo)/archive/$(archive).zip -o $(wslbridgedir).zip
wslbridge-source: wslbridge2-$(wslbridgever).zip wslbridge-source: $(wslbridgedir).zip
unzip -ou wslbridge2-$(wslbridgever).zip unzip -o $(wslbridgedir).zip
cp wslbridge2-$(wslbridgever)/LICENSE LICENSE.wslbridge2 cp $(wslbridgedir)/LICENSE LICENSE.wslbridge2
# the following two patches are obsolete with wslbridge2 v0.9
# patch to fix #220
# test case in mintty: (sleep 0.1; echo -e "\e[31;80t") & wslbridge2
#cd $(wslbridgedir); patch -p1 < ../0001-notify-size-change-inband.patch
# patch to https://github.com/Biswa96/wslbridge2/commit/41575379b416703c49e2687e957440239a4cdfb7
#cd $(wslbridgedir); patch -p0 < ../0002-add-com-for-lifted-wsl.patch
wslbridge-frontend: wslbridge-source wslbridge-frontend: wslbridge-source
echo ------------- Compiling wslbridge2 frontend echo ------------- Compiling wslbridge2 frontend
mkdir -p bin mkdir -p bin
# frontend build # frontend build
cd wslbridge2-$(wslbridgever)/src; make -f Makefile.frontend RELEASE=1 cd $(wslbridgedir)/src; make -f Makefile.frontend RELEASE=1
# extract binaries # extract binaries
cp wslbridge2-$(wslbridgever)/bin/wslbridge2.exe bin/ cp $(wslbridgedir)/bin/wslbridge2.exe bin/
windir=$(shell cd "${WINDIR}"; pwd) windir=$(shell cd "${WINDIR}"; pwd)
@@ -140,9 +172,9 @@ wslbridge-backend: wslbridge-source
# provide dependencies for backend build # provide dependencies for backend build
PATH="$(windir)/Sysnative:${PATH}" cmd /C wsl.exe -u root $(BuildDistr) $(shell env | grep http_proxy=) apk add make g++ linux-headers < /dev/null PATH="$(windir)/Sysnative:${PATH}" cmd /C wsl.exe -u root $(BuildDistr) $(shell env | grep http_proxy=) apk add make g++ linux-headers < /dev/null
# invoke backend build # invoke backend build
cd wslbridge2-$(wslbridgever)/src; PATH="$(windir)/Sysnative:${PATH}" cmd /C wsl.exe $(BuildDistr) make -f Makefile.backend RELEASE=1 < /dev/null cd $(wslbridgedir)/src; PATH="$(windir)/Sysnative:${PATH}" cmd /C wsl.exe $(BuildDistr) make -f Makefile.backend RELEASE=1 < /dev/null
# extract binaries # extract binaries
cp wslbridge2-$(wslbridgever)/bin/wslbridge2-backend bin/ cp $(wslbridgedir)/bin/wslbridge2-backend bin/
mintty-get: mintty-get:
$(wgeto) https://github.com/mintty/mintty/archive/$(minttyver).zip -o mintty-$(minttyver).zip $(wgeto) https://github.com/mintty/mintty/archive/$(minttyver).zip -o mintty-$(minttyver).zip
@@ -157,6 +189,7 @@ appxversion=VERSION_SUFFIX=" wsltty appx $(verx)" WSLTTY_VERSION="$(verx)"
mintty-build: mintty-build:
# ensure rebuild of version-specific check and message # ensure rebuild of version-specific check and message
rm -f mintty-$(minttyver)/bin/*/windialog.o rm -f mintty-$(minttyver)/bin/*/windialog.o
rm -f mintty-$(minttyver)/bin/*/winmain.o
# build mintty # build mintty
cd mintty-$(minttyver)/src; make $(wslbuild) $(wslversion) cd mintty-$(minttyver)/src; make $(wslbuild) $(wslversion)
mkdir -p bin mkdir -p bin
@@ -183,7 +216,7 @@ mintty-pkg:
mintty-appx: mintty-appx:
mkdir -p usr/share/mintty mkdir -p usr/share/mintty
cd usr/share/mintty; mkdir -p lang themes sounds info cd usr/share/mintty; mkdir -p lang themes sounds info emojis
cp mintty-$(minttyver)/lang/*.po usr/share/mintty/lang/ cp mintty-$(minttyver)/lang/*.po usr/share/mintty/lang/
cp mintty-$(minttyver)/themes/*[!~] usr/share/mintty/themes/ 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/
@@ -191,6 +224,7 @@ mintty-appx:
# add charnames.txt to support "Character Info" # add charnames.txt to support "Character Info"
cd mintty-$(minttyver)/src; sh ./mknames cd mintty-$(minttyver)/src; sh ./mknames
cp mintty-$(minttyver)/src/charnames.txt usr/share/mintty/info/ cp mintty-$(minttyver)/src/charnames.txt usr/share/mintty/info/
cp /usr/share/mintty/emojis/get*[!~] usr/share/mintty/emojis/
cygwin: # mkshortcutexe cygwin: # mkshortcutexe
mkdir -p bin mkdir -p bin
@@ -214,39 +248,71 @@ appx-bin:
cp /bin/cygwin1.dll bin/ cp /bin/cygwin1.dll bin/
cp /bin/cygwin-console-helper.exe bin/ cp /bin/cygwin-console-helper.exe bin/
cop: ver CAB=wsltty-$(ver)-$(arch)
mkdir -p rel
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/
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/wslbridge2.exe rel/
cp bin/wslbridge2-backend rel/
cp mkshortcut.vbs rel/
#cp bin/mkshortcut.exe rel/
#cp bin/cygpopt-0.dll rel/
#cp bin/cygiconv-2.dll rel/
#cp bin/cygintl-8.dll 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 copcab: ver
mkdir -p $(CAB)
cp bin/cygwin1.dll $(CAB)/
cp bin/cygwin-console-helper.exe $(CAB)/
cp bin/dash.exe $(CAB)/
cp bin/regtool.exe $(CAB)/
cp bin/mintty.exe $(CAB)/
cp bin/zoo.exe $(CAB)/
cp lang.zoo $(CAB)/
cp themes.zoo $(CAB)/
cp sounds.zoo $(CAB)/
cp charnames.txt $(CAB)/
cp bin/wslbridge2.exe $(CAB)/
cp bin/wslbridge2-backend $(CAB)/
cp mkshortcut.vbs $(CAB)/
#cp bin/mkshortcut.exe $(CAB)/
#cp bin/cygpopt-0.dll $(CAB)/
#cp bin/cygiconv-2.dll $(CAB)/
#cp bin/cygintl-8.dll $(CAB)/
cp LICENSE.* $(CAB)/
cp VERSION $(CAB)/
cp *.lnk $(CAB)/
cp *.ico $(CAB)/
cp *.url $(CAB)/
cp *.bat $(CAB)/
cp config-distros.sh $(CAB)/
cp mkshortcut.vbs $(CAB)/
cp mintty-$(minttyver)/tools/get*[!~] $(CAB)/
cop: copcab
mkdir -p rel
cp -fl $(CAB)/* rel/
installer: cop cab normal-installer silent-installer portable-installer
cab:
# build cab archive
lcab -r $(CAB) rel/$(CAB).cab
normal-installer:
# prepare build of installer
rm -f rel/$(CAB)-install.exe
sed -e "s,%version%,$(ver)," -e "s,%arch%,$(arch)," makewinx.cfg > rel/wsltty.SED
# build installer
cd rel; iexpress /n wsltty.SED cd rel; iexpress /n wsltty.SED
silent-installer:
# prepare build of installer
rm -f rel/$(CAB)-install-quiet.exe
cd rel; sed -e "/ShowInstallProgramWindow/ s/0/1/" -e "/HideExtractAnimation/ s/0/1/" -e "/InstallPrompt/ s/=.*/=/" -e "/FinishMessage/ s/=.*/=/" -e "/TargetName/ s/install.exe/install-quiet.exe/" wsltty.SED > wsltty-quiet.SED
# build installer
cd rel; iexpress /n wsltty-quiet.SED
InstallPrompt=Install Mintty terminal for WSL Portable?
FinishMessage=Mintty for WSL Portable installation finished
portable-installer:
# prepare build of installer
rm -f rel/$(CAB)-install-portable.exe
cd rel; sed -e "/InstallPrompt/ s/=.*/=$(InstallPrompt)/" -e "/FinishMessage/ s/=.*/=$(FinishMessage)/" -e "/AppLaunched/ s/install/install-portable/" -e "/TargetName/ s/install.exe/install-portable.exe/" wsltty.SED > wsltty-portable.SED
# build installer
cd rel; iexpress /n wsltty-portable.SED
install: cop installbat install: cop installbat
installbat: installbat:
@@ -262,8 +328,11 @@ mintty-usr: mintty-get mintty-appx
# local wsltty build target: # local wsltty build target:
wsltty: wslbridge cygwin mintty-build mintty-pkg wsltty: wslbridge cygwin mintty-build mintty-pkg
# build software without installer:
build: wslbridge cygwin mintty-get mintty-build mintty-pkg
# standalone wsltty package build target: # standalone wsltty package build target:
pkg: wslbridge cygwin mintty-get mintty-build mintty-pkg cab pkg: wslbridge cygwin mintty-get mintty-build mintty-pkg installer
# appx package contents target: # appx package contents target:
wsltty-appx: wslbridge appx-bin mintty-get mintty-build-appx mintty-appx wsltty-appx: wslbridge appx-bin mintty-get mintty-build-appx mintty-appx

View File

@@ -26,7 +26,7 @@ SourceFiles=SourceFiles
InstallPrompt=Install Mintty terminal for WSL (Windows Subsystem for Linux)? InstallPrompt=Install Mintty terminal for WSL (Windows Subsystem for Linux)?
DisplayLicense= DisplayLicense=
FinishMessage=Mintty for WSL installed - for documentation and configuration 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-%arch%.exe TargetName=wsltty-%version%-%arch%-install.exe
FriendlyName=wsltty FriendlyName=wsltty
AppLaunched=cmd.exe /c install.bat AppLaunched=cmd.exe /c install.bat
PostInstallCmd=<None> PostInstallCmd=<None>
@@ -60,6 +60,9 @@ FILE24="mintty.ico"
FILE25="mkshortcut.vbs" FILE25="mkshortcut.vbs"
FILE26="dequote.bat" FILE26="dequote.bat"
FILE27="cmd2.bat" FILE27="cmd2.bat"
FILE28="install-portable.bat"
FILE29="getemojis"
FILE30="getflags"
[SourceFiles] [SourceFiles]
SourceFiles0=. SourceFiles0=.
@@ -93,4 +96,7 @@ SourceFiles0=.
%FILE25%= %FILE25%=
%FILE26%= %FILE26%=
%FILE27%= %FILE27%=
%FILE28%=
%FILE29%=
%FILE30%=