在Windows中相信你們已經很熟悉使用Xmanager(Xshell), MobaXterm, SecureCRT經過X11實現Linux圖形化界面顯示,個人需求是在macOS下使用iTerm2做爲Terminal實現X11圖形化界面顯示,網上大部分教程只提到安裝Xquartz但並無結合實際問題給出完整的解決步驟,我把實踐過程作了詳細的記錄方便你們按照最簡單的步驟實現Linux圖形化顯示效果。html
2020年11月20日 - 初稿python
閱讀原文 - https://wsgzao.github.io/post...linux
有些Linux服務器出於性能和效率的考慮,一般都是沒有安裝圖形化界面的,那麼圖形化程序在服務器上壓根兒就跑不起來,或者沒法直接顯示出來,這就很尷尬了!那麼如何解決這個問題呢?能夠基於X11 Forwarding技術 + MobaXterm/Xshell/SecureCRT/XQuartz 等第三方工具,就能夠輕鬆搞定,是否是很簡單?git
Linux 自己是沒有圖形化界面的,所謂的圖形化界面系統只不過中 Linux 下的應用程序。這一點和 Windows 不同。Windows 從 Windows 95 開始,圖形界面就直接在系統內核中實現了,是操做系統不可或缺的一部分。Linux 的圖形化界面,底層都是基於 X 協議。github
X 協議由 X server 和 X client 組成:chrome
舉個例子,若是用戶點擊了鼠標左鍵,由於鼠標歸 X server 管理,因而 X server 就捕捉到了鼠標點擊這個動做,而後它將這個動做告訴 X client,由於 X client 負責程序邏輯,因而 X client 就根據程序預先設定的邏輯(例如畫一個圓),告訴 X server說:「請在鼠標點擊的位置,畫一個圓」。最後,X server 就響應 X client 的請求,在鼠標點擊的位置,繪製並顯示出一個圓。shell
這麼繞,有啥意義呢?固然有!ubuntu
許多時候 X server 和 X client 在同一臺主機上,這看起來沒什麼。可是, X server 和 X client 徹底能夠運行在不一樣的機器上,只要彼此經過 X 協議通訊便可。因而,咱們就能夠作一些「神奇」的事情,好比像本文開頭談到的,在本地顯示 (X server),運行在服務器上的 GUI 程序 (X client)。這樣的操做能夠經過 SSH X11 Forwarding (轉發) 來實現。centos
X11 中的 X 指的就是 X 協議,11 指的是採用 X 協議的第 11 個版本。瀏覽器
# macOS安裝xquartz brew cask install xquartz # 啓動xquartz,實測`Allow connections from clients`選項非必須條件 Run Applications > Utilities > XQuartz.app # 設置DISPLAY環境變量 export DISPLAY=:0 # 沒有使用xquartz中terminal的話不會自動設置DISPLAY環境變量,可能會出現如下錯誤 [root@VM-2-11-centos ~]# firefox Failed to open connection to "session" message bus: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11 Running without a11y support! Error: no DISPLAY environment variable specified # ssh添加-Y flag登陸遠程主機 ssh -Y user@host # 登陸成功後可能出現如下錯誤,安裝xauth便可解決 ssh -Y root@192.168.117.148 X11 forwarding request failed on channel 0 # 遠程主機安裝xauth,以centos爲例,使用xclock能夠測試圖形化效果 yum install -y xauth xclock xclock # 若是須要瀏覽器支持安裝firefox或者chrome便可 yum install firefox firefox yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm /usr/bin/google-chrome-stable %U --no-sandbox
Xquartz
to get X11 support on MacOS. You can google Xquartz
and download it from its official site, or install using HomeBrew.brew cask install xquartz
Xquartz
. Go to Preference
-> Security
, click the box Allow connections from clients
. NOTE: You have to lauch Xquartz
with Allow connections from clients
enable everytime you want to ssh
to remote server with X11 forwarding support.terminal
or iterm
. Add environment DISPLAY
.# to add an environment entry only working on current terminal, use `export` export DISPLAY=:0 # to add an environment entry working on every terminal, # append `export DISPLAY=:0` to `.bashrc` or `.zshrc` in case you use zsh.
terminal
or iterm
, use flag -Y
instead of -X
with ssh
.ssh -Y user@address
Xquartz
?From https://stackoverflow.com/a/5...
XQuartz is standard. It used to come bundled with the OS, but Apple removed it back around Mavericks.
DISPLAY
?Please see https://askubuntu.com/a/43225...
-Y
instead of -X
?I got the following error when trying to run a python script which draws some curves using matplotlib
:
X Error of failed request: BadAccess (attempt to access private resource denied) Major opcode of failed request: 18 (X_ChangeProperty) Serial number of failed request: 12 Current serial number in output stream: 15
This problem is sovled when using -Y
instead of -X
.
Haven't got enough time to find exact explanation, just post a link for those who are curious:
Can't run 「ssh -X」 on MacOS Sierra
X11 forwarding request failed on channel 0
?Install X authority file utility
sudo yum install xauth
ssh returns message 「X11 forwarding request failed on channel 0」
Enable X11 forward to load images from remote server on MacOS Mojave