This howto explains how to build the MS Windows version of X2Go Client.
This howto explains how to build the 32-bit version of X2Go Client on MS Windows. If someone successfully attempts a 64-bit (which should work, but needs to be tested), please contribute to this wiki page.
This howto is intended for 2 different audiences:
The former audience has extra steps to do. These steps will be noted.
X2Go Client for Windows needs several 3rd-party programs for being able to run on MS Windows:
All these programs, as well as many of the libraries, can now be downloaded from x2goclient-contrib.git. Older versions are available from our server
They can also be built from source, or downloaded from their project sites. However, this howto only explains how to build nxproxy and OpenSSH.
You can also copy the 3rd-party components from X2Go Client installation (on MS Windows) directory.
For building X2Go Client, we highly recommend to install MSysGit and Notepad2. Any other editor that is capable of handling both UNIX- and Windows-style line endings and UTF-8 will do as well.
MSysGit provides a Unix-like shell (bash) environment, so that you can use Git easily from the command line.
For official X2Go project updates to x2goclient-contrib, use Cygwin. It handles symlinks differently.
Notepad2 is a freeware alternative to Notepad shipped with Microsoft Windows. Notepad2 understands UTF-8 text formats (and others) and can handle Unix-style line endings. In case you want to introspect a code file, this tool is very handy.
MinGW includes the GCC compiler suite for Windows. You need it to build X2Go Client.
Since X2Go Client 4.0.3.0, X2Go Client uses Qt 4.8.6 specifically. Qt 4.8.6 uses MinGW 4.8.x. Qt 4.8.6 for Windows recommends this specific build of MinGW, so it is this specific build that you should use.
Extract it to your disk (D:\i686-4.8.2-release-posix-dwarf-rt_v3-rev3\mingw32
in this example).
Finally, you have to add these MinGW executable directories to your PATH environment variable: D:\i686-4.8.2-release-posix-dwarf-rt_v3-rev3\mingw32\bin
, D:\i686-4.8.2-release-posix-dwarf-rt_v3-rev3\mingw32\libexec\gcc\i686-w64-mingw32\4.8.2
.
You need Qt to build X2Go Client from source.
Qt-4.8.6 is tested and recommended for X2Go Client 4.0.3.0 and later.
Download and install the MinGW version of Qt-4.8.6 for Windows from here
In this example D:\Qt\4.8.6 will be chosen as installation directory
As X2Go Client needs Qt built with SSL support you must install OpenSSL for MS Windows. OpenSSL depends on the Microsoft Visual C++ 2013 Redistributables. Get that (32-bit version, x86) from the Microsoft site and install it prior to installing OpenSSL.
Download the OpenSSL installer for Windows by browsing here and selecting “Win32 OpenSSL v1.0.1*” where “1.0.1*” s the current version. You can also download it from our site, but only do so if we have the current version. Install it on your build system (for example to directory d:\OpenSSL-Win32
).
After installation, copy OpenSSL header files into MinGW's include directory:
For MinGW 4.8:
d:\OpenSSL-Win32\include\openssl -> d:\i686-4.8.2-release-posix-dwarf-rt_v3-rev3\mingw32\i686-w64-mingw32\include\openssl
It is recommended to configure Qt to build statically linked applications.
This is how official X2Go Client builds are done.
It will take some time to reconfigure Qt for static builds. You surely can skip this step, but in this case you must provide Qt libraries with your X2Go Client binary.
Open Qt Command Prompt and start configuration script.
For Qt 4.8.6, the command needs extra args due to QTBUG-38706:
$ configure -release -static -openssl -qt-style-windowsxp -qt-style-windowsvista
Rebuild Qt:
$ make -j3 sub-src
If you choose to build dynamically linked applications with Qt, you still have to rebuild Qt in order to get OpenSSL support into Qt.
Open Qt Command Prompt and start configuration script.
For Qt 4.8.6, the command needs extra args due to QTBUG-38706:
$ configure -release -openssl -qt-style-windowsxp -qt-style-windowsvista
Rebuild Qt:
$ make -j3 sub-src
You need libssh to build X2Go Client.
X2Go Client 4.1.2.2 and later use libssh 0.9.x with pageant support.
Get the library package built with MinGW 4.8.x (currently 4.8.2) from x2goclient-contrib.git
Copy headers files in “include” directory of MinGW.
For MinGW 4.8:
x2goclient-contrib\libssh\0.6.3-762055b-pageant-support-mingw482_bin\include\libssh -> d:\i686-4.8.2-release-posix-dwarf-rt_v3-rev3\mingw32\i686-w64-mingw32\include\libssh
Copy library files in “lib” directory of MinGW
For MinGW 4.8:
x2goclient-contrib\libssh\0.6.3-762055b-pageant-support-mingw482_bin\lib\*.* -> d:\i686-4.8.2-release-posix-dwarf-rt_v3-rev3\mingw32\i686-w64-mingw32\lib\
If you want to rebuild the library (e.g., to backport fixes) or update it as part of the release process, follow these steps.
Download the tarball from the libssh website.
Unpack it as usually. The X2Go Project keeps libssh source code at D:\Build\libssh\
.
Adapt any required patches so that they apply cleanup, build and work correctly.
We currently patch libssh to include support for PuTTY's Pageant ssh agent.
To rebase patches, the X2Go Project uses the private git repository at D:\Build\libssh\libssh-git
:
git fetch origin
git checkout ... (e.g., libssh-0.9.3)
git branch ...-win32 (e.g., libssh-0.9.3-win32)
cherry-pick
command per commit to be ported: git cherry-pick ...-win32 (e.g., libssh-0.7.4-win32)
git format-patch HEAD~ (for one patch, use ~~ for two patches etc.)
Move the patches to the respective source directory and apply them in order.
If needed, install or update cmake
on the build machine.
Open a terminal window. Crucially, this must not be a Cygwin
instance.
Make sure that the MinGW toolchain that was used to build Qt (and will be used to build X2Go CLient later on) is part of the %PATH% variable. On the X2Go Windows Builder, a session spawned via cmd.exe
typically fulfills this requirement. Additionally, use the same zlib
version for building both Qt
and libssh
.
Go to the unpacked source directory:
D:; cd Build\libssh\libssh-...
Create and switch to a build subdirectory:
mkdir build; cd build
The pre-built libssh versions in x2goclient-contrib
contain a file called CMake-Show-My-Changes.txt
. Use this as a reference for building.
Call cmake
to configure the project, example (adapt to your system!):
"C:\Program Files\CMake\bin\cmake.exe" -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX:PATH="D:/Build/libssh/libssh-staging" -DCMAKE_C_COMPILER:FILEPATH="D:/i686-4.8.2-release-posix-dwarf-rt_v3-rev3/mingw32/bin/gcc.exe" -DCMAKE_LINKER:FILEPATH="D:/i686-4.8.2-release-posix-dwarf-rt_v3-rev3/mingw32/bin/ld.exe" -DZLIB_LIBRARY_RELEASE:FILEPATH="D:/x2goclient-contrib/zlib/1.2.8_bin/zlib1.dll" -DWITH_GSSAPI:BOOL="0" -DWITH_NACL:BOOL="0" -DCMAKE_BUILD_TYPE:STRING="Release" -DCMAKE_MAKE_PROGRAM:FILEPATH="D:/i686-4.8.2-release-posix-dwarf-rt_v3-rev3/mingw32/bin/mingw32-make.exe" -DWITH_EXAMPLES:BOOL="0" -DZLIB_INCLUDE_DIR:PATH="D:/Build/zlib/zlib-1.2.8/" -DLIB_EAY:FILEPATH="D:/OpenSSL-Win32/lib/MinGW/libeay32.a" -DSSL_EAY:FILEPATH="D:/OpenSSL-Win32/lib/MinGW/ssleay32.a" -DOPENSSL_INCLUDE_DIR:PATH="D:/OpenSSL-Win32/include" ..
Build the software like any other, append -j
and other flags as desired:
"D:\i686-4.8.2-release-posix-dwarf-rt_v3-rev3\mingw32\bin\mingw32-make.exe"
It's recommended to make sure that the install staging area is clean (fully deleted or at least empty) before installing/staging the built software.
This ensures that old/removed files won't linger around and that changes will not remain undetected.
rm -rf "D:\Build\libssh\libssh-staging" "D:\i686-4.8.2-release-posix-dwarf-rt_v3-rev3\mingw32\bin\mingw32-make.exe" install
Afterwards, clean and install the newly built files into the MinGW prefix:
Header files:
rm -rf "D:\i686-4.8.2-release-posix-dwarf-rt_v3-rev3\mingw32\i686-w64-mingw32\include\libssh" cp -av "D:\Build\libssh\libssh-staging\include\libssh" "D:\i686-4.8.2-release-posix-dwarf-rt_v3-rev3\mingw32\i686-w64-mingw32\include\libssh"
(dll).a
files can be static libraries that are being used as “DLL import libraries” on Windows. They do not actually contain the library contents but a mechanism for loading the shared DLL files at run time. This differs from the UNIX concept of the linker automatically generating (unresolved) symbols and ignoring them (if an eventual symbol scanning suceeds) that are automatically resolved at run time.
As such, it is important to keep these static DLL import libraries around on Windows, even if library is supposed to be used in a dynamically-linked fashion.
Library files:
for /R "D:\i686-4.8.2-release-posix-dwarf-rt_v3-rev3\mingw32\i686-w64-mingw32\lib\" %I in (libssh*) do rm -rf "%I" D: cd "D:\Build\libssh\libssh-staging\lib" for %I in (libssh*) do cp -av "%I" "D:\i686-4.8.2-release-posix-dwarf-rt_v3-rev3\mingw32\i686-w64-mingw32\lib\"
Afterwards, optionally bundle the new libssh source and binaries in x2goclient-contrib. Explicitly document the command line invocation in a file named CMake-Show-My-Changes.txt
.
Open Qt Command Prompt, change to your build directory and get X2Go Client sources from git
$ git clone git://code.x2go.org/x2goclient.git $ cd x2goclient
Generate the changelog, which x2goclient.exe –changelog will show:
$ copy debian\changelog txt\ $ git --no-pager log --since "2 years ago" --format="%ai %aN (%h) %n%n%x09*%w(68,0,10) %s%d%n" > ChangeLog.gitlog $ copy ChangeLog.gitlog txt\git-info
Build X2Go Client:
$ cd x2goclient $ PATH=%PATH%;D:\i686-4.8.2-release-posix-dwarf-rt_v3-rev3\mingw32\bin\ $ config_win.bat $ cd client_build $ mingw32-make $ cd .. $ cd x2gohelper $ mingw32-make $ cd ..
X2Go Client binaries (x2goclient.exe & x2gohelper.exe) are in d:\build\x2goclient\release\ directory.
Repeat the instructions for “Build X2Go Client from source”, except
CreateShortCut "$INSTDIR\X2Go Client.lnk" "$INSTDIR\x2goclient.exe" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\X2Go Client.lnk" "$INSTDIR\x2goclient.exe" CreateShortCut "$DESKTOP\X2Go Client.lnk" "$INSTDIR\x2goclient.exe"
Are replaced with the following:
CreateShortCut "$INSTDIR\X2Go Client.lnk" "$INSTDIR\x2goclient.exe" "--debug" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\X2Go Client.lnk" "$INSTDIR\x2goclient.exe" "--debug" CreateShortCut "$DESKTOP\X2Go Client.lnk" "$INSTDIR\x2goclient.exe" "--debug"
The 2 binaries to copy are:
x2goclient.exe
(from the client_build\release
folder)x2gohelper.exe
(from the client_build\release
folder)However, you must decide where you wish to copy them.
dist
folder. This is the folder where you will run them from.nsis\x2goclient
folder and copy them there.You may want to pack X2Go Client to reduce it size. You can do it with upx, which is available for Windows, Linux and Cygwin.
Official regular builds of X2Go Client are packed. Official debug builds of X2Go Client are not. There is no difference between nightly and release versions - both pack the release binary, while not packing the debug binary.
It is available in x2goclient-contrib.git. The current version is located at:
x2goclient-contrib\upx\3.95_bin\upx.exe
The 2 files to pack are:
x2goclient.exe
x2gohelper.exe
Building a new version nxproxy or OpenSSH is optional for non-official X2Go project builds.
Official X2Go project builds usually rebuild nxproxy and OpenSSH if there are desired updates to those components, or if the cygwin libraries have been updated.
Official X2Go project builds are kept under the x2goclient-contrib git repository under a folder like “cygwin\20160121-1_bin” (the latest cygwin libraries as of 2016-01-21) or “cygwin\20160121-2_bin” (the former, with selective updates). These are then copied over during the Jenkins build process.
Download and start the Cygwin 32-bit installer.
Choose your Cygwin directory. For example C:\cygwin. Follow installer instructions.
For the X2Go-WinBuilder VM, install to D:\cygwin.YYYY-MM-DD instead.
You can automate the entirety of the instructions below with this command, except for selecting the source packages to install:
$ setup-x86.exe -P "autoconf,automake,gcc-core,gcc-g++,git,libX11-devel,libjpeg-devel,libpng-devel,libmpfr4,make,zlib-devel,wget,libedit-devel,libncurses-devel,openssl-devel,patch,bashdb,bash-completion,chere,colorgcc,colordiff,diffutils,dos2unix,cygcheck-dep,cygutils-extra,indent,mc,renameutils,vim,git-completion,patchutils,openssh,xz,unzip,nano,bzip2,time,mkfontdir,mkfontscale"
on installer page “Select Packages” you can select programs and libraries that should be installed in your Cygwin environment. For building of nxproxy you will need:
autoconf
automake
gcc-core
gcc-g++
git
imake
libX11-devel
libjpeg-devel
libpng15-devel
(X2Go Client 4.0.3.x)libpng-devel
(X2Go Client 4.0.4.x+)libmpfr4
libtool
(nx-libs 3.6)make
zlib-devel
wget
libjpeg-devel
package, you are now installing libjpeg-turbo instead of IJG libjpeg. The same applies for the dependency libjpeg8
package, which provides the cygjpeg-8.dll file that you will copy later.
For building of OpenSSH Server, you will also need:
libedit-devel
libncurses-devel
openssl-devel
patch
For OpenSSH you should install both, binary and source packages. Toggle the “Src” checkbox beside the package name. Source package will be installed in /usr/src
directory in your Cygwin installation.
If you are updating the X2Go Windows build VM, X2Go-WinBuilder, install these packages too:
bashdb
bash-completion
chere
colorgcc
colordiff
diffutils
dos2unix
cygcheck-dep
cygutils-extra
indent
mc
renameutils
vim
git-completion
patch
patchutils
openssh
xz
unzip
nano
bzip2
time
mkfontdir
mkfontscale
If you are doing official builds, install these source packages for both nxproxy and openssh:
dash
cygwin
gcc
(select source for: gcc-core
)libedit
(select source for: libedit0
)libjpeg-turbo
(select source for: libjpeg-devel
)libpng15
(select source for: libpng-devel
) (X2Go Client 4.0.3.x)libpng
(select source for: libpng-devel
) (X2Go Client 4.0.4.x+)ncurses
(select source for: libncurses-devel
)openssh
(source, but not binary)openssl
zlib
(select source for: zlib-devel
)X2Go Client for Windows is currently built with nxproxy 3.5.
D:\Build
will be used$ cd /cygdrive/d/Build
$ wget http://code.x2go.org/releases/source/nx-libs/nx-libs-3.5.0.27-lite.tar.gz $ tar -xvzf nx-libs-3.5.0.27-lite.tar.gz $ cd nx-libs-3.5.0.27
Fix building with libpng15 (X2Go Client 4.0.3.x):
diff --git a/Pgn.cpp.orig b/Pgn.cpp index cdcde84..1f56787 100644 --- a/nxcomp/Pgn.cpp.orig +++ b/nxcomp/Pgn.cpp @@ -28,7 +28,7 @@ #endif #include <unistd.h> #include <stdio.h> -#include <png.h> +#include <libpng15/png.h> #include "Unpack.h" #include "Pgn.h"
diff --git a/configure.in.orig b/configure.in index 6fa9757..b0699bb 100644 --- a/nxcomp/configure.in.orig +++ b/nxcomp/configure.in @@ -385,7 +385,7 @@ AC_SUBST(ALL) if test "$CYGWIN32" = yes; then ALL="\$(LIBCYGARCHIVE) \$(LIBCYGSHARED) \$(LIBARCHIVE)" - LIBS="-lstdc++ -lpng -ljpeg -lz" + LIBS="-lstdc++ -lpng15 -ljpeg -lz" else ALL="\$(LIBFULL) \$(LIBLOAD) \$(LIBSHARED) \$(LIBARCHIVE)" fi
diff --git a/nxproxy/configure.in.orig b/nxproxy/configure.in index b86828d..5858b36 100644 --- a/nxproxy/configure.in.orig +++ b/nxproxy/configure.in @@ -159,7 +159,7 @@ dnl GCC 3.3.x requires also the z, png and jpeg libraries. This is dnl not true anymore since GCC 3.4.x. if test "$CYGWIN32" = yes; then - LIBS="$LIBS -L../nxcomp -lXcomp -lstdc++ -Wl,-e,_mainCRTStartup -ljpeg -lpng -lz" + LIBS="$LIBS -L../nxcomp -lXcomp -lstdc++ -Wl,-e,_mainCRTStartup -ljpeg -lpng15 -lz" else LIBS="$LIBS -L../nxcomp -lXcomp" fi
$ cd nxcomp $ autoconf $ ./configure $ make $ cd ..
$ cd nxproxy $ autoconf $ ./configure $ make $ cp -p nxproxy.exe nxproxy.exe.unstripped $ strip nxproxy.exe $ cd ..
D:\Build
will be used$ cd /cygdrive/d/Build
git clone https://github.com/ArcticaProject/nx-libs.git cd nx-libs git checkout 3.6.x
$ cd nxcomp $ autoreconf -vfi $ ./configure $ make $ cd ..
$ cd nxproxy $ autreoconf -vfi $ ./configure $ make $ cp -p src/nxproxy.exe src/nxproxy.exe.unstripped $ strip src/nxproxy.exe $ cd ..
Now the nxproxy binary (nxproxy.exe) is ready. You can copy it into the program packaging folder (dist/
or nsis/x2goclient/
) of X2Go Client, or the x2goclient-contrib folder:
nxproxy
directory (D:\Build\nx-libs\nxproxy
) - nxproxy.exe
nxcomp
directory (D:\Build\nx-libs\nxcomp
) - cygXcomp.dll
nxproxy\src\.libs
directory (D:\Build\nx-libs\nxproxy\src\.libs
) - nxproxy.exe
nxcomp\src\.libs
directory (D:\Build\nx-libs\nxcomp\src\.libs
) - cygXcomp-3.dll
You must also copy required libraries into that folder.
C:\cygwin\bin
):cyggcc_s-1.dll
cygjpeg-8.dll
cygpng15-15.dll
(x2goclient 4.0.3.x)cygpng16-16.dll
(x2goclient 4.0.4.x+)cygstdc++-6.dll
cygwin1.dll
cygz.dll
If you wish to facilitate debugging, or if you are updating x2goclient-contrib, you should copy these files over also:
nxproxy
directory (D:\Build\nx-libs\nxproxy
) - nxproxy.exe.unstripped
nxcomp
directory (D:\Build\nx-libs\nxcomp
):libXcomp.dll.a
libXcomp.a
nxproxy\src
directory (D:\Build\nx-libs\nxproxy\src
) - nxproxy.exe.unstripped
nxcomp\src\.libs
directory (D:\Build\nx-libs\nxcomp\src\.libs
):libXcomp.dll.a
libXcomp.a
Copy the source folder (downloaded and extracted from a tarball by Cygwin) to your build directory. In this example D:\Build
will be used
$ cp -pr /usr/src/openssh-6.1.1p1-3-src /cygdrive/d/Build/
cd
to the openssh source directory, extract the upstream (openssh.com) tarball within, and cd
to the lower-level source directory
$ cd /cygdrive/d/Build/openssh-6.6.1p1-3 $ tar -xzvf openssh-6.6p1.tar.gz $ cd openssh-6.6p1
Apply any patches that Cygwin provides. For example, with 6.6p1-3:
$ patch < ../curve25519-sha256.patch
Get and apply the X2Go patch, which enables use of the Open SSH Server with X2Go Client
$ wget http://code.x2go.org/releases/source/openssh-cygwin/openssh-6.6p1-1.x2go.patch ../ $ patch.exe < ../openssh-6.6p1-1.x2go.patch
Build Open SSH Server
$ ./configure --libexecdir=/usr/sbin --with-libedit --with-xauth=/usr/bin/xauth --build=mingw32 $ make $ strip *.exe
Open SSH Server binaries are ready. You can copy it into the program packaging folder (dist/
or nsis/x2goclient/
) of X2Go Client, or the x2goclient-contrib folder:
sftp.exe
sftp-server.exe
ssh-keygen.exe
sshd.exe
For example:
$ cp --preserve=time sftp.exe sftp-server.exe ssh-keygen.exe sshd.exe /cygdrive/d/x2goclient-contrib/cygwin/20160121-1_bin/
To be able to run Open SSH Server you should also copy needed programs and libraries from the Cygwin directory (c:\cygwin\bin).
First, copy these files over without changing their filenames.
cygcrypto-1.0.0.dll
cygedit-0.dll
cyggcc_s-1.dll
cygncursesw-10.dll
cygssp-0.dll
cygwin1.dll
cygz.dll
For example:
$ cd /bin $ cp --preserve=time cygcrypto-1.0.0.dll cygedit-0.dll cyggcc_s-1.dll cygncursesw-10.dll cygssp-0.dll cygwin1.dll cygz.dll /cygdrive/d/x2goclient-contrib/cygwin/20160121-1_bin/
Then, copy the dash executable over and rename it:
ash.exe -> sh.exe
For example:
$ cp --preserve=time ash.exe /cygdrive/d/x2goclient-contrib/cygwin/20160121-1_bin/sh.exe
Some of these libraries are also used by nxproxy. Open SSH Server and nxproxy should be built using same version of Cygwin.
To make X2Go Client usable on Windows, all libraries and components must be in the some directory as where the 2 binaries are.
All of the files referenced below (except for the OpenSSL-Win32 library, which you installed previously) can be obtained from x2goclient-contrib.git on http://code.x2go.org
In the previous step, you chose either the dist
or nsis/x2goclient
folder. To this folder you have to add the following components:
You can then install all of them by using the copy-deps-win32.bat
script in the x2goclient source folder.
First, clone x2goclient-contrib.git on http://code.x2go.org if you haven't already done so.
Now run the script with the following arguments. In this example:
..\x2goclient-contrib
is the path to the x2goclient-contrib git repoD:\OpenSSL-Win32\
is the path to OpenSSL-Win32's installation folder (not the exact folder with the DLL's)dist
is the subfolder you wish to run x2goclient from$ cd x2goclient $ copy-deps-win32.bat ..\x2goclient-contrib D:\OpenSSL-Win32 dist
or to the nsis/x2goclient
folder
$ cd x2goclient $ copy-deps-win32.bat nsis\x2goclient
Follow the instructions for Scripted Copying.
However, at the end:
copy-deps-win32.bat
file to determine the location of the Cygwin bundle.copy nxproxy.exe.unstripped
to the dist
or release/x2goclient
folder.D:\i686-4.8.2-release-posix-dwarf-rt_v3-rev3\mingw32\bin
).libgcc_s_dw2-1.dll
libstdc++-6.dll
libwinpthread-1.dll
libeay32.dll
ssleay32.dll
libssh.dll
zlib1.dll
msvcp120.dll
msvcr120.dll.dll
vccorlib120.dll
The latest version is available in x2goclient-contrib.git under the cygwin
folder. This includes its libraries.
You can download older versions, including their libraries, from here here.
Follow the instructions above for nxproxy.
Except at the end, replace nxproxy.exe with nxproxy.exe.unstripped.
Older builds do not have nxproxy.exe.unstripped; that is a limitation of X2Go's old build process.
X2Go Client for Windows uses a modified Cygwin OpenSSH Server for file sharing.
The latest version is available in x2goclient-contrib.git under the cygwin
folder.
You can download older versions from here.
PulseAudio for Windows 6.0 is used by X2Go Client 4.0.4.x and it is available in x2goclient-contrib.git under the pulse folder.
PulseAudio for Windows 5.0 is used by X2Go Client 4.0.3.x and it is available in x2goclient-contrib.git under the pulse folder.
You can download older Windows builds here here.
Note that the files must be installed to the pulse
subfolder of dist
or nsis/x2goclient
.
Even older Windows builds are available from the PulseAudio project site and the above link.
The latest version is available in x2goclient-contrib.git under the VcXsrv folder.
You can download older versions, modified by the X2Go project, (VcXsrv - XP Compatible), here: http://code.x2go.org/releases/binary-win32/3rd-party/vcxsrv-modified-by-x2go-project/.
Note that the files must be installed to the VcXsrv
subfolder of dist
or nsis/x2goclient
.
Building VcXsrv from source is not the part of this howto. However, it is documented in the source repo.
All official X2Go Project builds use the 32-bit builds of VcXsrv. 64-bit builds are probably compatible with the 32-bit X2Go Client, but have not been tested. Furthermore, the XP compatible builds are only offered in 32-bit.
If you do install VcXsrv via the setup installer, and you are building X2Go Client 4.0.3.x or later, select to install the fonts. They will be an optional component of X2Go Client for Windows in its installer.
If you do install VcXsrv via the setup installer, and you are building X2Go Client 4.0.2.1, deselect to install the fonts. They would more than double the size of the X2Go NSIS installer. Some legacy apps do need them, and users can install them if they'd like.
Also, if you are doing an official X2Go Project build, remove these files that X2Go Client does not need and would take up extra space:
iconv.dll
libiconv-2.dll
libgcc-s-sjlj-1.dll
libwinpthread-1.dll
libxml2.dll
libxml2-2.dll
plink.exe
uninstall.exe
xauth.exe
XCalc
xcalc.exe
XCalc-color
XClock
xclock.exe
XClock-color
xhost.exe
xlaunch.exe
xrdb.exe
xwininfo.exe
Also, if you are doing an official X2Go Project build, before importing it into x2goclient-contrib, remove the timestamps from the .gz
files.
Using Debian's strip-nondeterminism (a perl script that calls a perl library, both of which can be extracted from their deb's & run fine under Cygwin):
$ cd /cygdrive/c/x2gobuilds/x2goclient-contrib/VcXsrv/1.20.1.4_bin/fonts $ find . -iname '*.gz' -exec strip-nondeterminism '{}' ';'
If you are doing an official X2Go Project build, create this file in the VcXsrv folder:
vcxsrv-version.txt
And specify the version string of VcXsrv in it. The version string should be the only content of that file. For example:
1.15.2.3+xp-vc2013+x2go1
If you are doing an official X2Go Project build, copy the project's COPYING file as:
COPYING.txt
For IBM x3270 compatibility, a special set of fonts is necessary. Official builds use the version shipped in the x3270-fonts
subdirectory of x2goclient-contrib.
Note that versions prior to 3.6 are classified non-free by major distributions due to their custom, restrictive license. Do not use and (re-)distribute older versions than 3.6 with X2Go Client.
x3270-fonts
directory.misc
.copyright-x3270-fonts
. Debian's copyright file is very well suited for this, but please remove content that is not relevant to the fonts themselves.strip-nondeterminism
script:$ find misc -iname '*.gz' -exec strip-nondeterminism '{}' ';'
$ cd .. $ ../generate-timestamps-on-folder.sh <new-versions-directory>
current-timestamp-scripts.sh
.You can download PuTTY for Windows from project site. Building PuTTY from source is not the part of this howto.
These are the only binaries you need from PuTTY. Copy them directly into the dist/
or nsis/x2goclient
folder.
plink.exe
pscp.exe
Out of courtesy, we also ship the following additional, not strictly needed binaries:
pageant.exe
puttygen.exe
Install NSIS (currently, 3.05): https://nsis.sourceforge.io
Previously, we used NSIS Unicode, but this project is stale and NSIS 3.x nowadays supports Unicode.
Then, edit nsis/x2goclient.nsi
and replace all instances of X2GOCLIENT_VERSION
with the actual version, and any string at the end. For example, if you were doing a test build of fixing bug 123 on top of 4.0.3.2, use 4.0.3.2-bug123
as the version string.
Then, open nsis\x2goclient.nsi
with NSIS. It will build an installer (*-setup.exe
) and put it into the same directory.
If you wish to build via the command-line, run:
$ "C:\Program Files (x86)\NSIS\makensis.exe" x2goclient.nsi
(Adjust path if on 32-bit Windows.)