2009-04-24 65 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