32

问题

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

"Tools -> Start SSH session..."

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

ssh -X user@remotehost

你知道一些聪明的方法来实现这一点吗?


当前肮脏的解决方案

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

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

vincenzo@remotehost:$ echo $DISPLAY
localhost:10.0

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

export DISPLAY=localhost:10.0

或更新Run/Debug Configuration中的DISPLAY变量,如果我想从 GUI 运行程序。

但是,我真的不喜欢这种使用外部 ssh 终端并手动更新DISPLAY变量的解决方案,我确信有更好的方法来实现这一点!

任何帮助将非常感激。


Ps 制作一个别名,如:

alias ssh='ssh -X'

在我的.bashrc中并不强制 PyCharm 启用 X11 转发。

4

4 回答 4

7

因此,我能够修补 jsch 并对其进行测试,并且效果很好。

使用 X11 转发

您需要执行以下操作才能在 PyCharm 中使用 X11 转发:
- 如果您还没有 X 服务器,请安装 X 服务器。在 Windows 上这可能是 VcXsrv 项目,在 Mac OS X 上可能是 XQuartz 项目。
-下载或编译 jsch 包。请参阅下面的编译说明。
- 备份jsch-0.1.54.jar到您的 pycharmlib文件夹中,并将其替换为修补版本。使用远程环境启动 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.jartarget文件夹中创建。

X11 启用

于 2017-11-06T21:26:40.837 回答
6

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变量设置为系统变量的问题。 在此处输入图像描述

编辑:如下图所示,它有效。例如,我使用 DeepLab 的 PyTorch 实现并可视化来自 PASCAL VOC 的示例图像: 在此处输入图像描述

于 2020-05-07T09:46:15.750 回答
2

X11 转发在 2021.1中针对所有基于 IntelliJ 的 IDE 实施。如果它仍然不起作用,请考虑在 youtrack.jetbrains.com 上创建一个新问题。

顺便说一句,关于修补的建议jsch不适用于 2019.1 之后的任何 IDE。

于 2021-04-30T07:14:07.767 回答
0

同时,打开MobaXTerm并在启用 X11 转发复选框的情况下进行连接。现在 PyCharm 将通过 MobaXTerm X11 服务器转发显示。直到 PyCharm 添加这个“简单”功能。

另外,在 PyCharm 运行配置中设置 DISPLAY 环境变量,如下所示: DISPLAY=localhost:10.0 (应在服务器端使用命令 echo $DISPLAY 获取右侧)

于 2019-02-04T21:10:07.057 回答