25

无头树莓派

最近终于闲下来可以放心的玩一玩买来后就闲置的树莓派3。头疼的是,我没有多余的键盘鼠标和屏幕,也不想每次都钻到放路由器的地方去插网线调试树莓派,所以就在百度谷歌国内国外到处搜索“无头安装树莓派”的方案,国内的文章和问答都搜不到,国外也没找到完整的教程。

不过在一整天的Google中,终于找到一篇冷门文章,然后顺藤摸瓜,最终达成我的目的。感谢这篇文章https://caffinc.github.io/201...

顺带一提,便于你的搜索引用,这个方案的英文术语叫"Raspberry Pi Headless setup"。只不过外文文章中搜到的也都不是"true headless",因为很多都要求最起码先要用网线去连接。

正常连接的树莓派,各种线

全面无线化的树莓派

开始前有几点要声明:

  1. 树莓派3是自带wifi的,所以利用这个特点我们可以不用连网线来安装。如果你用的是无wifi版本树莓派,那么依照这个思路可以插上无线wifi的usb后再尝试。
  2. 目前只尝试过树莓派最新的官方系统适用此方法,而且根据StackOverflow上的问答得知,这个特性也是新版系统才有的。
  3. 本方案是在Mac上完成的,Windows上也可以。

准备

  1. 树莓派3
  2. SD卡(8G以上)

没错,就是这么简单。这就是我想要的效果。

安装系统先

首先是常规的系统安装方法,很简单。下载好官方网站的Raspbian桌面系统后,解压成img格式文件。然后在Mac上用Etcher或ApplePi-Baker软件,Windows上用Rufus软件来将系统一键安装到SD卡。

这一步不需要详细解释,一般人都可以自己搜索到这几样东西,然后按照软件上的图式操作,除了下载时间外,全程也就10分钟以内完成。

Mac上用Ethcer安装树莓派系统

设置Wifi连接

这一步是本文最关键的一步,也是网上歧义分支最多的一步。在写这一步之前我想了一会儿,到底是应该先上结果还是先上过程。便于理解,还是先说过程的好;可是作为实用帖,先上结果比较有意思。

只需要如下几步即完成:

  1. Mac和Windows用户直接打开树莓派SD卡文件夹,Linux用户打开SD卡所呈现的两个分区中叫boot且内存极小的主分区(非树莓派文件系统分区)
  2. 在根目录放置一个文件名为ssh的文件,无后缀名,内容有没有都无所谓。Windows用户怎么操作可以自己百度下。
  3. 在根目录放置一个文件名为wpa_supplicant.conf的文件,内容如下:

    country=GB
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    network={
        ssid="你的Wifi名称,注意大小写"
        psk="你的Wifi密码"
    }
  4. 把SD卡插回树莓派,开机。

哒哒!完成!就是这么简单。然后来讲解一下原理。

新版的树莓派系统,为了自带Wifi的树莓派做了不少努力,让你可以简单到在SD卡上建立一个叫ssh的文件,就自动识别为开启系统的SSH服务。然后你再放另一个文件,告诉它Wifi和密码,它就会自动连上网络。

系统启动后,这两个会被删除。如果你改了Wifi密码,还可以再做一次。

找到树莓派的IP地址

首先要知道,用网线连接路由器得到的IP地址和用Wifi连接路由器得到的IP地址是不一样的。网上好多文章都没说清楚。

这里我们要用Wifi连接。

最简单的是进入路由器的设置主页,在DHCP列表中,找到树莓派的ip地址。

或者可以通过命令行来检查。Mac或Linux上,用命令行输入arp -a,向路由器中所有可能的ip都找一遍,然后显示一个所有连上路由器的ip列表。可以树莓派先关机,看一下这个列表,再开机看一下这个列表,多出来的那个就是树莓派的地址。

如果哪里都没有的话,那说明树莓派没有成功连接到Wifi:或者是配置错误,或者是刚开机还没来得及连接。

