問題
最近一般用筆記本(Windows系統)遠程連接到服務器(Ubuntu系統)上進行開發。代碼和開發工具都在服務器上。
使用的終端是MobaXterm。不得不說這個軟件真的好用。支持SSH、VNC、RDP等等。而且它還自帶X11 server。當你通過SSH登錄后,在命令行里執行一個需要顯示圖形界面的程序時,如果使用的是普通終端,那么就會報錯,因為你並沒有連接到遠端的圖形桌面。而MobaXterm則不報錯,並會在本地打開那個程序的圖形界面。注意是在本地Windows系統里打開。例如,用MobaXterm SSH登錄某台遠程的Ubuntu機器后,在命令行里輸入gedit
(一款ubuntu自帶的圖形文本編輯器)並回車,那么就能直接在本地的Windows系統里顯示出一個 gedit 的窗口。這個窗口與終端窗口是相互獨立的。如下圖所示。

這個功能非常方便,不需要登錄遠程桌面就可以使用遠端的帶圖形界面的程序。
但是問題也來於此。使用這個功能打開的遠程圖形界面,在其中進行編輯時,會發現一個嚴重影響編輯效率的問題。那就是“選中即復制”。也就是說,用鼠標選中任意一段文字或者代碼,那么這部分字符會自動被復制。
這會造成什么問題呢?
比如說:當你復制了一段代碼,想要替換掉編輯器中原本的一段代碼。如果你先把想要被替換的部分選中,再按ctrl + V粘貼,那么不好意思。你剛才的選中動作已經把這段字符復制了。所以你粘貼上去的還是這段字符,沒有變化。而且你之前的復制的那段字符,也被最近復制的內容沖掉了。你得重新去復制那段字符,然后先把要替換的部分刪掉,再粘貼。
又比如說:當你在閱讀代碼的時候,可能會經常習慣雙擊選中一段字符,可能是一個變量、函數或者數字,選中之后,可以用來搜索,或者高亮顯示相同的字符。這在編輯或者閱讀代碼的時候是常用的操作。但是“選中即復制”會導致你在不停地復制,很可能也影響你原本復制的其他東西。
這個問題困擾了我很久,簡直惡心死了。因為上面描述的兩種操作就是我個人的習慣。結果導致沒法正常復制粘貼。我一開始一直以為這是編輯器或者IDE的問題。直到查到問題所在。
解決方法
解決方法其實很簡單。導致這個問題的原因是Linux的X11圖形界面對於剪切板的設計。在X11系統中,有三個用於臨時保存內容的“剪切板”,分別是:
- PRIMARY:按下鼠標中鍵復制、粘貼。或者選擇復制,右鍵粘貼。
- SECONDARY:沒有使用
- CLIOPBOARD:用戶顯式地按下 ctrl+c 或者菜單里的復制按鈕時復制到此處。
所以“選中即復制”的問題就出在 PRIMARY 上。這種設計雖然在有些時候非常方便快捷(例如命令行里,因為 ctrl+c 的作用是殺死當前程序),但是在遠程使用x11圖形界面的時候,就很討厭了。
在MobaXterm的設置里,關掉 PRIMARY 即可:

這個問題就這樣解決了!