如何指定显示?

Léo*_* 준영 54 x11

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

Error: no display specified 
Run Code Online (Sandbox Code Playgroud)

我想打开很多显示器,仍然显示stdout每个程序.

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

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

$ export DISPLAY=yourmachine.yourdomain.com:0.0

$ firefox &
Run Code Online (Sandbox Code Playgroud)

什么是yourmachineyourdomain.com在命令?

pax*_*blo 69

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

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

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

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

xeyes -display paxbox1.paxco.com:0.0
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

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   | |  |
|  | +-----------+ |  | +-----------+ |  |
|  +---------------+  +---------------+  |
|                                        |
+----------------------------------------+
Run Code Online (Sandbox Code Playgroud)

这里有一台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
Run Code Online (Sandbox Code Playgroud)

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

  • 我们曾经在没有正确安装X显示服务器的同事上玩过的一个技巧是使用他们的IP地址在他们的屏幕上打开"xeyes"(一双眼睛看向他们的鼠标光标),或者更好的,`xroach`,这会产生大量的屏幕上的蟑螂,当你发现它们时会很快在窗户后面乱窜:-) (2认同)
  • 对于其他来这里寻求澄清术语"监视器","屏幕","显示"等的人,维基百科文章的这一部分很有用:https://en.wikipedia.org/wiki/X_Window_System#Nomenclature (2认同)

Pab*_*ruz 18

$ export DISPLAY=yourmachine.yourdomain.com:0.0
$ firefox &
Run Code Online (Sandbox Code Playgroud)

  • 只需要添加注释,如果您有第二台显示器等,可以将:0.0更改为":0.1". (8认同)
  • 同样,如果您运行多个X会话,则可以使用:1.0,:2.0等在特定会话上启动应用程序. (2认同)

Tob*_*biX 14

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

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

  • 我建议使用这个解决方案,因为它更简单. (2认同)

小智 12

尝试

export DISPLAY=localhost:0.0
Run Code Online (Sandbox Code Playgroud)

  • `export DISPLAY =:0.0` (5认同)
  • @sreenath 如果我的本地机器是服务器(没有 GUI),而我的远程机器是我想在其上启动 firefox 的 Ubuntu 桌面怎么办? (2认同)

小智 6

尝试安装xorg-x11-xauth包.

  • 它必须安装在您要连接的机器上,而不是安装在您想要看到 X11-Gui 的机器上。 (3认同)

Amm*_*var 6

通过登录到您的服务器

ssh -X root@yourIP
Run Code Online (Sandbox Code Playgroud)

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

X11UseLocalhost no
Run Code Online (Sandbox Code Playgroud)

重新启动sshd。对于CentOS(检查您的发行版

/sbin/service sshd restart
Run Code Online (Sandbox Code Playgroud)

检查您的显示

echo $DISPLAY
Run Code Online (Sandbox Code Playgroud)

你应该看到这个

yourIP:10.0
Run Code Online (Sandbox Code Playgroud)

请享用

firefox
Run Code Online (Sandbox Code Playgroud)

了解更多信息

  • 你能解释一下为什么这行`X11UseLocalhost no`吗? (3认同)

And*_*rew 5

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

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


Jps*_*psy 5

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

您最有可能缺少包裹xauthxorg-x11-xauth。尝试使用以下方法将其安装在远程计算机上:

sudo apt-get install xauth
Run Code Online (Sandbox Code Playgroud)

要么

sudo apt-get install xorg-x11-xauth
Run Code Online (Sandbox Code Playgroud)

之后,重新启动SSH连接。别忘了使用,SSH -X以便X Window输出转发到本地计算机。

现在,echo $DISPLAY再次尝试查看$ DISPLAY是否已由SSH守护程序自动设置。它应该显示一条带有IP地址和端口的行。


小智 5

我今天也遇到了类似的问题。因此,这是一个简单的解决方案:在对计算机执行SSH时,只需添加Ctrl-即可Y

ssh user@ip_address -Y
Run Code Online (Sandbox Code Playgroud)

登录后,输入firefox &。而且你很好。