$DISPLAY
是否同時指定 X 伺服器的監聽套接字和渲染目標?
不要混淆實際顯示(您的顯示器)、X11 伺服器(“顯示”)以及通過套接字或其他方式訪問它的方式:通過 ssh 轉發的 DISPLAY=:0 和 DISPLAY=localhost:10 參考相同的顯示/xserver、相同的影片卡和相同的監視器。
$DISPLAY
用於啟動 X 伺服器。是否$DISPLAY
同時指定 X 伺服器的監聽套接字和渲染目標?如果是,它如何指定兩種不同的事物?
$DISPLAY
指定一個套接字。例如 if$DISPLAY
is:40
,它對應一個埠 6040 或一個以 40 命名的 unix 域套接字。是
$DISPLAY
指定 X 伺服器的監聽套接字的套接字嗎?
- 還應該指定一個渲染目標(即X 伺服器將在
$DISPLAY
其上渲染某些東西的顯示設備或其模擬器)?是否正確
X client <-> X server <-> rendering target
X 客戶端不能直接與渲染目標通信,而是通過 X 伺服器間接通信?
謝謝。
AX 伺服器據說是在顯示器中啟動的
不會。X 伺服器為 X 客戶端提供通信端點。X 客戶端通過命令行選項或環境變數選擇他們想要與之通信的伺服器。從客戶端來看,這是它使用的“顯示”,因此選項通常
-display
為 ,環境變數為$DISPLAY
,相關庫函式名稱中帶有“顯示”。通信既可以通過網路(不安全,而且目前大部分已禁用),也可以在本地進行。提供這兩種端點的 unix 構造稱為“socket”(請參閱 參考資料
man 2 socket
)。“顯示”值編碼(1)主機,(2)映射到眾所周知的埠號或 unix 域路徑(用於本地通信)的顯示編號,(3)螢幕編號(今天主要0
是預設情況下,因為大多數 X 伺服器不提供多個螢幕),格式為hostname_or_address:display_number.screen_number
.許多客戶端可以連接到單個伺服器提供的同一個“套接字”,所以
定址 X 伺服器的顯示的“套接字”(在第一句中)和由 X 伺服器創建並連接到 X 客戶端(在第二句中)的“套接字”是同一個“套接字”嗎?
沒有意義。
編輯
是否正確
X client <-> X server <-> rendering target
X 客戶端不能直接與渲染目標通信,而是通過 X 伺服器間接通信?
假設您的意思是“渲染目標”“可以在監視器上顯示為圖形的某些硬體”,那麼是的,這基本上是正確的。
然而,X 伺服器並沒有以某種方式與“渲染目標”通信,X 伺服器獨占控制“渲染目標”(通常是顯卡上用作幀緩衝區的一塊記憶體,以及一塊硬體在一個或多個監視器上顯示幀緩衝區,所有這些都通過各種驅動程序和核心層抽像出來)。
同樣,這也是原始 X 協議的情況。隨著 OpenGL 擴展的出現,X 客戶端可以使用 X 協議的擴展來更直接地訪問“渲染目標”(GPU 的核心驅動程序),繞過 X 伺服器。而今天,大多數應用程序都使用 OpenGL 來加速圖形……這就是為什麼一旦 X 客戶端通過網路連接到另一台機器上的 X 伺服器時,您就會失去硬體加速。