【问题标题】:How to enable X11 forwarding in PyCharm SSH session?如何在 PyCharm SSH 会话中启用 X11 转发?
【发布时间】:2017-06-13 00:30:07
【问题描述】:

问题

我正在尝试通过 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

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

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

任何帮助将不胜感激。


附:制作别名:

alias ssh='ssh -X'

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

【问题讨论】:

  • 发现pycharm不使用系统ssh。相反,它使用JSch,这是一个纯java 的ssh 实现。 JSch 支持 x11 转发,但默认情况下未启用。解决问题的一种方法是将与 pycharm 捆绑在一起的 jsch.jar 替换为具有不同默认值的自定义版本。
  • 感谢@OliverWeissbarth 的评论!如果您愿意在实际答案中提供更多详细信息和分步解决方案,我很乐意将其标记为已批准!
  • 他们在这里有一个未解决的问题:youtrack.jetbrains.com/issue/PY-13869 看起来目前没有官方解决方案:(
  • 也许您应该尝试使用此处描述的外部 ssh 工具 jetbrains.com/help/pycharm/…。您可以在那里指定其他 ssh 参数
  • 实际上,我已经非常感谢您的解决方案。谢谢你。我最初在复制它时遇到了问题,因为我设置 matplotlib 支持 matplotlib.use('Agg'),但是当我评论那条线时,它就像一个魅力。将此评论留作提醒其他有相同问题的人。

标签: ssh pycharm x11-forwarding


【解决方案1】:

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

使用 X11 转发

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

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

【讨论】:

  • 嗨塔伦!感谢您的解决方案。现在变量 $DISPLAY 似乎是自动设置的,但如果我运行像“eog img.png”这样的命令,我会得到:“** (eog:40789): WARNING **: Could not open X display”。你知道如何解决这个问题吗?
  • @Ggiolo,我测试过,它可能需要调用更多方法jcraft.com/jsch/examples/X11Forwarding.java.html。不幸的是,我没有时间进一步调试这个问题。但这应该会给你一个探索的方向以及需要如何完成
  • 感谢您的努力,您应得的赏金! :) 我会调查并尽快更新这个帖子!
  • 这对我不起作用。你用的是什么版本的 Pycharm?谢谢
  • 你可以在截图中看到它是2017.2.4 something
【解决方案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 变量设置为系统变量的问题。

编辑:如下图所示,它可以工作。例如,我使用 DeepLab 的 PyTorch 实现并可视化来自 PASCAL VOC 的示例图像:

【讨论】:

  • 所以还需要在 Pycharm 之外建立外部 ssh 连接?
  • 不,我不需要。这甚至会如何影响 PyCharm 中的运行代码?
  • PyCharm "SciView" 没有使用 X11 转发:stackoverflow.com/questions/48334853/… 如果您只想查看图像但它不能用于其他 X windows 应用程序,它可能很有用!
  • 哦,我明白了。我不知道。谢谢你的澄清。我一直在努力在 SciView 中绘制图像,这种方法对我有用。
  • 我在 Linux Mint 中得到了这个工作,但我必须添加一个用户环境变量 DISPLAY 并将其设置为 :10.0
【解决方案3】:

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

顺便说一句,the piece of advice 关于修补 jsch 不适用于任何比 2019.1 更新的 IDE。

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

    • 嗨,Hesham,感谢您的建议,但我不想同时打开任何东西。最后,打开外部终端甚至手动更新 DISPLAY 变量都不是什么大不了的事,但是让所有东西都在 PyCharm 中运行会很好,认为你不能这样做真是太疯狂了!
    猜你喜欢
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2018-01-02
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多