2009-04-24 85 views
45

当我运行通过SSH一些程序,如firefox &,我得到一个错误如何指定显示器?

Error: no display specified 

我想开很多显示器,仍显示出每个程序的stdout

初始问题:如何指定显示屏以获得多显示程序?

巴勃罗圣克鲁斯给了我下面的代码作为一种解决方案。 我不明白。

$ export DISPLAY=yourmachine.yourdomain.com:0.0 

$ firefox & 

什么是yourmachine,并在命令yourdomain.com

回答

57

是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

**你为什么需要这个`DISPLAY = paxbox1.paxco.com:0.0;导出DISPLAY`在你的个人资料中?** ---该代码的目的是DISPLAY = paxbox1.paxco.com:0.0 firefox&`在Firefox中查看许多显示? – 2009-08-04 00:20:02

+0

(1)DISPLAY需要设置*某处*。如果对你来说总是一样的话,那就在你的个人资料中进行。 (2)这为只有一个firefox命令设置了DISPLAY * only *。 – paxdiablo 2009-08-04 00:43:12

+0

我倾向于做的是在我的个人资料中将DISPLAY设置为“:0.0”(因为这是我99%的时间使用的一个。当需要在不同的显示器上运行程序时,我使用“DISPLAY =其他:0.0 Firefox和” – paxdiablo 2009-08-04 00:56:01

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

只是为了添加注释,可以改变:0.0〜“:0.1”,如果你有一个第二监视器等 – 2009-04-24 03:41:05

+2

同样地,如果有多个X会话中运行,则可以使用:1.0,2.0,等在特定的会话上启动应用程序。 – James 2009-04-24 03:56:44

11

当你连接到另一台机器通过SSH,你可以启用X-转发的SSH,让X窗口进行转发通过SSH隧道加密回到你的机器。您可以通过附加-X到SSH命令行或在你的SSH配置文件设置ForwardX11 yes启用X转发。

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

+2

我会推荐使用这个解决方案,因为它更简单。 – Antonio 2016-02-10 14:37:50

8

尝试

export DISPLAY=localhost:0.0 
+3

`export DISPLAY =:0.0` – 2014-05-03 13:09:10

+1

@sreenath如果我的本地计算机是服务器(无GUI),而我的远程计算机是要在其上启动Firefox的Ubuntu桌面? – 2014-06-03 09:17:58

4

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

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

1

即使我在CentOS 6.8中也遇到同样的情况。

yum reinstall xorg* 

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

1

请不要在通过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以查看$ DISPLAY是否已由SSH恶魔自动设置。它应该显示一行IP地址和一个端口。

0

我通过vnc了解了X11更多。 指定显示获得许多显示节目, 出口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 
2

我今天遇到类似的问题。所以,这里有一个简单的解决方案: 虽然做SSH的机器,只需添加按Ctrl - ÿ

ssh [email protected]_address -Y 

登录后输入firefox &。 你很好走。

1

通过

ssh -X [email protected] 

编辑/ etc/ssh/sshd_config文件登录您的服务器,该行添加到它。

X11UseLocalhost no 

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

/sbin/service sshd restart 

检查显示器

echo $DISPLAY 

,你应该可以看到这个

yourIP:10.0 

享受

firefox 

for more info