何不动手搭建一个家庭服务器?记录期间的遇到的各种坑

大学生活永远是最忙的,也永远是最清闲的,每天总想着折腾这,折腾那。

家里的宽带用的是电信套餐,100M下行/20M上行,给公网IP。

比起腾讯云,阿里云10块钱一个月的学生机,才1M宽带小水管,利用家里的带宽资源简直不要太好。

这不,最近捡垃圾捡到一块搭载intel N3160的板子,就想着如何把它变作服务器,挂个网站、当个下载机用,连上客厅电视机就能当成家庭影院,没事还能在上面跑个MATLAB,训练下神经网络。

然后就走上了一条不归路,期间遇到了无数的大坑。。。

本文既作为记录自己遇到的坑来防止下次再踩进去,同时也希望能帮助到更多的人不要被坑,最后还悟出了一系列人生哲理。

来张全家福:

何不动手搭建一个家庭服务器?记录期间的遇到的各种坑


配置列表

二手板载intel N3160主板 ¥218

二手MSATA 32GB SSD ¥50

从旧笔记本拆下来的双2GB内存条 ¥0

某斐姓倒闭公司全新1TB 机械移动硬盘 ¥215

茂硕代工12V/4A DC电源 ¥25

加起来也就500RMB的样子

在路由器上配置DDNS以及端口映射(注意:实测湖北电信封了80,443,8080等端口)

CPU

Intel N3160的TDP才6W,支持最高3840*2160/30fps输出,能硬解4k以及x.265视频。非常适合作为家庭服务器。

何不动手搭建一个家庭服务器?记录期间的遇到的各种坑

从天梯图可以看出N3160性能是非常低的,大概相当于六七年前i3酷睿标压水平。与其同价位的J1900虽然性能稍强,但是J1900不支持4K输出,同时N3160的工艺更加先进,因此选择N3160。

SSD

我本着系统盘与数据盘分离的原则,买了这个MSATA SSD,但事后发现真的坑。

这种行为已经不是49年入国军了,几乎堪比1911年自阉进宫当太监。

现在主流支持NVME的SSD价格才1元/GB,一个二手的32G MSATA居然要价这么50元,当然这也是在tb上找到最划算的价格了。实测这个SSD的连续读写性能只比机械硬盘快那么一丢丢,但是4K 读写还是能秒杀HDD的。

内存

内存条是从旧笔记本拆下来的DDR3内存条,倒没让我操心。

数据盘

再来讲讲储存硬盘,本来家里有一块3.5寸西数蓝盘,但是连上去发现有许多缺点:

一来3.5寸7200转硬盘噪声太大,滋滋响声很烦,

二来3.5寸硬盘功耗太大,实测进行读写操作时,峰值功耗甚至达到了6-7W的样子。

最后入了一块移动硬盘,通过USB3.0连接,功耗低无噪音,最重要的是能热插拔,方便数据转移。

看到很多人搭建NAS,动辄四五个1TB,2TB硬盘。但是对于我来说完全没必要。

开机通电,整体平均功耗不到10W。

何不动手搭建一个家庭服务器?记录期间的遇到的各种坑

按照0.6元/度 的电价来算一年电费不到60元


系统篇

下面就讲讲系统的事情,看到网上大部分NAS都是装群晖系统。

但是作为新时代大学生,怎么能这么无脑呢,我可是指望在这个服务器上跑神经网络的呀,所以当然是安装Linux系统啦~

呵呵,这时候天坑就开始接踵而至了。。。

选择哪一个Linux发行版呢?

家庭服务器不比VPS,由于有多媒体需求,因此安装的Linux系统是需要带桌面环境的。

近年那个国产从操作系统Deepin不是很火吗?于是就决定装Deepin。

安装过程一切都很顺利,但是第一次启动,输完密码后就出现问题了,桌面背景模糊,只有鼠标箭头可以移动,可是点哪儿都没反应。

何不动手搭建一个家庭服务器?记录期间的遇到的各种坑

这是什么情况?查阅资料,网上大部分人说是驱动问题,可驱动问题一般存在与N卡独显驱动上,我这是intel核显,不应该存在驱动问题呀?

带着将信将疑态度,照着网上做的,在grub中添加--nomodeset后发现确实可以进入桌面。

但是桌面异常卡顿,因为nomodeset下是不运行显卡驱动的,相当于用CPU对画面进行渲染,不卡顿才怪呢。

一般在这个模式下用于安装显卡驱动,而不能作为正常的使用环境。

但是这块板子并没有插独立显卡,也就不存在驱动问题,一旦把nomodeset去掉后仍然无法进入桌面。

这个问题让我抓狂了许久,一直找不到原因,最后放弃Deepin——投奔Ubuntu的怀抱

当然最后我还是找到了解决方案,但是这已经是很久之后的事情了。在这里我先把方法写出来:

进入不了桌面的原因在于这款主板带有LVDS接口,能内接一个LED显示器,而恰好是因为这个功能干扰了HDMI输出

