1. 程式人生 > >Gtk-WARNING **: cannot open display問題的解決

Gtk-WARNING **: cannot open display問題的解決

1. SDL安裝

2. ssh連線配置,x11forwarding

與VNC方式不同,qemu-kvm利用圖形介面方式開啟虛擬機器,會以彈出視窗的方式與虛擬機器互動。某些情況下,工作環境是通過各種term程式利用ssh登入到伺服器,這時執行qemu的啟動程式,通常會產生“Gtk-WARNING **: cannot open display”的錯誤。

造成這種情況的原因有很多,簡單來說,伺服器與本機環境之間要互相收發“圖形介面”資訊,兩端要規定一種特殊的資訊約定,用於編寫和翻譯圖形介面資訊,這就需要一個軟體來完成這個特殊的編解碼,此處一般為SDL,同時建立連線的程式還必須允許該軟體在這個連線上可信。打個比方,兩個國家間互相運輸貨物,貨物必須經過拆解才能放上船,到達後根據雙方約定可組裝起來以供使用。同時,兩國的海關需要允許貨物出關和入關。此處,SDL即為雙方的約定,ssh的安全機制為海關。

SDL是一個跨平臺的多媒體圖形聲音介面庫,開發者基於它開發上層圖形介面程式,只需底層平臺支援SDL庫。簡介:http://zh.wikipedia.org/wiki/SDL。專案主頁:http://www.libsdl.org/。

針對以上的幾個主要環節,任何一個環節出現問題,都會出現標題所示的提示資訊。所以,採取各個擊破的解決辦法:

1. SDL安裝問題,開發機與本機環境必須都支援SDL,在兩臺機器上正確安裝或更新SDL程式

2. ssh開啟X11Forwarding:

    Linux下/etc/ssh/sshd_config中,新增 X11Forwarding yes

    

    本機客戶端為一些桌面終端程式如Xshell,需要在ssh連線設定裡面勾選X11forwarding選項:

    

    Mac系統需要安裝X桌面X11-XQuartz(https://xquartz.macosforge.org/trac/wiki),在包括linux的使用X11的平臺上,SDL基於Xlib而編寫。某些時候需要保持ssh連線,所以在建立ssh連線時新增-Y選項或修改客戶端/etc/ssh/ssh_config的ForwardX11Trusted yes,新增信任項。

至此,我的幾種本機與伺服器情況基於以上步驟都解決了。