通过SSH远程连接树莓派

Mac和Linux上直接打开终端,用ssh pi@IP地址来连接,默认密码是raspberry。如果Mac上有设置SSH KEY这样的东西,就先要确定同样ip地址以前没有被记录过。如果连接不成功,那么就要到~/.ssh/known_hosts文件中删除这条ip那一行的记录,然后再连接ssh。

Windows上一般网上都推荐用putty这样的简易小软件来连接(使用方法自行百度,很简单),其实最简单的是下载免安装版的git bash,然后在git开发的终端上,各种玩耍Linux和Mac上的命令。

通过VNC远程连接树莓派桌面

在已经成功用ssh连接到树莓派到话,如果连接树莓派桌面,需要在树莓派中安装一个叫tightvncservervnc服务。

操作如下:

终端中输入sudo apt-get install tightvncserver

安装好后,输入tightvncserver回车,启动vnc服务。

然后就可以连接了。

Mac中,在文件夹Finder的菜单中,打开Go下的连接服务器,然后输入vnc://树莓派IP地址:5901。其中5901是默认的端口。
Windows上可能需要安装个软件来连接,可以自己查一查。

Mac VNC连接

连接桌面成功

关于wpa_supplicant.conf

网上文章关于wpa_supplicant.conf这个文件的编辑,产生了巨大的分歧和建议,这给我造成了不少的负担。

在安装好树莓派系统后,SD卡实际上是分为两块磁盘的,一个为启动系统用的分区,另一个为存储文件系统用的分区。通常文件系统的这个分区,除了Linux电脑以外都没法识别和读取。而wpa_supplicant.conf这个文件偏偏又放置在文件系统分区的/etc/wpa_supplicant/目录下,所以必须用Linux才能访问。

出于钻研精神,我在自己的Mac上安装了VirtualBox虚拟机,下载了小到ttyLinux和PuppyLinux,大到Ubuntu和麒麟系统。无数次的安装调试系统,尝试各种Linux系统,包括解决虚拟机读取SD卡的问题,最终还是用了大Ubuntu系统来解决。插上SD卡后,Ubuntu就立马显示出两块磁盘。然后迅速找到文件系统的那个分区,进入到/etc/wpa_supplicant/目录,发现竟然没有wpa_supplicant文件?后来才知道,文件是存在的,但是不显示出来,即使能看到也不能编辑。然后又各种搜索如何编辑这个文件的方法,结果大家都只是说说,还像那么回事一样的直接写用sudo nado /etc/wpa_supplicant/wpa_supplicant.conf来编辑,实际上完全不可行。绝望至此。

然后突然看到网上StackOverflow还是QuoRa上有人回答这个问题,说新版的系统可以这样写:

network={
    ssid="你的Wifi名称,注意大小写"
    psk="你的Wifi密码"
}

然后将这个文件放置在一般人可以访问的boot分区上,然后系统启动后会自动抓取、替换到主系统中。然后我很欢心的就去试了试,结果以失败告终。

再次绝望之后,我失落的拿起一根很长的网线,不情愿的走到路由器,插上水晶头。虽然很成功的访问到了网络,可是就这么的不甘心。

然后我在正常系统访问后,好奇的在主系统中访问到了/etc/wpa_supplicant/wpa_supplicant.conf这个文件,发现文件内容不光是网上问答所说的那两句,顶部还有几句简单的声明。

于是我的好奇心重燃,拔掉网线,再次重新安装系统,将错误都清零,然后在boot分区的根目录放置的wpa_supplicant.conf中加入该有的这几句话。

启动系统,

哒哒!完成!

实在太兴奋了,所以才写到此篇与大家分享。

有时候技术宅就是能从这些小事上获得极大的成就感,这也就是他们自己不觉得枯燥的原因吧。


SolomonXie
1.3k 声望480 粉丝

Those who exalt themselves will be humbled, and those who humble themselves will be exalted.