何不动手搭建一个家庭服务器?记录期间的遇到的各种坑

主板官网上查到的资料

在terminal下输入xrandr 显示如下信息:

DP-1 connected primary 1920x1080+0+0 0mm x 0mm
   1920x1080     60.00* 
HDMI-3 connected 3840x2160 ...
   3840x2160     30.00*
.......

可以看到DP-1这个东西就相当于主板“内屏显示器”,但是我并未利用这个显示接口,而系统却默认以此接口作为主输出,因此在HDMI输出的显示器上没有任何反应

正确的做法是在登陆界面按Ctrl+F5进入terminal模式

编辑/etc/default/grub 可以用vim也可以用其它软件。

找到splash quiet,在后面加上video=DP-1:d 用于禁止DP输出

最后sudo update-grub用于更新grub,这样就能只使用HDMI接口,之后就能顺利进入桌面

在决定投奔了Ubuntu之后,选择桌面环境又成了问题。虽然网上推崇的xfce4或者是MATE确实很轻量级,但是由奢入俭难,用过华丽桌面之后再难适应这些轻量级桌面。

首先尝试安装Ubuntu带官方推荐的桌面环境Gnome3.

尝试安装18.04LTS,用U盘引导安装。这时候问题又来了——安装界面打不开!!!选择Install Ubuntu 18.04后显示器就一直黑屏。(这应该还是上文说到内屏显示器的问题)

无奈,尝试Ubuntu最新版19.04,虽然这个版本不是LTS,但是在linux5.x内核加持下也是很长好用的。 很巧的是,19.04的安装界面就能打开了。

何不动手搭建一个家庭服务器?记录期间的遇到的各种坑

图片来自网络。桌面一改我几年前对ubuntu官方桌面unity的印象,关闭按钮默认在右边了,桌面特效也华丽了许多。

安装ssh

sudo apt-get install openssh-server

还有一些常见软件我就一一列举了。

下面主要谈安装远程桌面软件。

linux上最流行的远程控制应用应该是VNC,但是VNC的弊端实在是太明显了——卡,非常的卡!!!

原因在于VNC本质上是直接对桌面截图,然后压缩传输。这对带宽的要求非常高,即使在千兆局域网环境下,鼠标也是一卡一卡的。

这时候另一款良心软件就出现了——RDP

RDP 是Windows系统自带的远程桌面环境,即使在Windows上用的人也不是特别多,更别说在Linux下了。

何不动手搭建一个家庭服务器?记录期间的遇到的各种坑

RDP在Linux的实现叫做XRDP,这里的X指的是X Window System,是Linux的视窗系统。

我不打算详细介绍X Window System,但是X系统一个很重要的特性是服务端与客户端可分离,非常利于远程桌面的实现。

网上有不少关于XRDP安装的教程,但在我看来很多都是误人子弟!!!

譬如有篇文章是这么说的:

安装xrdp
sudo apt-get install xrdp
安装vnc4server
sudo apt-get install vnc4server
安装xubuntu-desktop
sudo apt-get install xubuntu-desktop
echo "xfce4-session" >~/.xsession

非常奇怪,第一条安装xrdp还好理解,但是你还要装VNC跟xfce干什么?原作者的意图是想用VNC作为底层操作,XRDP只是作为传输协议,但这样严重违反了使用XRDP的初衷,而且为了轻量级,又再安装了xfce桌面,两套桌面环境又会引起混乱,简直是舍本逐末。

最简单的做法如下(参考了知乎某位用户的文章),参考链接

黄承开:xrdp方式windows 10连接ubuntu 18.04​zhuanlan.zhihu.com

何不动手搭建一个家庭服务器?记录期间的遇到的各种坑

在Ubuntu/Debian下只需要输入

#安装xrdp
sudo apt-get install xrdp 
#配置桌面
sudo vim /etc/xrdp/startwm.sh
#把最下面的test和exec两行注释掉,添加一行
gnome-session

这样就行了,xrdp服务默认是开启状态,直接可以通过软件连接了。

直接选择Xorg即可:

何不动手搭建一个家庭服务器?记录期间的遇到的各种坑

但是这样依旧会存在一些问题:

第一:每次通过远程连接桌面后都会提示几次授权修改主机的颜色设置什么的,如图:

何不动手搭建一个家庭服务器?记录期间的遇到的各种坑

虽然可以直接cancel掉不影响使用,但是每次都会弹出这个确实很心烦。

google之后终于找到了更好的做法,可以参考这篇文章,代码很多我就不一一贴出来了

hiroom2. com/2018/04/29/ubuntu-1804-xrdp-gnome-en/​www.hiroom2.com

第二:由于RDP底层上跟VNC很不相同,RDP在对于一个用户只允许同时一个登陆。说白了要么通过远程访问桌面,要么本地使用,不能两者同时进行。

在windows下,如果有远程用户连接到电脑,电脑当前用户会自动注销;反之,当电脑正在被远程控制,如果直接登录该用户的话,二手游戏账号卖号远程操作会自动断开。

