Skip to content

Instantly share code, notes, and snippets.

@rsenden
Last active August 4, 2024 01:53
Show Gist options
  • Save rsenden/7bc96a3e678b60e61c750517ca8de883 to your computer and use it in GitHub Desktop.
Save rsenden/7bc96a3e678b60e61c750517ca8de883 to your computer and use it in GitHub Desktop.
Run Eclipse in WSL2
<?xml version="1.0" encoding="UTF-8"?>
<XLaunch WindowMode="MultiWindow" ClientMode="NoClient" LocalClient="False" Display="0" LocalProgram="xcalc" RemoteProgram="xterm" RemotePassword="" PrivateKey="" RemoteHost="" RemoteUser="" XDMCPHost="" XDMCPBroadcast="False" XDMCPIndirect="False" Clipboard="True" ClipboardPrimary="True" ExtraParams="" Wgl="True" DisableAC="True" XDMCPTerminate="False"/>

This gist provides a summary on how to accomplish the following tasks:

  • Access WSL2 using putty
  • Run Eclipse on WSL2 Ubuntu, displaying the Eclipse UI on VcXsrv running on Windows
    • Connecting to VcXsrv directly from WSL2
    • Using SSH X11 forwarding, with network connection initiated from Windows to WSL2 Ubuntu, which is particularly useful on company laptops that refuse all incoming network connections on Windows.
  1. Prerequisites:

    • WSL2 up and running
    • Putty, Plink & PuttyGen installed on Windows
  2. WSL2 Ubuntu: Install & configure OpenSSH

    • sudo apt install openssh-server

    • Edit /etc/ssh/sshd_config:

        X11Forwarding yes
        X11DisplayOffset 10
        X11UseLocalhost no
      
    • sudo ssh-keygen -A

    • sudo service ssh start

  3. Auto-start SSH daemon:

    • WSL2 Ubuntu: mkdir -p ~/bin ; echo "sudo service ssh start" >> ~/bin/startup.sh
    • Windows: Create scheduled task that runs on user logon, running C:\Windows\System32\bash.exe with arguments /home/<user>/bin/startup.sh
  4. Windows: Configure SSH public key authentication using PuttyGen:

    • See https://www.puttygen.com/#How_to_use_PuTTYgen for general instructions
    • Run PuttyGen
    • Generate new key pair, or convert existing key pair
    • Save private key to ppk file; this will used later when connecting to WSL2 Ubuntu using Putty or PLink
    • Add the SSH public key to ~/.ssh/authorized_keys on WSL2 Ubuntu
  5. Windows: Create putty profile to connect to WSL2 Ubuntu:

    • Session
      • Host Name: localhost
      • Port: 22 (or whatever OpenSSH port you configured on WSL2 Ubuntu)
    • Connection -> Data:
      • Auto-login username: <your user name>
    • Connection -> SSH -> Auth:
      • Private key file for authentication: <key file generated by PuttyGen in step #2>
    • Connection -> SSH -> X11:
      • Enable X11 forwarding (if you want to start X11 programs)
      • X display location: 127.0.0.1:0.0 (this should match whatever DISPLAY value is shown in VcXsrv logs)
  6. Windows: Install & configure VcXsrv:

    • Download & install https://sourceforge.net/projects/vcxsrv/
    • Copy config.xlaunch as shown below to the Startup folder (Win+R: shell:startup)
    • Launch config.xlaunch to start the X Server manually for now
  7. WSL2 Ubuntu: Install Eclipse & prerequisites:

    • sudo apt-get install openjdk-11-jdk
    • sudo apt-get install libgtk-3-0
    • Download and unpack Eclipse for Linux to ~/eclipse
  8. Windows: Eclipse shortcut using SSH X11 tunnel:

    • Manually try starting Eclipse from Windows by running the following command:
      plink.exe -batch -X -i <path to .ppk from step #2> <Ubuntu username>@localhost ~/eclipse/eclipse
    • Copy silent.vbs and plink-silent.cmd (see attached files) to the directory where PLink.exe is installed
    • Create a new shortcut that runs the following command:
      C:\Windows\System32\cmd.exe /c "C:\<path to plink>\plink-silent.cmd -batch -X -i <path to .ppk from step #2> <Ubuntu username>@localhost ~/eclipse/eclipse"
    • Double-click the shortcut; if all is well you should see the Eclipse UI after a couple of seconds
  9. Windows: Eclipse shortcut using direct XServer connection:

    • Add the following lines to ~/.profile on WSL2 Ubuntu (create file if it doesn't yet exist):
      export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0
      export LIBGL_ALWAYS_INDIRECT=1
      
      Note that having these lines in .bashrc won't work as .bashrc is only loaded for interactive shells
    • Create a new shortcut that runs the following command:
      C:\Windows\System32\wsl.exe -u <WSL2 user> -- bash -lc 'nohup ~/eclipse/eclipse' ^& sleep 1
CreateObject("Wscript.Shell").Run "" & WScript.Arguments(0) & "", 0, False
@rsenden
Copy link
Author

rsenden commented Jan 19, 2024

Thanks all for the various suggestions. I'm using a similar approach as @isaac-gros described, however with the standard WSLg-based approach, I encountered an annoying issue; Eclipse would disappear after sleep/resume or on network change (for example switching between LAN & WIFI). Sometimes the existing Eclipse window would re-appear when starting another instance, but other times the window wouldn't re-appear and I had to kill the existing Eclipse process to be able to start a new instance on the same workspace.

I'm now using https://github.com/nbdd0121/wsld in combination with VcXsrv, which fixes this problem for me (I couldn't figure out how to get wsld to work with the native WSLg X11 server; see nbdd0121/wsld#34)

@codespearhead
Copy link

@asmolcic 's suggestion did the trick for me.

sudo snap install --classic eclipse &&
sudo apt-get update &&
sudo apt-get install libswt-gtk-4-java &&
eclipse

@TheAnton205
Copy link

TheAnton205 commented Jul 1, 2024

There's a another way that I found works for me via WSL, following https://github.com/a-langer/eclipse-oomph-console from the thread https://stackoverflow.com/questions/35282460/install-eclipse-via-terminal:

  1. Follow the steps on https://learn.microsoft.com/en-us/windows/wsl/tutorials/gui-apps up until step "Update the packages in your distribution" via @isaac-gros

  2. Download the tar from console oomph installer :

wget -O installer.tar.gz  https://search.maven.org/remotecontent?filepath=com/github/a-langer/org.eclipse.oomph.console.product/1.0.1/org.eclipse.oomph.console.product-1.0.1-linux.gtk.x86_64.tar.gz
  1. Extract it:
tar -xvzf installer.tar.gz
  1. Go into new directory:
cd eclipse-installer
  1. Run the installer (it might hang at 74%, just wait):
./eclipse-inst
  1. Follow the steps on the installer that pops up:
  • Eclipse IDE for Java Developers
  • Installation folder --> Change to home, not root! It will make things easier imo
  • Click install
  1. Cd into where you set your installation to be
  2. Cd into /ide/eclipse (you may not have an ide folder)
  3. You can now run eclipse from terminal:
./eclipse

@dantran
Copy link

dantran commented Aug 4, 2024

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment