如何指定显示?

时间:2009-04-24 03:36:46

标签: x11

当我通过SSH运行某些程序时,例如firefox &,我收到错误

Error: no display specified 

我想打开许多显示,仍显示每个程序的stdout

初步问题:如何指定显示以获得多个显示的程序?

Pablo Santa Cruz给出了以下代码作为解决方案。 我不明白。

$ export DISPLAY=yourmachine.yourdomain.com:0.0

$ firefox &

命令中的yourmachineyourdomain.com是什么?

12 个答案:

答案 0 :(得分:67)

X的工作方式与任何网络程序的工作方式相同。您有一个在特定计算机上运行的某些描述的服务器(在本例中为X显示服务器),并且您有X客户端(如firefox)尝试连接到该服务器以显示其信息。

通常(在“家庭”机器上),客户端和服务器在同一个盒子上运行,并且只有一个服务器,但X足够强大,不需要这样做。它是从一开始就内置的服务器/客户端分离构建的。

这允许你做一些奇妙的事情,比如登录你的盒子(在文本模式下)在地球的中途,告诉它显示服务器是你当前所在的盒子,瞧,窗户突然启动出现在当地。

为了让客户与用户进行交互,它需要知道如何查找服务器。有很多方法可以做到这一点。许多客户允许-display--display选项指定它:

xeyes -display paxbox1.paxco.com:0.0

如果未特别给出显示,许多人将使用DISPLAY环境变量。您可以像任何其他变量一样设置此变量:

DISPLAY=paxbox1.paxco.com:0.0; export DISPLAY # in .profile
export DISPLAY=paxbox1.paxco.com:0.0 # in your shell
DISPLAY=paxbox1.paxco.com:0.0 firefox & # for that command (shell permitting)

DISPLAY变量的第一部分只是显示服务器机器的地址。它遵循与任何其他IP地址相同的规则;它可以是可解析的DNS名称(包括localhost)或特定的IP地址(例如192.168.10.55)。

第二部分是X特定的。它提供要使用的X“显示”(X服务器)编号和屏幕编号。第一个(显示号码)通常是指包含一个或多个屏幕但具有单个键盘和鼠标(即,一个输入流)的一组设备。屏幕编号通常给出该组内的特定屏幕。

一个例子是:

+----------------------------------------+
|paxbox1.paxco.com|                      |
+-----------------+                      |
|                                        |
|  +----------+----+  +----------+----+  |
|  |Display :0|    |  |Display :1|    |  |
|  +----------+    |  +----------+    |  |
|  |               |  |               |  |
|  | +-----------+ |  |               |  |
|  | |Screen :0.0| |  |               |  |
|  | +-----------+ |  |               |  |
|  | +-----------+ |  |               |  |
|  | |Screen :0.1| |  |               |  |
|  | +-----------+ |  |               |  |
|  | +-----------+ |  | +-----------+ |  |
|  | |Screen :0.2| |  | |Screen :1.0| |  |
|  | +-----------+ |  | +-----------+ |  |
|  | +-----------+ |  | +-----------+ |  |
|  | |Screen :0.3| |  | |Screen :1.1| |  |
|  | +-----------+ |  | +-----------+ |  |
|  | +-----------+ |  | +-----------+ |  |
|  | | Keyboard  | |  | |  Keyboard | |  |
|  | +-----------+ |  | +-----------+ |  |
|  | +-----------+ |  | +-----------+ |  |
|  | |   Mouse   | |  | |   Mouse   | |  |
|  | +-----------+ |  | +-----------+ |  |
|  +---------------+  +---------------+  |
|                                        |
+----------------------------------------+

这里有一台带有两台显示服务器的机器(paxbox1.paxco.com)。第一个有四个屏幕,第二个有两个。那么可能性是:

DISPLAY=paxbox1.paxco.com:0.0
DISPLAY=paxbox1.paxco.com:0.1
DISPLAY=paxbox1.paxco.com:0.2
DISPLAY=paxbox1.paxco.com:0.3
DISPLAY=paxbox1.paxco.com:1.0
DISPLAY=paxbox1.paxco.com:1.1

取决于您希望显示实际窗口的位置以及要使用的输入设备。

答案 1 :(得分:18)

$ export DISPLAY=yourmachine.yourdomain.com:0.0
$ firefox &

答案 2 :(得分:11)

当您通过SSH连接到另一台计算机时,您可以在SSH中启用X-Forwarding,以便通过SSH隧道将X窗口加密转发回您的计算机。您可以通过将-X附加到ssh命令行或在SSH配置文件中设置ForwardX11 yes来启用X转发。

要检查X-Forwarding是否已成功设置(服务器可能不允许),只需尝试echo $DISPLAY输出类似localhost:10.0的内容。

答案 3 :(得分:9)

尝试

export DISPLAY=localhost:0.0

答案 4 :(得分:6)

尝试安装 xorg-x11-xauth 包。

答案 5 :(得分:5)

我遇到了类似的问题,所以也许这个答案对某人有帮助。

Error: no display specified错误的原因是Firefox正在启动,但远程主机上没有运行X服务器(GUI)。您可以使用X11转发在远程主机上运行Firefox,但在本地主机上显示它。在Mac OS X上,您需要下载XQuartz才能使用X11转发。没有它,你就不会设置$DISPLAY变量,所以如果你尝试echo $DISPLAY,它将是空白的。

答案 6 :(得分:4)

通过SSH连接时,请不要尝试手动设置$ DISPLAY 如果您通过SSH -X连接并且$ DISPLAY保持为空,这通常意味着无法建立加密通道。

您很可能错过了包xauthxorg-x11-xauth。尝试使用以下命令将其安装在远程计算机上:

sudo apt-get install xauth

sudo apt-get install xorg-x11-xauth

在此之后重新启动SSH连接。不要忘记使用SSH -X,以便将X Window输出转发到本地计算机。

现在再次尝试echo $DISPLAY以查看是否已由SSH恶魔自动设置$ DISPLAY。它应该显示一行IP地址和一个端口。

答案 7 :(得分:4)

我今天遇到了类似的问题。所以,这是一个简单的解决方案: 在对机器进行SSH时,只需添加 Ctrl - Y

ssh user@ip_address -Y

登录后,输入firefox &。 你很高兴。

答案 8 :(得分:3)

通过

登录您的服务器
ssh -X root@yourIP

编辑/ etc / ssh / sshd_config文件,并将此行添加到其中。

X11UseLocalhost no

重新启动sshd。 for CentOS(check your distribution

/sbin/service sshd restart

检查你的DISPLAY

echo $DISPLAY

你应该看到这个

yourIP:10.0

享受

firefox

for more info

答案 9 :(得分:1)

即使我在CentOS 6.8中遇到同样的问题。

object

结束当前会话并在mobiXterm等工具中打开另一个会话。确保会话在该工具中启用了X11转发。

答案 10 :(得分:0)

我通过vnc更多地了解X11。 要指定显示以获得多个显示的程序, export DISPLAY = IP:DisplayNum.ScreenNum

例如,

vncserver :2
vncserver -list
echo '$DISPLAY'=$DISPLAY 
export DISPLAY=:2  # export DISPLAY=IP:DisplayNum or export DISPLAY=:DisplayNum for localhost; So that can vnc connect and see the vnc desktop :2 if $DISPLAY is not :2.
echo '$DISPLAY'=$DISPLAY

答案 11 :(得分:0)

在输入 firefox 之前我正在使用 xming 服务器,请使用以下命令 导出显示=0:0

相关问题