但是在linux下XRDP不会自动完成这些操作!也就是说如果你已经在本地电脑上登录了这个电脑的话,如果你不手动logout的话,xrdp是连接不上这个用户的;反之,如果你通过xrdp连接到了某用户,那么本地电脑就无法登录到这个用户,xrdp是不会自动断开的。

那有没有不注销就能登录的办法呢?

有的,解决方案我想到了两个:

方法一:先通过ssh(或者上文说到的Ctrl+F5打开terminal),输入

killall Xorg #杀死Xorg进程,相当于直接把桌面程序杀死

方法二:本地使用的时候使用Wayland模式,这样就不会与Xorg冲突了。

剩下就没什么大问题了。但是还是有瑕疵。

Gnome3桌面挺棒的,但是用在远程桌面上却很灾难。

原因在于Gnome3的启动器上,它的launcher是全屏风格的,而不是像windows一样只是一个弹窗。

这种做法有它的好处,但是在远程桌面上弊端却非常大。RDP比VNC快的主要原因是RDP是从底层上获取各个窗口的绘制数据,然后传输。

比如桌面上的大部分一直静止的,只有顶端的时间显示在变化,那么RDP就只传输顶端面板的那一部分,其余区域均不传输,大大减少带宽占用。

而Gnome3的启动器是全屏风格的,这意味着RDP一次要传输整个屏幕的数据,当网络条件不好的时候,卡顿到难以让人接受。

何不动手搭建一个家庭服务器?记录期间的遇到的各种坑

全屏的启动器,有人很喜欢这种风格,但是对RDP而言不友好

本着折腾的原则,我决定使用KDE作为桌面环境

用RDP连接时只用把上述的gnome-session改成startkde即可。

何不动手搭建一个家庭服务器?记录期间的遇到的各种坑

非常美观!启动器做成类windows样式很容易上手,同时对远程桌面也很友好

同样要深度配置KDE的XRDP配置可以参考这篇文章

hiroom2. com/2018/05/07/ubuntu-1804-xrdp-kde-en/​www.hiroom2.com

本以为很完美了,但是新问题又来了——远程模式下无法使用中文输入法!!!

你没看错,就是无法使用。fcitx配置一切正常,就是弹不出输入法,但是在本地使用下输入法却是正常的。

这个问题太头疼了,百度上有人说是windows的输入法干扰了远程桌面的输入法,但是即使我禁用windows下的输入法也于事无补。

用google搜索ubuntu fcitx doesn't work on xrdp也找不到结果。因为英美等人他们根本用不着输入法!┭┮﹏┭┮

这个问题太难受了,以至于我中途又换回gnome3桌面,在gnome3远程桌面下中文输入法却可以使用。(原因应该是gnome3把ibus作为系统的核心框架之一)

来来回回重装了好几次系统,期间我还尝试了mate,xfce,lxde桌面,发现都有中文输入法的问题。整个人都快崩溃了,辛亏苍天不负我,我仍就找到了解决办法:

Linux Mint MATE 18.3 にリモートデスクトップ接続する|Junf / Jade|note​note.mu

何不动手搭建一个家庭服务器?记录期间的遇到的各种坑

没错,上面是一个日文网站,因为日语也需要输入法,才会有这篇文章。

说来也巧,我是怎么找到这篇文章的呢?因为我的*的服务器在东京,用google搜索的时候会检索的日本网站,然后机缘巧合下找到了答案。

用网页翻译直接看,这里我摘抄一下解决方案:

#对于fcitx,在startwm.sh中将以下内容贴到startkde之前
export GTK_IM_MODULE = fcitx
export QT_IM_MODULE = fcitx
export XMODIFIERS =“@ im = fcitx”
export DefaultIMModule = fcitx
fcitx

看来问题出在环境变量上。

写到这里基本上大部分功能都可以使用了。

现在就可以愉快的玩耍了~

在这个系统上我安装了nextcloud作为私有云,安装aria2作为离线下载,安装transmission用作pt,后续还可搭建开发环境,跑coding

后续打算在淘宝上买几块亚克力,给它做一个机箱。


后记

来来去去为这块板子折腾了将近两周,主要问题出在系统的GUI上,Linux的桌面环境还有很长的路要走。

仔细回想遇到的遭遇,很多情况下我选择“逃避”,譬如deepin用不了我就换ubuntu,但如果我能再坚持一会儿,仔细思考,也许就能找到问题所在。当KDE的中文输入法用不了时我就换其他桌面,结果其他桌面也会出现同样的问题。

我总是逃避问题,而不是仔细的解决问题,不仅浪费时间,而且也不能从根本上杜绝问题的发生。

这一次的经历给了我很大启发——我以后的科研生涯中遇到问题首先是竭尽所能分析问题,找到问题根源,然后想办法解决,而不是直接跳过,忽视问题所在,这样只会给自己带来更多,新的麻烦。

上一篇:server 2022安装后的设置


下一篇:Centos7安装Python3.9实战