Gengiolo
Gengiolo

Reputation: 603

How to enable X11 forwarding in PyCharm SSH session?

The Question

I'm trying to enable X11 forwarding through the PyCharm SSH Terminal which can be executed via

"Tools -> Start SSH session..."

Unfortunately, It seems there is no way of specifying the flags like I would do in my shell for enabling the X11 Forwarding:

ssh -X user@remotehost

Do you know some clever way of achieving this?


Current dirty solution

The only dirty hack I found is to open an external ssh connection with X11 forwarding and than manually update the environment variable DISPLAY.

For example I can run on my external ssh session:

vincenzo@remotehost:$ echo $DISPLAY
localhost:10.0

And than set on my PyCharm terminal:

export DISPLAY=localhost:10.0

or update the DISPLAY variable in the Run/Debug Configuration, if I want to run the program from the GUI.

However, I really don't like this solution of using an external ssh terminal and manually update the DISPLAY variable and I'm sure there's a better way of achieving this!

Any help would be much appreciated.


P.s. Making an alias like:

alias ssh='ssh -X'

in my .bashrc doesn't force PyCharm to enable X11 forwarding.

Upvotes: 33

Views: 16788

Answers (5)

Yiwei Jiang
Yiwei Jiang

Reputation: 166

Update 2022: for PyCharm newer than 2022.1: Plotting in SciView works by only setting ForwardX11 yes in .ssh/config (my laptop OS is ubuntu 22.04). I did not set any other parameters either on the server or local side.

Upvotes: 0

Vladimir Lagunov
Vladimir Lagunov

Reputation: 1905

X11 forwarding was implemented in 2021.1 for all IntelliJ-based IDEs. If it still doesn't work, please consider creating a new issue at youtrack.jetbrains.com.

By the way, the piece of advice about patching jsch won't work for any IDE newer than 2019.1.

Upvotes: 2

oezguensi
oezguensi

Reputation: 950

Update 2020: I found a very easy solution. It may be due to the updated PyCharm version (2020.1).

  1. Ensure that X11Forwarding is enabled on server: In /etc/ssh/sshd_config set
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost no
  1. On client (MacOS for me): In ~/.ssh/config set
ForwardX11 yes
  1. In PyCharm deselect Include system environment variables. This resolves the issue that the DISPLAY variable gets set to the system variable. enter image description here

EDIT: As seen in the below image it works. For example I used the PyTorch implementation of DeepLab and visualize sample images from PASCAL VOC: enter image description here

Upvotes: 7

Hesham Eraqi
Hesham Eraqi

Reputation: 2542

In parallel, open MobaXTerm and connect while X11 forwarding checkbox is enabled. Now PyCharm will forward the display through MobaXTerm X11 server. This until PyCharm add this 'simple' feature.

Also, set DISPLAY environment variable in PyCharm run configuration like this: DISPLAY=localhost:10.0 (the right hand side should be obtained with the command echo $DISPLAY in the server side)

Upvotes: 0

Tarun Lalwani
Tarun Lalwani

Reputation: 146630

So I was able to patch up jsch and test this out and it worked great.

Using X11 forwarding

You will need to do the following to use X11 forwarding in PyCharm:
- Install an X Server if you don't already have one. On Windows this might be the VcXsrv project, on Mac OS X the XQuartz project.
- Download or compile the jsch package. See instructions for compilation below.
- Backup jsch-0.1.54.jar in your pycharm's lib folder and replace it with the patched version. Start Pycharm with a remote environment and make sure to remove any instances of the DISPLAY environment variable you might have set in the run/debug configuration.

Compilation

Here is what you need to do on a Mac OS or Linux system with Maven installed.

wget http://sourceforge.net/projects/jsch/files/jsch/0.1.54/jsch-0.1.54.zip/download
unzip download
cd jsch-0.1.54
sed -e 's|x11_forwarding=false|x11_forwarding=true|g' -e 's|xforwading=false|xforwading=true|g' -i src/main/java/com/jcraft/jsch/*.java
sed -e 's|<version>0.1.53</version>|<version>0.1.54</version>|g' -i pom.xml
mvn clean package

This will create jsch-0.1.54.jar in target folder.

X11 Enabled

Upvotes: 7

Related Questions