我怎样才能指定一个显示?
当我通过SSH运行一些程序,如firefox &
,我得到一个错误
Error: no display specified
我想打开许多显示器,仍然显示每个程序的stdout
。
初始问题:如何指定显示屏以获得多显示的程序?
帕布罗圣克鲁斯给我下面的代码作为解决scheme。 我不明白。
$ export DISPLAY=yourmachine.yourdomain.com:0.0 $ firefox &
什么是yourmachine
和yourdomain.com
在命令?
X的工作方式与任何networking程序的工作方式相同。 你有一个服务器的描述(在这种情况下,X显示服务器)在一台特定的机器上运行,你有X客户端(如Firefox),试图连接到该服务器,以获取他们的信息显示。
通常(在“家”机器上),客户机和服务器在同一个机器上运行,并且只有一个服务器,但是X足够强大,这不需要发生。 它是从一开始就内置的服务器/客户端分离的。
这可以让你做这样的奇妙的事情,比如login到你的盒子(在文本模式)在行星的中途,告诉它显示服务器是你当前的盒子,瞧,窗户突然开始出现在本地。
为了使客户端与用户进行交互,需要知道如何find服务器。 有很多方法可以做到这一点。 许多客户端允许使用-display
或--display
选项来指定它:
xeyes -display paxbox1.paxco.com:0.0
如果没有明确给出显示,许多人将使用DISPLAY
环境variables。 你可以设置这个variables像其他任何:
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
variables的第一部分就是显示服务器机器的地址。 它遵循与其他IP地址相同的规则; 它可以是可parsing的DNS名称(包括localhost
)或特定的IP地址(如192.168.10.55)。
第二部分是X特定的。 它给出X“显示”(X服务器)号码和屏幕号码使用。 第一个(显示号码)通常是指包含一个或多个屏幕但具有单个键盘和鼠标(即,一个inputstream)的一组设备。 屏幕号通常给出该组内的特定屏幕。
一个例子是:
+----------------------------------------+ |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
取决于你希望你的实际窗口出现在哪里以及你想使用哪个input设备。
$ export DISPLAY=yourmachine.yourdomain.com:0.0 $ firefox &
当您通过SSH连接到另一台计算机时,可以在SSH中启用X转发,以便X窗口通过SSH隧道encryption转发回您的计算机。 您可以通过将-X
附加到ssh命令行或在SSHconfiguration文件中设置ForwardX11 yes
来启用X转发。
要检查X-Forwarding是否成功设置(服务器可能不允许),只要echo $DISPLAY
输出类似localhost:10.0
东西就可以了。
尝试
export DISPLAY=localhost:0.0
尝试安装xorg-x11-xauth软件包。
我碰到类似的问题,所以也许这个答案会帮助别人。
Error: no display specified
原因Error: no display specified
错误是Firefox正在启动,但远程主机上没有运行X服务器(GUI)。 您可以使用X11转发在远程主机上运行Firefox,但将其显示在本地主机上。 在Mac OS X上,您需要下载XQuartz才能使用X11转发。 没有它,你将不会有一个$DISPLAY
variables集,所以如果你尝试echo $DISPLAY
,它将是空白的。
即使我在CentOS 6.8也遇到同样的情况。
yum reinstall xorg*
结束当前的会话,并使用mobiXterm等工具打开另一个会话。 确保会话在工具中启用了X11转发。
通过SSH连接时,请勿尝试手动设置$ DISPLAY。
如果通过SSH -X
连接,并且$ DISPLAY保持为空,则通常意味着不能build立encryption通道。
很有可能你错过了包xauth
或者xorg-x11-xauth
。 尝试使用以下命令将其安装在远程机器上:
sudo apt-get install xauth
要么
sudo apt-get install xorg-x11-xauth
在那之后,重新启动你的SSH连接。 不要忘记使用SSH -X
以便将X Window输出转发到本地计算机。
现在再次尝试echo $DISPLAY
来查看$ DISPLAY是否已经被SSH恶魔自动设置。 它应该显示一个IP地址和一个端口的行。
我通过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