免责声明:这个问题已经在 Stackoverflow 和其他场所以不同的形式提出,但我无法解决。所以我希望有人能帮我一劳永逸地解决这个问题。
xhost
由于安全问题,我需要在我的 Docker 容器上启用 x11 转发工作而不使用任何东西。我想将/tmp/.X11-unix
套接字公开~/.Xauthority
给 Docker 容器,以便它可以像客户端一样使用它们连接到 X 服务器。
我可以将我的问题归结为一个简单的问题Dockerfile
。我有一个docker-compose.yml
来运行它Dockerfile
。
Dockerfile
:
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y x11-apps xauth
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
:
version: '2.3'
services:
test:
build: .
command: /bin/bash
environment:
DISPLAY: $DISPLAY
volumes:
- /tmp/.X11-unix:/tmp/.X11-unix
- ~/.Xauthority:/root/.Xauthority
Run Code Online (Sandbox Code Playgroud)
这两个文件位于同一文件夹中。跑步:
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y x11-apps xauth
Run Code Online (Sandbox Code Playgroud)
如果您在主机系统中运行xhost +
,则 X 服务器将免除身份验证,并且xclock
程序将成功运行。否则,它会抱怨Error: Can't open display: …
我试图在我的 Ubuntu VirtualBox VM 的 tmux 会话中使用 xclip 进行一些复制/粘贴键绑定,但一直收到相同的错误消息。
我的主机上安装了 XQuartz:
ysim:~$ which xquartz
/opt/X11/bin/xquartz
ysim:~$ echo $DISPLAY
/tmp/launch-N0023n/org.macosforge.xquartz:0
Run Code Online (Sandbox Code Playgroud)
我已经ForwardX11 yes
设置~/.ssh/config
:
Host vm
ForwardX11 yes
Run Code Online (Sandbox Code Playgroud)
在我的虚拟机中,也在/etc/ssh/sshd_config
:
X11Forwarding yes
Run Code Online (Sandbox Code Playgroud)
当我在我的虚拟机中 ssh 时,当我不在tmux 会话中时,xclip 工作正常:
$ echo hello | xclip
$ xclip -o
hello
Run Code Online (Sandbox Code Playgroud)
但是当我在一个错误时:
$ echo hello | xclip
Error: Can't open display: localhost:10.0
Run Code Online (Sandbox Code Playgroud)
任何想法为什么会这样?
更新:现在似乎只有在我退出 tmux 会话然后创建一个新会话时才会发生。
我在windows中使用pycharm但是python后端需要在unix上运行所以我在ubuntu中使用vagrant托管python应用程序/代码,但是我还需要做一些绘图,有没有办法在pycharm中启用matplotlab绘图流浪汉?谢谢
我的用例是我通过 ssh 运行 nx 并且本地代理通过隧道连接到远程主机。因为它是隧道的,所以我告诉 nx 连接到 localhost:port。问题是我需要执行 X 身份验证,如果我意外访问本地 X 服务器而不是远程服务器,我会收到身份验证错误。
如何确定本地 X 服务器正在侦听的端口,以便在设置隧道时避免它?
我目前的解决方法是避免与任何已经有另一个应用程序监听的本地端口建立隧道。
我正在测试Google Compute Engine,我用Ubuntu OS创建了一个VM.当我连接到它时,通过单击此Connect SSH按钮,它将打开一个控制台窗口.
这是你得到的联系吗?
如何打开带有GUI的真实屏幕?我不想要控制台.
我正在从终端运行一个应用程序。预计将推出一个特定于应用程序的调试器 GUI,在内部与 GDB 对话。我尝试过 {export DISPLAY=localhost:0.0} & {export DISPLAY=:0.0}。这是行不通的。在我的 Linux 机器上,我能够运行该应用程序,而无需设置 DISPLAY。
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:207)`
at java.awt.Window.<init>(Window.java:535)
at java.awt.Frame.<init>(Frame.java:420)
at javax.swing.JFrame.<init>(JFrame.java:224)
at charm.debug.ParDebug.main(ParDebug.java:2291)
Run Code Online (Sandbox Code Playgroud) 我正在运行安装在 Windows 7 计算机上的 docker 工具箱,我正在尝试从外部(win 桌面)访问 docker,以便我可以让 GUI 应用程序正常工作(假设我们将使用 Firefox 进行测试)如您所知, docker 没有随 Server X 一起提供,所以我发现解决方案是安装 xcygwin 来执行 X11 任务,然后通过 ssh 运行容器,以便它可以显示在我的 Windows 上。
问题是我无法正确设置显示,我可以:
export DISPLAY=:0.0
Run Code Online (Sandbox Code Playgroud)
并尝试了其他一些选项,例如导出到主机的 IP、导出到本地主机等。然后我通过运行 SSH 到我的 docker:
docker-machine ssh default -X
Run Code Online (Sandbox Code Playgroud)
(如果我没记错的话,-X 应该激活 x11 转发)
现在,我进入我的 docker,所以我简单地尝试通过运行如下命令来运行我的神奇 Firefox 容器:
docker run --rm -e DISPLAY=$DISPLAY devurandom/firefox
Run Code Online (Sandbox Code Playgroud)
我收到预期的错误:cannot open display
。
正确的!我没有在我的泊坞窗中设置显示!所以我做了 :
DOCKER=0.0
Run Code Online (Sandbox Code Playgroud)
我明白了Cannot open display: 0.0
!
我也尝试过这个,我无法弄清楚路径从哪里来,但是好吧..
docker run -ti -v /tmp/serverX:/tmp/ServerX -e DISPLAY=$DISPLAY ...
Run Code Online (Sandbox Code Playgroud)
运气不好,有人知道如何解决这个问题吗?
我安装了 x11vnc 然后执行 x11vnc 但是失败了
以下是错误信息
$x11vnc -display :0
08/05/2017 19:18:22 x11vnc version: 0.9.13 lastmod: 2011-08-10 pid: 7572
08/05/2017 19:18:22 XOpenDisplay(":0") failed.
08/05/2017 19:18:22 Trying again with XAUTHLOCALHOSTNAME=localhost ...
08/05/2017 19:18:22 ***************************************
08/05/2017 19:18:22 *** XOpenDisplay failed (:0)
*** x11vnc was unable to open the X DISPLAY: ":0", it cannot continue.
*** There may be "Xlib:" error messages above with details about the failure.
Run Code Online (Sandbox Code Playgroud)
我该如何解决错误?
|| 我不知道以下内容是否有帮助,但我希望如此
$ps wwwaux | grep auth
root 5276 0.0 0.0 119472 8532 tty7 Ss+ …
Run Code Online (Sandbox Code Playgroud) 我计划在远程服务器上的 docker 中运行 ROS Rviz,期望 Rviz GUI 显示在我的本地计算机上。但我无法完成。任何帮助,将不胜感激。
我在远程服务器上的 ROS docker 镜像基于 ros-melodic-desktop-full 镜像(根据ROS Using Hardware Acceleration with Docker,ros-melodic-desktop-full 已经包含 nvidia-docker2)。下面列出的是我的 Dockerfile:
FROM osrf/ros:melodic-desktop-full
# strace, xterm, mesa-utils are all for debugging X display. Especially, mesa-utils has glxinfo and glxgear
RUN apt-get update && apt-get install -y xauth strace xterm mesa-utils
# nvidia-container-runtime
ENV NVIDIA_VISIBLE_DEVICES \
${NVIDIA_VISIBLE_DEVICES:-all}
ENV NVIDIA_DRIVER_CAPABILITIES \
${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics
# QT_X11_NO_MITSHM is for running X server and X client on different machines.
ENV QT_X11_NO_MITSHM 1
ENTRYPOINT …
Run Code Online (Sandbox Code Playgroud) 我正在使用vscode 远程 ssh并通过 ssh 连接到我的服务器(集群中的节点)。我的本地机器是Windows,我的主机是ubuntu。我的 vscode 正在使用 python 进行编码。
我尝试了几周的时间来运行 python 代码并在调试控制台中显示图像,就像我们在普通终端或 jupyter 笔记本中所做的那样,但我注意到我根本无法在调试控制台中显示图像。这是一个玩具示例
import numpy as np
import matplotlib.pyplot as plt
img = np.random.rand(300,200)
plt.imshow(img);plt.show()
Run Code Online (Sandbox Code Playgroud)
基本上,当我尝试在调试控制台中执行操作时,plt.imshow(img);plt.show()
我要么什么也得不到,要么得到qt.qpa.screen: QXcbConnection: Could not connect to display localhost:0.0 Could not connect to any X display.
。我尝试了几种方法,例如使用 x11 extenson 或在 putty 中添加 x11 转发或在launch.json
. 然而,它们都不起作用。
我得出的结论是,vscode 远程 ssh 和 python 中的调试控制台还没有该功能。但如果您知道一种方法,请告诉我。
我希望我清楚在正常情况下显示图像是有效的,而在调试情况下则不起作用。请注意,当我进行调试时,我不想在调试控制台之外显示图像。
谢谢
remote-debugging python-3.x x11-forwarding vscode-debugger vscode-remote