從本機 Mac 使用 IDE 介面,編輯遠端 Linux 上的程式

ywchen
ywchen
Aug 25, 2017 · 4 min read

Macbook 雖然好用,但跑一些程式很吃力。很多時候 code 還是在遠端的 linux 機器上,然後從本機 macbook terminal ssh 進去操作。

另一方面,從 terminal 用 vim 寫程式不免有些痛苦,如果能用 IDE 效率還是比較高。這邊有一個勉強可用的方法。

FUSE/SSHFS + Mount remote file system + Local IDE

  1. 安裝 FUSE for macOS + SSHFS
  2. 把遠端 Linux 的目錄 mount 到本機 Macbook 上,當做是本機的目錄了
  3. 開本機 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 裡面定義的函數 — 有時候這樣不大方便。

在這個例子

  1. 我試著用 “Add Local” 新增 python interpreter,指向 mounted Linux python path,但是會有 “Cannot set up a python SDK” 的錯誤。
  2. 用 PyCharm professional 版的可以解決(用 “Add Remote”),不過我沒有 professional 版的 subscription XD。
  3. 另一招是在本機裝一樣的 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 的方法,非免費

)

ywchen

Written by

ywchen

每天都可以學到新東西 — 因為會的東西太少

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade