從本機 Mac 使用 IDE 介面,編輯遠端 Linux 上的程式
Macbook 雖然好用,但跑一些程式很吃力。很多時候 code 還是在遠端的 linux 機器上,然後從本機 macbook terminal ssh 進去操作。
另一方面,從 terminal 用 vim 寫程式不免有些痛苦,如果能用 IDE 效率還是比較高。這邊有一個勉強可用的方法。
FUSE/SSHFS + Mount remote file system + Local IDE
- 安裝 FUSE for macOS + SSHFS
- 把遠端 Linux 的目錄 mount 到本機 Macbook 上,當做是本機的目錄了
- 開本機 Macbook 上的 IDE 讀取這個目錄
第一個就是去 https://osxfuse.github.io/ 安裝兩個 dmg 沒什麼問題。安裝後就可以執行第二步:
# 最一開始要先 mkdir </path/to/local>
# 當要 mount 時
$ sshfs -p <port> <user>@<remote host>:/path/in/remote /path/to/local -o defer_permissions,reconnect -o volname='<some name>'
# 不用的時候
$ umount /path/to/local例如我可能會在 Macbook 上做這個 alias
alias mountlinux='ssh ywlinux@192.168.0.100 -p 12345 "date" && sshfs -p 12345 ywlinux@192.168.0.100:/home/ywlinux /Users/ywmac/mnt/mylinux -o defer_permissions,reconnect -o volname="My Linux"'這個會把我的 Linux home mount 到我的 Macbook home 的 mnt/mylinux 底下。所以接著就可以對 /Users/ywmac/mnt/mylinux 操作。這邊會加 -o volname 是因為在 Mac Finder 裡面不會顯示目錄名,而是會顯示成這個 volname。如果 mount 多個目錄的時候比較好分辨。
最後第三步就是把遠端 Linux 目錄當做在本地,開本機的 IDE 來做事。
小問題
有一個小問題是 remote/local 的 interpreter 和 binary 不一樣。以 python 和 PyCharm 為例子:假設遠端 Linux 有裝 numpy,我的程式也用到 numpy,但是我的 Macbook 上並沒有裝 numpy,這樣我在用 PyCharm 的時候因為是用本機的 python interpreter,所以就無法追蹤 numpy 裡面的實作或是 auto-complete 裡面定義的函數 — 有時候這樣不大方便。
在這個例子
- 我試著用 “Add Local” 新增 python interpreter,指向 mounted Linux python path,但是會有 “Cannot set up a python SDK” 的錯誤。
- 用 PyCharm professional 版的可以解決(用 “Add Remote”),不過我沒有 professional 版的 subscription XD。
- 另一招是在本機裝一樣的 python library,這樣起碼 auto-complete, trace code 之類的還可以用
其他方法
除了上述 sshfs 的方法外,也有其他的可能,不過個人認為沒有特別好用
- 在 remote Linux 裝 IDE;從 local ssh -X 過去啟動,這樣 local 會有 X window (XQuartz):缺點是非常慢,很不實際,右鍵開選單,畫面的反應速度即使在同一個 LAN 下 + 256 color 都要兩三秒,不大能接受。但是這個的優點是可以用 IDE 的所有功能,而不光是拿來當厲害的編輯器來用
- 用 scp / rsync / git 來同步兩邊的 code:不像 mount 這麼直覺,而且一樣會有兩邊 interpreter 不一樣的問題。
不知道有沒有更好的方法
(2017/08/27 補充:同事提供另一些方法,自己都還沒試過,或許可以參考:
- VNC: 屬於在 linux 啟動,local mac 只是一個 client 的方法
- http://www.expandrive.com/ : 屬於把 linux drive mount 回 local 的方法,非免費
