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
@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