最近终于闲下来可以放心的玩一玩买来后就闲置的树莓派3。头疼的是,我没有多余的键盘鼠标和屏幕,也不想每次都钻到放路由器的地方去插网线调试树莓派,所以就在百度谷歌国内国外到处搜索“无头安装树莓派”的方案,国内的文章和问答都搜不到,国外也没找到完整的教程。
不过在一整天的Google中,终于找到一篇冷门文章,然后顺藤摸瓜,最终达成我的目的。感谢这篇文章:https://caffinc.github.io/2016/12/raspberry-pi-3-headless/
顺带一提,便于你的搜索引用,这个方案的英文术语叫"Raspberry Pi Headless setup"。只不过外文文章中搜到的也都不是"true headless",因为很多都要求最起码先要用网线去连接。
正常连接的树莓派,各种线 全面无线化的树莓派开始前有几点要声明:
- 树莓派3是自带wifi的,所以利用这个特点我们可以不用连网线来安装。如果你用的是无wifi版本树莓派,那么依照这个思路可以插上无线wifi的usb后再尝试。
- 目前只尝试过树莓派最新的官方系统适用此方法,而且根据StackOverflow上的问答得知,这个特性也是新版系统才有的。
- 本方案是在Mac上完成的,Windows上也可以。
准备
- 树莓派3
- SD卡(8G以上)
没错,就是这么简单。这就是我想要的效果。
安装系统先
首先是常规的系统安装方法,很简单。下载好官方网站的Raspbian桌面系统后,解压成img格式文件。然后在Mac上用Etcher或ApplePi-Baker软件,Windows上用Rufus软件来将系统一键安装到SD卡。
这一步不需要详细解释,一般人都可以自己搜索到这几样东西,然后按照软件上的图式操作,除了下载时间外,全程也就10分钟以内完成。
Mac上用Ethcer安装树莓派系统设置Wifi连接
这一步是本文最关键的一步,也是网上歧义分支最多的一步。在写这一步之前我想了一会儿,到底是应该先上结果还是先上过程。便于理解,还是先说过程的好;可是作为实用帖,先上结果比较有意思。
只需要如下几步即完成:
-
Mac和Windows用户直接打开树莓派SD卡文件夹,Linux用户打开SD卡所呈现的两个分区中叫boot且内存极小的主分区(非树莓派文件系统分区)
-
在根目录放置一个文件名为
ssh
的文件,无后缀名,内容有没有都无所谓。Windows用户怎么操作可以自己百度下。 -
在根目录放置一个文件名为
wpa_supplicant.conf
的文件,内容如下:country=GB ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="你的Wifi名称,注意大小写" psk="你的Wifi密码" }
-
把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连接到树莓派到话,如果连接树莓派桌面,需要在树莓派中安装一个叫tightvncserver
vnc服务。
操作如下:
终端中输入sudo apt-get install tightvncserver
安装好后,输入tightvncserver
回车,启动vnc服务。
然后就可以连接了。
Mac中,在文件夹Finder的菜单中,打开Go下的连接服务器,然后输入vnc://树莓派IP地址:5901
。其中5901是默认的端口。
Windows上可能需要安装个软件来连接,可以自己查一查。
关于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
中加入该有的这几句话。
启动系统,
哒哒!完成!
实在太兴奋了,所以才写到此篇与大家分享。
有时候技术宅就是能从这些小事上获得极大的成就感,这也就是他们自己不觉得枯燥的原因吧。
网友评论
https://pastebin.com/1WVwUx1n
这是log