首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在远程连接中使用rviz“无法连接到任何X显示器”。

在远程连接中使用rviz“无法连接到任何X显示器”。
EN

Stack Overflow用户
提问于 2021-07-01 16:03:31
回答 2查看 2K关注 0票数 1

我正在尝试使用rviz,方法是使用ssh进行远程连接。当我执行命令rosrun rviz rviz时,会出现以下错误:

QStandardPaths:未能设置,默认为‘/tmp/运行时-根’qt.qpa.screen: QXcbConnection:未能连接到显示,无法连接到任何X显示器。

我已经在ssh连接期间通过-X添加了ssh myusername@host -X标志,但是没有什么变化。

我不知道还能做些什么,所以任何帮助都会受到欢迎。

我正在一台Mac电脑(macOS Catalina)上工作,我正在一个工作站上和Docker一起工作,我的图像有Ubuntu18.04和ROS旋律。

提前谢谢你。

编辑:

我只是尝试在工作站上本地执行rviz,并出现了相同的错误,因此我认为ssh连接不是问题。问题是否是码头工人或工作站(Nvidia DGX站)造成的?可能是因为许可问题吗?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2021-09-23 09:29:24

我目前还不知道码头的情况,但我为您做了以下工作:

代码语言:javascript
复制
user@local $ export ROS_MASTER_URI=http://your_remote's_hostname:11311

user@local $ rosrun rviz rviz

有关这两台机器上的详细信息+ ip配置,请参见https://wiki.ros.org/ROS/NetworkSetup

票数 1
EN

Stack Overflow用户

发布于 2021-07-02 17:31:50

更新: 这里是关于在docker和MAC中运行GUI应用程序的一些指导,可能很有用(如果您已经看过它)。

我有一个带有ROS的对接容器,用于运行rviz和其他UI应用程序(ROS的基于QT的应用程序在KDE中不起作用)。

docker-compose.yml包含以下内容:

代码语言:javascript
复制
##############
version: "3.8"

services:
  ros:
    container_name: ros1
    network_mode: host
    # I created my own image, with my own user, etc
    image: YOUR_IMAGE
    volumes:
      # you can ignore this line if you want (I'll explain below)
      # - /home/ichramm/devel/robots:/home/ichramm/devel/robots
      - /etc/localtime:/etc/localtime:ro
      - /tmp/.X11-unix:/tmp/.X11-unix:ro
      - /home/ichramm/.Xauthority:/home/ichramm/.Xauthority:ro
      - /run/user/1000:/run/user/1000:ro
      - /run/user/1000/bus:/run/user/1000/bus:ro
    command: /entrypoint.sh
    environment:
      USER: ichramm
      DISPLAY: ${DISPLAY}
      XDG_RUNTIME_DIR=/tmp/runtime-${USER}
      DBUS_SESSION_BUS_ADDRESS: unix:path=/run/user/1000/bus
    devices:
      #- "/dev/ttyUSB0:/dev/ttyUSB0"
      #- "/dev/dri/card0:/dev/dri/card0"
      #- "/dev/dri/card1:/dev/dri/card1"

您应该尝试将已安装的卷映射到您的系统。我知道你有MAC,这意味着这可能不适合你。

这对我有用,但我不使用ssh,我只使用两个脚本:

1.

代码语言:javascript
复制
❯ cat docker-run.sh
#!/bin/bash

docker exec -ti -w $(pwd) ros1 ./wrapper.sh $@
代码语言:javascript
复制
❯ cat wrapper.sh 
#!/bin/bash

export XDG_RUNTIME_DIR=/tmp/runtime-$USER

source env.sh

$@

为了使其工作,您需要以下内容:

  1. 在容器中挂载工作目录(请参阅上面的注释行)
  2. 有一个文件env.sh,它来源于ROS的setup.bash和工作区devel/setup.bash

当然,使用这些脚本的经验是有限的,这就是为什么我也直接使用以下方法进入码头:

代码语言:javascript
复制
❯ cat enter-env.sh 
#!/bin/bash

docker exec -ti -w /home/ichramm/devel/robots ros1 /bin/bash

这只是因为容器的目录结构与主机的目录结构相匹配(请注意,我只是挂载了开发目录)。我还在主机中添加了一个名为UID和GID的用户,以防止文件权限出现问题。

如果你不能使它工作,我建议你转向一个VM。只需在没有UI的情况下安装Ubuntu20.04(稍后可以使用sudo systemctl set-default multi-user禁用它),并在X转发中使用SSH。我使用了这个设置,切换到了docker,并且仍然有VM,以防发生什么事情。

更新:在考虑做一些可能不安全的事情,比如安装.Xauthority。它对我有效,因为没有其他人可以访问我的电脑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68213504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档