问题
最近一般用笔记本(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 即可:
这个问题就这样解决了!