macOS使用XQuartz支持X11實現Linux圖形化界面顯示

前言

在Windows中相信你們已經很熟悉使用Xmanager(Xshell), MobaXterm, SecureCRT經過X11實現Linux圖形化界面顯示,個人需求是在macOS下使用iTerm2做爲Terminal實現X11圖形化界面顯示,網上大部分教程只提到安裝Xquartz但並無結合實際問題給出完整的解決步驟,我把實踐過程作了詳細的記錄方便你們按照最簡單的步驟實現Linux圖形化顯示效果。html

更新歷史

2020年11月20日 - 初稿python

閱讀原文 - https://wsgzao.github.io/post...linux


X11介紹

有些Linux服務器出於性能和效率的考慮,一般都是沒有安裝圖形化界面的,那麼圖形化程序在服務器上壓根兒就跑不起來,或者沒法直接顯示出來,這就很尷尬了!那麼如何解決這個問題呢?能夠基於X11 Forwarding技術 + MobaXterm/Xshell/SecureCRT/XQuartz 等第三方工具,就能夠輕鬆搞定,是否是很簡單?git

X協議

Linux 自己是沒有圖形化界面的,所謂的圖形化界面系統只不過中 Linux 下的應用程序。這一點和 Windows 不同。Windows 從 Windows 95 開始,圖形界面就直接在系統內核中實現了,是操做系統不可或缺的一部分。Linux 的圖形化界面,底層都是基於 X 協議。github

X 協議由 X server 和 X client 組成:chrome

  • X server 管理主機上與顯示相關的硬件設置(如顯卡、硬盤、鼠標等),它負責屏幕畫面的繪製與顯示,以及將輸入設置(如鍵盤、鼠標)的動做告知 X client。
  • X client (即 X 應用程序) 則主要負責事件的處理(即程序的邏輯)。

舉個例子,若是用戶點擊了鼠標左鍵,由於鼠標歸 X server 管理,因而 X server 就捕捉到了鼠標點擊這個動做,而後它將這個動做告訴 X client,由於 X client 負責程序邏輯,因而 X client 就根據程序預先設定的邏輯(例如畫一個圓),告訴 X server說:「請在鼠標點擊的位置,畫一個圓」。最後,X server 就響應 X client 的請求,在鼠標點擊的位置,繪製並顯示出一個圓。shell

X11 Forwarding

這麼繞,有啥意義呢?固然有!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實現X11圖形化界面顯示

# 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

Steps

  1. Install 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
  1. Launch 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.
  2. Lauch 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.
  1. Lauch terminal or iterm, use flag -Y instead of -X with ssh.
ssh -Y user@address

FAQ

  1. Why do I need to install 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.
  1. Why do I have to add environment DISPLAY?

Please see https://askubuntu.com/a/43225...

  1. Why do I have to use -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

  1. How to fix 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

linux服務器經過X11實現圖形化界面顯示

相關文章
相關標籤/搜索