Cannot launch Git GUI using Cygwin on Windows
Asked Answered
A

7

73

I used to launch Git GUI within my Cygwin console without any problems, but since I updated Cygwin I've got the following error message:

$ git gui
Application initialization failed: no display name and no $DISPLAY environment variable
Error in startup script: invalid command name "tk_messageBox"
    while executing
"tk_messageBox  -icon error  -type ok  -title "git-gui: fatal error"  -message $err"
    invoked from within
"if {[catch {package require Tcl 8.4} err]
 || [catch {package require Tk  8.4} err]
} {
        catch {wm withdraw .}
        tk_messageBox \
                -icon error \
                -typ..."
    (file "/usr/lib/git-core/git-gui" line 34)

How can I solve this?

Apiculture answered 22/2, 2012 at 10:57 Comment(2)
you might consider launching Git For Windows , which provides git gui, using a separate non-cygwin/msys shell instead. You just have to mind your cygwin/windows paths so cygwin doesnt try to use it instead of the cygwin version, which can cause some issues.Chalaza
@Chalaza Combining Git for Windows with Cygwin is going to be a PITA: Different filename conventions, and even different home directories (usually) so you have to manage two sets of git settings.Bonhomie
P
130

Cygwin's gitk and Git GUI require X11. This means you need to install some of the Cygwin X11 packages and set them up to be able to open the GUI.

This should get you up and running:

  1. Run the Cygwin installer again (download the relevant setup-*.exe again if you need to).
  2. At the package list, select to install "xinit" under the X11 category. Click next, accept all the dependencies, and install.
  3. In the Windows Start menu, you should have a new group: Cygwin-X. From there, run XWin Server.
  4. In your Cygwin shell, run export DISPLAY=:0.0.

You'll need to repeat step 3 every time you reboot your computer, and step 4 every time you open a new Cygwin shell (or just run echo "export DISPLAY=:0.0" >>~/.profile to have it run automatically whenever you create a new shell).

In the comments, it seems some people are getting errors stating 'couldn't connect to display ":0.0"'. If you get that, mouse over the X that should have appeared in your system tray (you may need to click the little up icon if the X icon has been hidden); the pop-up title should say something like "Cygwin/X Server:1.0". Use that ":1.0" (or whatever you see) as the value for DISPLAY in step 4, rather than ":0.0", making sure to include the colon.

If you have any other problems starting the X server, you will probably find you have a file called ~/.xsession-errors; check out the contents of that for what's going wrong. Also check whether you have a ~/.startxwinrc file, and try deleting it and seeing if that fixes the problem.

For the interested, the reason the X11 packages aren't installed automatically is that they're not technically needed: it's possible through somewhat convoluted means to use a different X11 server than the one Cygwin installs when you install the "xinit" package.

Promote answered 23/2, 2012 at 18:17 Comment(12)
The look and feel isn't what it used to be but at least it works again. Thanks!Apiculture
@Stijn: Agreed. I preferred the old interface too (not least because I have a custom Windows keyboard layout which X11 can't understand). The justification for the change is that Tcl/Tk (the language Git GUI and Gitk and so forth run on) has moved to X11, so to avoid being stuck with an obsolete Tcl/Tk, Cygwin had to make the same change.Promote
You're right about “not technically needed”. I know people who prefer(red) to use Exceed. (Why? I don't know…)Gulgee
I added the following line to my bash profile to eliminate having to execute step 3 every day. If this works for you too, you may wish to edit the answer. "startxwin >/dev/null 2>&1 &"Chops
Did you find a way to automatically hide the xterm when launching the XWin Server?Apiculture
@StijnVanpoucke: Yes: run touch ~/.startxwinrc from a bash shell. I've answered that fully over on Super User: superuser.com/q/435768/21002Promote
Just a NOTE: If you have tried to run gitk before installing the X11 Server there will likely be a file called ~/.gitk on your system. Delete it as this contains parameters that will cause gitk to error with Error in startup script: unknown color name "SystemButtonFace"Danika
Nice steps. BTW: we can test the setting using xclockCaerphilly
FYI - The display isn't always :0.0. If yours doesn't work after these steps, hover over the XWin icon in your taskbar and use whatever it says. In my case :1.0. Also, "X-start-menu-icons" did not exist for me, something else must have replaced it.Prolactin
step 5. set enable_xauth=0 in \bin\startxwin if you are getting "Authorization required, but no authorization protocol specified"Booker
I already have the Xming Server installed (for use with PuTTY). Is there a way to get Cygwin to work with Xming rather than having to install XWin Server?Deedradeeds
@Deedradeeds Welcome to Stack Overflow! You're going to get a much better response if you ask that as a brand new question rather than as a comment here; I don't know the answer off the top of my head, and asking it as a new question will mean many more people who might be able to help will see it.Promote
C
10

Avoid X11 and add Git GUI support to Cygwin

If you want to avoid X11 (and who wouldn't?):

  1. Install Git for Windows (non-cygwin) http://git-scm.com/download/win
  2. Open its command shell C:\Program Files (x86)\Git\Git Bash
  3. run git gui

(Optional) If you want to stay in Cygwin to launch Git GUI, add a function in your ~/.bashrc to do it. The only caveat is do not name the function git because of recursion and confusion with arguments, and the fact that you're Git for Windows shell may also be adding the same function when it starts. You may also run into path issues so be careful about setting up your paths correctly.

# Call Git GUI from Git For Windows path with `ggui`
    gg() {
    command "/cygdrive/c/Program Files (x86)/Git/bin/git" gui  2>/dev/null;


    }

When you're done editing your .bashrc, refresh your settings:

source ~./bashrc

and then simply:

gg
Chalaza answered 10/2, 2015 at 0:16 Comment(3)
If you name the function git-gui instead of gg, it will open when you type the command git gui - git will use that as an extension.Magneton
I used Git for Windows on Windows 10 and for gitk it works like described here. However, git gui simply does not start from a cygwin terminal (whereas git-gui does!). When I add a command like described here with the name git-gui, both git gui and git-gui don't work anymore. Just in case somebody else has this problem, at least git-gui works (without an additional command in the bashrc).Footstep
+1 ... This ended up being what I was really looking for. Already had git gui installed without even knowing it since I had installed git bash, and it saved me from going down a whole X11 rabbit trail. thanks!Parboil
U
9

After spending more time than I'd care to admit, I managed to find a working solution to execute gitk from my Cygwin shell. I couldn't get any of the instructions with starting the X server to work reliably, and in the end, the solution was pretty simple.

The largest caveat is needing to have Git for Windows installed, the download for that can be found here.

Now for the whole running gitk part. Git for windows includes a cmd folder, that has a gitk.cmd windows command file. That's all you need to call to have gitk open.

$ [path-to-git]/cmd/gitk.cmd

On my system the Git path is in "C:\Program Files (x86)\Git", so the command would look like this:

$ "/cygdrive/c/Program Files (x86)/Git/cmd/gitk.cmd"

In my ~/.bash_profile file I've added a function to handle that call which looks like this:

gitk() {
  "/cygdrive/c/Program Files (x86)/Git/cmd/gitk.cmd"
}
Underlay answered 12/2, 2015 at 20:41 Comment(0)
C
6
echo "export DISPLAY=:0.0" >>~/.profile

or

echo "export DISPLAY=:0.0" >>~/.bash_profile

in my case

Chalutz answered 13/6, 2012 at 20:1 Comment(0)
D
3

Here is what worked for me:

cat >> ~/.bash_profile <<< "export DISPLAY=:0.0"

From the Cygwin package manager, do the following:

install xorg-server and some xorg fonts, xorg-x11-fonts-Type1 especially.

Next, create a link to the Windows font folders for Git GUI to use:

ln -s /cygdrive/c/Windows/Fonts /usr/share/fonts/win-fonts

Close the Cygwin terminal and open again then type

startxwin &> /dev/null &

git gui &
Demers answered 22/9, 2015 at 5:54 Comment(0)
D
2

After following the four steps given by me_and and tititou36, you may still have issues of the XWin just die after you started the XwinServer.

The reason is it relies on a Cygwin terminal/console, which is the host, and the Xwin dies if there is no Cygwin console.

The solution for this is:

Start a Cygwin console (you can make it automatically start by putting mintty command into the file .startxwinrc under your Cygwin home directory).

Dagger answered 31/3, 2015 at 0:2 Comment(0)
E
1

Based on AndrewD's answer: Don't use Cygwin's git, but use Windows Git's gitk and git gui. In other words, uninstall the git-gui and gitk packages from Cygwin (if installed). Then which gitk should point to the Windows file, not the Cygwin binary in /usr/bin.

Epigynous answered 8/2, 2016 at 10:15 Comment(1)
Don't you mean "Don't use Cygwin's git..."?Anatropous

© 2022 - 2024 — McMap. All rights reserved.