最近終于閑下來可以放心的玩一玩買來后就閑置的樹莓派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分鐘以內完成。
設置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
中加入該有的這幾句話。
啟動系統,
噠噠!完成!
實在太興奮了,所以才寫到此篇與大家分享。
有時候技術宅就是能從這些小事上獲得極大的成就感,這也就是他們自己不覺得枯燥的原因吧。