如何在PyCharm SSH会话中启用X11转发?

时间:2017-01-27 10:41:04

标签: ssh pycharm x11-forwarding

问题

我尝试通过 PyCharm SSH终端启用 X11转发,可以通过

执行
"Tools -> Start SSH session..."

不幸的是,似乎没有办法像我在shell中那样指定标志来启用X11 Forwarding:

ssh -X user@remotehost

你知道一些聪明的方法吗?

当前的脏解决方案

我发现唯一的脏黑客是使用X11转发打开外部ssh连接,而不是手动更新环境变量 DISPLAY

例如,我可以在我的外部ssh会话上运行:

vincenzo@remotehost:$ echo $DISPLAY
localhost:10.0

而不是在我的PyCharm终端上设置:

export DISPLAY=localhost:10.0

或更新运行/调试配置中的 DISPLAY 变量,如果我想从GUI运行该程序。

然而,我真的不喜欢这种使用外置ssh终端并手动更新 DISPLAY 变量的解决方案,我确定在那里&# 39;更好的实现方法!

非常感谢任何帮助。

P.S。制作别名:

alias ssh='ssh -X'
我的 .bashrc 中的

并不强制PyCharm启用X11转发。

4 个答案:

答案 0 :(得分:4)

所以我能够修补jsch并对其进行测试并且效果很好。

使用X11转发

您需要执行以下操作才能在PyCharm中使用X11转发:
- 如果您还没有X服务器,请安装它。在Windows上,这可能是VcXsrv项目,在Mac OS X上是XQuartz项目 - Download或编译jsch包。请参阅下面的编译说明 - 在pycharm的jsch-0.1.54.jar文件夹中备份lib,并将其替换为修补版本。使用远程环境启动Pycharm,并确保删除可能在运行/调试配置中设置的DISPLAY环境变量的任何实例。

汇编

以下是在安装了Maven的Mac OS或Linux系统上需要执行的操作。

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

这将在jsch-0.1.54.jar文件夹中创建target

X11 Enabled

答案 1 :(得分:2)

更新2020: 我找到了一个非常简单的解决方案。可能是由于更新了PyCharm版本(2020.1)。

  1. 确保已在服务器上启用X11Forwarding:在/etc/ssh/sshd_config中设置
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost no
  1. 在客户端上(对于我来说是MacOS):在~/.ssh/config中设置
ForwardX11 yes
  1. 在PyCharm中,取消选择Include system environment variables。这解决了DISPLAY变量被设置为系统变量的问题。 enter image description here

编辑:如下图所示。例如,我使用DeepLab的PyTorch实现并可视化来自PASCAL VOC的样本图像: enter image description here

答案 2 :(得分:1)

X11 forwarding was implemented in 2021.1 适用于所有基于 IntelliJ 的 IDE。如果它仍然不起作用,请考虑在 youtrack.jetbrains.com 上创建一个新问题。

顺便说一下,关于修补 jschthe piece of advice 不适用于 2019.1 之后的任何 IDE。

答案 3 :(得分:0)

并行打开MobaXTerm并在启用X11转发复选框时连接。现在,PyCharm将通过MobaXTerm X11服务器转发显示内容。 直到PyCharm才添加此“简单”功能。

此外,在PyCharm运行配置中设置DISPLAY环境变量,如下所示: DISPLAY =本地主机:10.0 (应该通过服务器端的命令echo $ DISPLAY来获得右侧)