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.
-
Prerequisites:
- WSL2 up and running
- Putty, Plink & PuttyGen installed on Windows
-
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
-
-
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
- WSL2 Ubuntu:
-
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
-
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>
- Auto-login username:
- Connection -> SSH -> Auth:
- Private key file for authentication:
<key file generated by PuttyGen in step #2>
- Private key file for authentication:
- 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)
- Session
-
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
-
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
-
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
andplink-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
- Manually try starting Eclipse from Windows by running the following command:
-
Windows: Eclipse shortcut using direct XServer connection:
- Add the following lines to
~/.profile
on WSL2 Ubuntu (create file if it doesn't yet exist):
Note that having these lines inexport DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0 export LIBGL_ALWAYS_INDIRECT=1
.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
- Add the following lines to
I'm no longer using this approach myself, but rather using native WSL2 / WSLg features. In short:
dbus-update-activation-environment --all > /dev/null 2>&1
GDK_BACKEND=x11
LIBGL_ALWAYS_SOFTWARE=1
~/.local/share/applications/epp.package.java.desktop
(I guess name may be different based on which Eclipse edition you install) to add the same two environment variables as above to theExec
line, i.e., something like:Exec=GDK_BACKEND=x11 LIBGL_ALWAYS_SOFTWARE=1 /home/myuser/eclipse/java-2023-06/eclipse/eclipse
LIBGL_ALWAYS_SOFTWARE=1
seems to provide better stability, and I think one of these also help to have context menu's shown within screen boundaries/usr/share/applications/
to have Eclipse show up in your Windows start menuNote that when Eclipse is maximized, context menu's may still be partially hidden by the Windows task bar, so I've configured the taskbar to automatically hide in desktop mode.
* Insert the same two environment variables as listed above in the Exec