Last updated: 4 March 2003 See here for the latest News
It is advisable to re-visit this page when building gnome on cygwin, or before reporting
any problems, to make sure you have the latest patches and hints.
If you have visited this page previously in MS Internet Explorer, you may have to hold
down the Control key while clicking the Refresh button to get the latest update.
This site is the result of a project to get the Gnome 1.4 desktop working on Windows,
using Cygwin as a porting tool and user environment. This project is now finished,
I am unlikely to do much more work on it; and although the port is far from complete
the following components are working/workable with NT/2K/XP on NTFS:
In addition, some applications have been compiled successfully with these libraries and are running on this desktop, including dillo, ee, ggv, ghex, gnome-pim, gnotepad+, gnumeric, sylpheed, and xchat. Note that these applications have not been updated or tested for some time, and may not all work with the latest cygwin gnome packages
Although performance will never approach linux, or even an apology for linux, it is still quite useable. That said, this is still beta quality with many rough edges. Volunteers to move this work forward are very welcome.
Lack of webspace, bandwidth, and resources mean that I can only publish source-code patches, not binaries. Therefore you will have to obtain the original sources and compile them yourself. Gnome is a very large package, and so this is only really suitable for people with experience with cygwin, cygwin-xfree86, and gnome.
Gnome: | http://www.gnome.org/ |
---|---|
Cygwin: | http://www.cygwin.com/ |
Gmp: | http://www.swox.com/gmp/ |
Sawfish (and librep/rep-gtk): | http://sawmill.sourceforge.net/ |
statically linked libs and apps: | http://www.geocities.co.jp/SiliconValley/1596/en/cygwin.html |
---|---|
screensavers and more: | http://lassauge.free.fr/cygwin/ |
This work was done on Windows 2000, but the patched sources should also build OK on NT and XP. The build has not yet been tested on Windows 9x/Me. The system builds and runs very well on my Windows 2000/NTFS laptop.
The patches do not attempt to deal with the text file/binary file issue. I keep all my gnome data files in unix format (\n line-endings) and all my mounts are in binary mode. Volunteers to extend this work in that direction are very welcome.
You will first need to install cygwin, including the cygwin-xfree86 packages. See the links at the top of this page for instructions and download information. Use a current release of Cygwin: I last did a build with version 1.3.20-1 of cygwin1.dll, with the full set of cygwin packages as updated on 1 March 2003. Note that gnome definitely does not work with cygwin release 1.3.13 to 1.3.15 inclusive, as these releases all have a fatal bug in their implementation of poll().
Download the Gnome sources from your favourite gnome mirror. You will generally find the
sources in the
For most packages, the default configure is sufficient. See the "Notes" column in the following Patches table for exceptions to this. I recommend that the Gnome packages are installed into a Gnome-specific root, such as /opt/gnome, rather than the default /usr/local, in order to simplify maintenance (as a last resort when you are having problems, at least then you have the option of rm -rf). Make sure that the "bin" directory of the install root of each package is in your PATH before you configure each package; also you need to have /usr/X11R6/bin in your PATH.
I have put together a single download file that contains all the patches and the script
that I use to automate the build. I strongly recommend that you use this automated build,
and accept all its default configuration, for your first attempt; this will give you the
best chance of success-first-time.
ben@thebeach ~/gnome $ find /usr/bin /usr/lib /usr/X11R6/bin /opt/gnome/bin /opt/gnome/lib -name "*.dll" -print | sed -e '/cygwin1.dll$/ d' > /tmp/dll.lst |
All the patches to build the basic gnome desktop are contained in the single .tar.bz2 file, together with a script to automate the configuration and build process:
cygwin-gnome-patches.tar.bz2 (108k) |
See the README file within the archive for instructions.
Alternatively, obtain individual patches from the following tables (use the right-mouse button and select "Save Target As").
Each package should be built and installed in the order given in these tables. The configure command given is the one that I use which "works for me" (tm). Try "CFLAGS=-g" for debugging; or use configure --help to find other options.
You should at least read the files INSTALL and README in each package for special instructions.
Package | Patch File | Notes |
---|---|---|
cygextras-0.3.3 | cygextras-0.3.3.tar.bz2 | cygextras is a dll containing various functions required by Gnome modules
but missing from cygwin1.dll. The source code for these functions was gleaned
by me from various sources. Currently comprises check_ntsec() needed by
ORBit, and getdelim() and needed by gnome-vfs. CFLAGS=-O2 ./configure --prefix=/opt/gnome |
gmp-4.1 | gmp-4.1-cygwin.patch | Required for sawfish make check fails because the Makefiles are not patched to find the test programs correctly. You can run the tests manually, however. One test fails, but this does not appear to affect sawfish. CFLAGS=-O2 ./configure --prefix=/opt/gnome --enable-shared --disable-static |
librep-0.15.2 | librep-0.15.2-cygwin.patch | Required for sawfish CFLAGS=-O2 ./configure --prefix=/opt/gnome --with-gmp-prefix=/opt/gnome |
Package | Patch File | Notes |
---|---|---|
audiofile-0.2.3 | audiofile-0.2.3-cygwin.patch | Note: mkinstalldirs does not have execute permission in this package. Use chmod +x mkinstalldirs before configuring. CFLAGS=-O2 ./configure --prefix=/opt/gnome |
esound-0.2.29 | esound-0.2.29-cygwin.patch | CFLAGS=-O2 ./configure --prefix=/opt/gnome |
glib-1.2.10 | glib-1.2.10-cygwin.patch | CFLAGS=-O2 ./configure --prefix=/opt/gnome --with-threads=posix |
gtk+-1.2.10 | gtk+-1.2.10-cygwin.patch | CFLAGS=-O2 ./configure --prefix=/opt/gnome |
imlib-1.9.14 | imlib-1.9.14-cygwin.patch | CFLAGS=-O2 CPPFLAGS=-I/usr/include/libpng ./configure --prefix=/opt/gnome |
gtk-engines-0.12 | gtk-engines-0.12-cygwin.patch | CFLAGS=-O2 ./configure --prefix=/opt/gnome |
ORBit-0.5.17 | ORBit-0.5.17-cygwin.patch | CFLAGS=-O2 ./configure --prefix=/opt/gnome |
xml-i18n-tools-0.9 | no patch required | CFLAGS=-O2 ./configure --prefix=/opt/gnome |
libxml-1.8.17 | libxml-1.8.17-cygwin.patch | CFLAGS=-O2 ./configure --prefix=/opt/gnome |
oaf-0.6.10 | oaf-0.6.10-cygwin.patch | CFLAGS=-O2 ./configure --prefix=/opt/gnome |
GConf-1.0.9 | GConf-1.0.9-cygwin.patch | CFLAGS=-O2 CXXFLAGS=-O2 CPPFLAGS=-I/usr/include/libpng ./configure --prefix=/opt/gnome |
gnome-libs-1.4.2 | gnome-libs-1.4.2-cygwin.patch | Antialias text does not work in the test-gnome app. Do not know why. CFLAGS=-O2 CPPFLAGS="-I/opt/gnome/include -I/usr/include/libpng -I/usr/include/db2" LIBS=-ldb ./configure --prefix=/opt/gnome |
gdk-pixbuf-0.21.0 | gdk-pixbuf-0.21.0-cygwin.patch | CFLAGS=-O2 CPPFLAGS=-I/usr/include/libpng ./configure --prefix=/opt/gnome --disable-mmx |
libghttp-1.0.9 | libghttp-1.0.9-cygwin.patch | CFLAGS=-O2 ./configure --prefix=/opt/gnome |
libglade-0.17 | libglade-0.17-cygwin.patch | CFLAGS=-O2 ./configure --prefix=/opt/gnome |
scrollkeeper-0.2 | scrollkeeper-0.2-cygwin.patch | LIBS=-lintl CFLAGS=-O2 ./configure --localstatedir=/opt/gnome/var --prefix=/opt/gnome |
gnome-mime-data-2.0.1 | No patch required. | CFLAGS=-O2 ./configure --prefix=/opt/gnome |
gnome-vfs-1.0.5 | gnome-vfs-1.0.5-cygwin.patch | It may be necessary to rebase your cygwin dlls to use this library. Currently test-async-cancel fails - this is under investigation. CFLAGS=-O2 PKG_CONFIG_PATH=/opt/gnome/lib/pkgconfig ./configure --prefix=/opt/gnome --enable-gconf |
libgtop-1.0.13 | libgtop-1.0.13-cygwin.patch | CFLAGS=-O2 LIBS=-lintl ./configure --prefix=/opt/gnome --with-libgtop-examples --without-libgtop-guile |
Package | Patch File | Notes |
---|---|---|
control-center-1.4.0.5 | control-center-1.4.0.5-cygwin.patch | CFLAGS=-O2 ./configure --prefix=/opt/gnome |
gnome-core-1.4.2 | gnome-core-1.4.2-cygwin.patch | The panel currently occasionally fails on start-up, especially when the processor is under
heavy load. CFLAGS=-O2 CPPFLAGS=-I/usr/include/libpng ./configure --prefix=/opt/gnome |
glade-0.6.4 | glade-0.6.4-cygwin.patch | CFLAGS=-O2 ./configure --prefix=/opt/gnome |
rep-gtk-0.15 | rep-gtk-0.15-cygwin.patch | CFLAGS=-O2 ./configure --prefix=/opt/gnome |
sawfish-1.1-gtk1 | sawfish-1.1-gtk1-cygwin.patch |
The source tar file contains file names that are illegal on Windows. Use the following sequence of
commands to extract it: tar zxvf sawfish-1.1-gtk1.tar.gz --exclude=sawfish-1.1-gtk1/lisp/sawfish/ui/WIDGETS --exclude="sawfish-1.1-gtk1/themes/Crux/*active*" tar zxvf sawfish-1.1-gtk1.tar.gz --to-stdout sawfish-1.1-gtk1/lisp/sawfish/ui/WIDGETS > sawfish-1.1-gtk1/lisp/sawfish/ui/WIDGETS.txt for file in $(tar ztf sawfish-1.1-gtk1.tar.gz | grep :) do tar zxvf sawfish-1.1-gtk1.tar.gz --to-stdout $file > $(echo $file | sed 's/:/_/g') done The configure command is: CFLAGS=-O2 CPPFLAGS="-I/opt/gnome/include -I/usr/include/libpng" ./configure --prefix=/opt/gnome --with-rep-prefix=/opt/gnome |
gnome-applets-1.4.1 | gnome-applets-1.4.1-cygwin.patch | CFLAGS=-O2 LIBS=-lintl ./configure --prefix=/opt/gnome |
gnome-utils-1.4.1.2 | gnome-utils-1.4.1.2-cygwin.patch | CFLAGS=-O2 ./configure --prefix=/opt/gnome --with-messages=/var/log/messages |
mc-4.5.55 | no patch required |
Note: Midnight commander is now included in the cygwin distribution, but does not include
the gnome gui. You must build this package to get a functional gnome desktop. Do not install
in /usr as you will then overwrite the default cygwin installation. CFLAGS=-O2 CPPFLAGS=-I/opt/gnome/include LIBS=-lintl ./configure --prefix=/opt/gnome --with-mmap --without-subshell |
gnome-games-1.4.0.4 | gnome-games-1.4.0.4-cygwin.patch | CFLAGS=-O2 ./configure --prefix=/opt/gnome |
gnome-print-0.37 | gnome-print-0.37-cygwin.patch | CFLAGS=-O2 ./configure --prefix=/opt/gnome |
gnome-pim-1.4.6 | gnome-print-1.4.6-cygwin.patch | Gnome calendar and diary. Requires guile.
CFLAGS=-O2 CXXFLAGS=-O2 ./configure --prefix=/opt/gnome |
gtop-1.0.13 | gtop-1.0.13-cygwin.patch | CFLAGS=-O2 ./configure --prefix=/opt/gnome |
startgnome-0.5 | startgnome-0.5.tar.bz2 | A source-code bundle, installs convenience startup-scripts.
./configure --prefix=/opt/gnome |
These packages are not needed for correct operation of the desktop, but may add useful functionality.
Package | Patch File | Notes |
---|---|---|
gnome-user-docs-1.4.1.1 | No patch required | contains the gnome documentation. You can safely omit this if you do not need
the docs, as nothing else depends on it.
./configure --prefix=/opt/gnome |
gnome-audio-1.4.0 | No patch required | contains various sound files for the gnome desktop. You can safely omit this
if you do not want gnome to whistle and burp at you, as nothing else depends on it.
no configure script in this one, just make and make install |
These libraries are not used by the desktop, but are necessary for many other gnome applications
Package | Patch File | Notes |
---|---|---|
bonobo-1.0.22 | bonobo-1.0.22-cygwin.patch | CFLAGS=-O2 ./configure --prefix=/opt/gnome |
gal-0.22 | gal-0.22-cygwin.patch | CFLAGS=-O2 ./configure --prefix=/opt/gnome |
gtkhtml-1.1.7 | gtk-1.1.7-cygwin.patch | This package contains filenames that are distinguished only by case. We therefore have to rename some files as they are extracted - this requires two invocations of tar, as: tar jxvf gtk-1.1.7.tar.bz2 --exclude="gtk-1.1.7/components/html-editor/Spell*"; tar jxvf gtk-1.1.7.tar.bz2 --to-stdout gtk-1.1.7/components/html-editor/Spell.idl > gtk-1.1.7/components/html-editor/Spell-idl.idl The configure command is: CFLAGS=-O2 ./configure --prefix=/opt/gnome --with-gconf --without-bonobo |
For example, here is the sequence of commands to build the first package, audiofile. Substitute the PATH, "/sources", "/patches", the CFLAGS and prefix values appropriately. (Ben is our puppy - he loves the beach).
1. | set up the PATH: | |
ben@thebeach ~/gnome $ PATH=/opt/gnome/bin:/usr/X11R6/bin:$PATH |
||
2. | unpack the source tarball: | |
ben@thebeach ~/gnome $ tar zxvf /sources/audiofile-0.2.3.tar.gz |
||
3. | change directory to the unpacked sources: | |
ben@thebeach ~/gnome $ cd audiofile-0.2.3 |
||
4. | apply the patch: | |
ben@thebeach ~/gnome/audiofile-0.2.3 $ patch -p1 < /patches/audiofile-0.2.3-cygwin.patch |
||
5. | configure: | |
ben@thebeach ~/gnome/audiofile-0.2.3 $ CFLAGS=-O2 ./configure --prefix=/opt/gnome |
||
6. | make: | |
ben@thebeach ~/gnome/audiofile-0.2.3 $ make |
||
7. | check: | |
ben@thebeach ~/gnome/audiofile-0.2.3 $ make check |
||
8. | install: | |
ben@thebeach ~/gnome/audiofile-0.2.3 $ make install |
Whether you use the supplied autobuild script, or configure the packages manually, you should make sure that you do not have "." in your PATH. This is to ensure that the "make install" target uses /bin/install.exe, and not the file "INSTALL" in the top level directory of each package.
startgnome is designed to be run from a cygwin command line: it uses xinit to start the X server and gnome-session in such a way that the X server automatically shuts down when you log out of the gnome-session. Simply typing startgnome is sufficent to start gnome; for users familiar with the usual startx program (or xinit) it is possible to pass arguments to startgnome in the same format as that program to change behaviour for just this one session (see man startx). Note that ~/.startgnomerc is the default client, not ~/.xinitrc.
startgnome.bat is designed to be invoked from a desktop shortcut. It is just a wrapper for startgnome in the same way that the cygwin cygwin.bat script is a wrapper for bash. I recommend that you copy it to the same directory as cygwin.bat (c:\cygwin). When using startgnome.bat directly, a Windows console is created that contains the output messages from gnome-session. If you prefer not to have this console, but instead send the messages to a log file, you can start use run.exe that is distributed with cygwin xfree86 as:
c:\cygwin\usr\X11R6\bin\run c:\cygwin\startgnome.bat /fIn this case output is sent to the default log file /tmp/gnome.log. You can choose a different log file by passing its (posix) name as a second parameter to startgnome.bat:
c:\cygwin\usr\X11R6\bin\run c:\cygwin\startgnome.bat /f /home/me/mylog(Note: logfile redirection does not work on Windows 9x/Me)
Occasionally, some process will not be terminated. For example, esd often continues to run; or if you have a gnome-terminal active then bash may remain. The consequences of this depends on whether you use run.exe with startgnome.bat. If you do use run.exe, then the X window will disappear, and all will appear to have terminated. But ps -ef in a cygwin shell will show that some processes have remained. When you come to shutdown Windows, it will give warnings about cmd.exe not shutting down correctly. Just tell Windows to terminate them. If you do not use run.exe, then you will find that the DOS console window remains. You can close this window manually, and that will terminate the remaining processes from your gnome session.
Comments, fixes, offers to take on proper development and maintenance should be sent to Steven O'Brien (steven dot obrien2 at ntlworld dot com)
Please do not send or attach large log files, traces, or binaries. Remember these patches
are completely unsupported, so do not expect detailed help (or even any help) building or running Gnome.
If anyone else also has, or is working on, a port of Gnome to Cygwin, then maybe we should compare notes.
If anyone knows of a real practical use for the Gnome desktop on Windows, then please share it with the rest of us. The libraries should help porting many apps of course; and I like Glines; but now that I can run the desktop, I have to ask myself - why?
Please see my applications page for details.