由於近日在 Mac 上執行 SDL2 的時候遇到一些問題,發現這問題是在 Mac 上才會有的,到 Linux 上反而就沒事了,因此我打算直接使用 Docker ,並且藉由 X11 把畫面投影在 Mac 上。
以下是我踩過很多坑之後得到的作法!
$ docker run ubuntu:18.04
$ docker ps -a
你可以藉由第一個指令創建一個 ubuntu 18.04 的 container ,並且用第二個指令看到他的 container ID 。
$ docker start {container ID}
$ docker exec -it {container ID} /bin/bash
第一個指令會執行一個 docker 的 container ,第二個指令會給你一個該 container 的 CLI 。
如果你對 docker run
和 docker exec
有疑問的話,他倆的解釋如下:
docker run
creates a new container and optionally sets the initial command to run inside it.
docker exec
is used for running additional commands inside existing containers.
$ docker run -it ubuntu:18.04 /bin/bash
你甚至可以用這個指令直接創建並同時進入該 container 的 CLI 。
$ brew install --cask xquartz
$ sudo reboot
我使用 homebrew 去下載,下載完要記得 reboot !
之後可以用 command + space
去點擊開啟 XQuartz ,或是任何方法都行啦,打開它就行了。
因為我是要用 SDL2 ,所以我要載 SDL2 ,看你的需求,你也可能會用其他東西,反正這不是必要,這是給需要載 SDL2 的人看的。
$ apt upgrade
$ apt install libsdl2-dev libsdl2-2.0-0 -y;
$ apt install libjpeg-dev libwebp-dev libtiff5-dev libsdl2-image-dev libsdl2-image-2.0-0 -y;
$ apt install libmikmod-dev libfishsound1-dev libsmpeg-dev liboggz2-dev libflac-dev libfluidsynth-dev libsdl2-mixer-dev libsdl2-mixer-2.0-0 -y;
$ apt install libfreetype6-dev libsdl2-ttf-dev libsdl2-ttf-2.0-0 -y;
由於這個 ubuntu 什麼都沒有,你要自己裝
$ apt install git vim wget unzip
接著到了重頭戲啦~~
這邊我搞超級久
但到最後發現挺簡單的
首先你先到你自己的 Terminal ,如果你還在 container 的 CLI ,你就輸入 exit
就可以退出了。
到了 Terminal 你就輸入
$ docker exec -it -e DISPLAY=host.docker.internal:0 {container ID} /bin/bash
這樣代表你要在這個 container 中加入 DISPLAY 這個環境變數,如果你不這樣做,你其實也可以:
$ docker exec -it {container ID} /bin/bash
$ export DISPLAY=host.docker.internal:0
你可以直接進入 container 裡面 export DISPLAY 這個環境變數。
這邊順帶一提,你每一次進入 container 都必須這樣做,但如果你覺得這樣每次都要做很笨,你可以直接修改 container 的 .bashrc
$ vim ~/.bashrc
## 修改 .bashrc ,在文件尾部加上
export DISPLAY=host.docker.internal:0
這麼一來每一次開啟他都會自動幫你 export DISPLAY 了喔!
好接著呢你到 XQuartz 裡面輸入:
$ xhost +localhost
最後你到你的 container 去執行你的 SDL 程式或是任何 GUI ,你就可以順利看到你可以在你的 Mac 上看到 container 的畫面了!
太開心了吧