终于又到工作日了,工作有时候是个保护伞,可以保护我执行自己的计划而不被干扰。当然如果仅以此来逃避责任,这就不是保护伞了,而是借口,但再深入一层,这个责任也确实得是一种责任,深入到最后就是价值判断的问题,想多了脑仁疼。这世上有多少好事是被以假乱真给坏了的。
今天启动ubuntu,在没有登录的情况下尝试用teamviewer远控,但总连不上。手工登录ubuntu后再远控,就可以连上了。要是放在正式部署的环境下,这样的远控意义何在呢?teamviewer肯定不限于此,遂一番度娘,虽然还是没有修正这个问题,但找到了替代方案,且开了眼界满足了好奇心。
先说一个网上找到的解决方案:
sudo gedit /etc/gdm3/custom.conf
将WaylandEnable=false这行注释取消,重启即可
WaylandEnable上方有一行注释:# Uncomment the line below to force the login screen to use Xorg,看来导致系统重启后teamviewer无法远控的原因是ubuntu的登录会话中默认接受使用wayland协议的x server进行连接,wayland相比xorg更新,ubuntu比较激进,尝试新的东西,但wayland目前还有很多应用不支持,teamviewer显然包括在不支持之列,换成xorg就可以了。这里涉及到一些linux图形界面的知识,包括x、x client、x server,GNOME、GDM等等,大概了解一下,感兴趣的可以看这篇文章。只要知道一点就够了,x server是发起远控的机器上运行的程序,x client是被远控的ubuntu上运行的程序(是不是和我们日常对客户端/服务器的理解正好相反),teamviewer目前不支持wayland的x server协议,ubuntu登录会话的图形界面是GDM,默认接受wayland协议的x server连接, 禁用wayland,使用默认的x11就可以了。然而实践证实,至少我这么修改后没什么卵用。怀疑可能是权限的问题,先放一放,以后说不定机缘巧合能找到问题根源。
teamviewer虽然用起来爽,但前提是能公费购买teamviewer许可证,那样可以在手机上也下载一个teamviewer,绑定设备后用手机就可以远控服务器了。算好了大部分懒人都还想从手机远控,免费版teamviewer刚好只能绑定两个设备,让你们尝到甜头后乖乖掏钱。既然用linux,就是图的开源社区丰富,商业软件改不了鸡贼本性,正好也有启动问题没解决,就再找个替代的开源方案吧。
ssh连接是最容易想到的,ubuntu默认安装了ssh客户端,需要自行安装一个服务端:sudo apt install openssh-server,修改一下配置文件,允许远程ssh连接,编辑/etc/ssh/sshd_config文件,找到#PasswordAuthentication yes,将注释取消,确保启用密码身份验证。保存后重启ssh服务:sudo service sshd restart。现在到windows操作系统下的cmd控制台中敲入ssh ubuntu的用户名@ubuntu的IP地址,回车后需要确认密码,cmd就华丽变身为bash了。ls一下可以看到默认是定位在登录用户的主目录,cd ..再..,可以切换到root目录下,为所欲为的感觉爽不爽。敲一个gedit看看能不能打开图形化的文本编辑器,不行。这时候就需要大名鼎鼎的Xming和Putty登场了(虽然我之前也不知道它俩的大名,以后知道了)。
Xming是一个虚拟显示器,Putty可以通过ssh连接ubuntu,并将图形界面的输出定向到Xming的虚拟显示器上。首先需要在ubuntu下配置ssh,允许ssh连接x11客户端(刚才研究teamviewer时扩展的linux图形界面相关知识这里派上用场了吧,至少知道这个x11与图形界面有关),还是刚才那个配置文件/etc/ssh/sshd_config,增加X11Forwarding yes这句。保存,重启sshd。(这里扩充一下,如果想从这台ubuntu上通过ssh client访问其它ssh server的图形界面,则需要将这个配置文件中ForwardAgent yes、ForwardX11 yes、ForwardX11Trusted yes这三行从注释中释放出来)。服务端配置好了,返回windows系统,下载Xming,国外站点下载慢可以打开迅雷下载,迅雷下载后没有后缀,添加.exe后缀就可以了。安装后打开XLaunch,无脑点击下一步,最后会看到windows右下角的系统托盘处有一个x图标,鼠标放上去后可以看到Xming Server:0.0的提示,记住这个号码,待会儿putty定向虚拟屏幕时就是填这个号码0。接着下载putty,安装后在配置界面依次打开Connection-->SSh-->X11,选中Enable X11forwarding,X display location中填上上一步要你记住的那个Xming虚拟显示器的号码,这里显示到本机,故填写localhost:0。在找到Session配置项,将ubuntu服务器的IP地址填写到IP Address栏中,在Saved Sessions栏填写一个名字(自己取)用来保存这些配置信息。好了,点击open,就可以打开ubuntu的bash了,gedit一下,可以看到这次没有报错,切换到Xming的虚拟屏幕里看看,gedit的光标已经在标题栏下闪动了。有了上周docker的摸索经验,如果也只把ubuntu服务器当做生产服务器,任何开发工作都不在ubuntu上进行,那gedit甚至连vi都是不需要的,有没有类似的命令可以从windows或者其他ubuntu上拷贝文件到生产服务器上呢?有了ssh当然是可以的,用scp命令,这个本来是linux主机之间的安全拷贝命令,在windows下也可以通过ssh实现文件和目录的上传下载。具体命令格式如下:
scp 本地文件路径 ubuntu用户名@ubuntu_IP地址:/home/xxx
这样就将指定的本地文件上传到了ubuntu的/home/xxx目录下了。如果需要目录整体上传,加上-r参数,递归拷贝的意思。捋一下思路,日常管理远程服务器,不需要图形化界面,那就只需要启用和配置好ubuntu上的ssh,在windows的cmd或者ubuntu上的bash用ssh连接远程ubuntu的bash进行进程管理,用scp修改ubuntu上的文件。善于提问的你可能要问,有没有类似scp的安全删除指令,刚才不是已经能ssh获得bash了吗,为所欲为不爽吗。大道至简,大功告成,从此无惧远控。
在这一顿折腾的过程中,还有了一个重大发现,win10操作系统可以建立子系统,子系统上就可以安装Linux,这个功能叫做wsl(windows subsystem for linux)。经过实测,通过wsl跑一个本地的ubuntu,要比在虚拟机上跑ubutun并通过ssh传输文件爽快多了,在wsl的ubuntu中,把windows的文件系统挂载在/mnt下,互传文件不要太爽,以后连vmware都可以省了啊。很有必要隆重介绍一下wsl,这个对于习惯了windows办公和开发环境,但又要在ubuntu上部署测试的人而言,实在太贴心了。
打开windows控制面板里的程序和功能设置,添加windows功能,选中“适用于windows的linux子系统“,确认后就会进行功能安装,安装后需要重启,然后再到微软商店里搜索ubuntu,选择ubuntu20.04进行安装。如果不重启,这里就没法进行安装。安装完毕后,在程序列表里就多了一个Ubuntu20.04LTS的程序,打开就是熟悉的bash,cd到/mnt目录下ls看看,电脑的几个硬盘分区都挂载过来了。这就意味着在wsl里,不需要再通过ssh的scp与宿主机互传文件了,在wsl的ubuntu中磁盘是打通了的。但有好奇的人又想,是不是在windows中也能找到这个子系统下的目录?的确可以,但找到了也不能直接去操作,因为linxu和windows的文件系统是不同的,微软在其中做了一些手脚,所以这个想法就打消吧,能从wsl中互通有无还不够吗,人不要太贪心。
有了这个wsl中的处女地,首先就是更换国内的apt源来进行首次耕耘(那个词叫什么来着)。怎么更新?windows的d盘根目录下新建一个txt文档,连同后缀一起改名为sources.list,把清华大学对应版本的源粘贴进去(详细可参考前面的日志)。进入wsl的bash(p.s.不仅可以从程序列表点击ubuntu图标进到wsl的bash,也可以直接cmd窗口中输入bash进入,有种windows和linux深度打通了的幻觉),输入sudo cp /mnt/d/sources.list /etc/apt/sources.list完成apt源更换,再次输入sudo apt update,通往开源世界的翅膀展开了。
要不要再在wsl里安装GNOME图形界面呢?除了研究ubuntu系统和GNOME的原理,其它看不出什么价值,毕竟都已经是强大的windows图形化系统的子系统了,还要GNOME干嘛呢?习惯ubuntu进行工作和开发的人也不会走windows挂子系统这么曲折的道路了。
在来看看wsl中ubuntu的网络情况,sudo apt install net-tools安装网络工具包,然后可以ifconfig,列出的网卡信息和windows的cmd下ipconfig列出的一模一样,再次有了双剑合璧的幻觉,不得不佩服微软的伟大,你们都说linux好,那我就彻底融入linux,人无我有,人有我也有,至少对于开发和运维测试而言,这一切都相当美好。