[教學] Raspberry Pi供電系統
2020-04-20 14:25:55
圖片來源:MxL7704 PMIC Powers the Raspberry Pi 4
樹莓派目前使用中的供電系統是在 3B+ 開始改用的。供電系統的好壞對樹莓派來說是非常重要,一個運作良好的供電系統可以確保整塊板子的各功能運作正常,一旦供電出問題時,可能對板子所有功能造成各種問題,例如 USB、WiFi 功能失效或不正常,最嚴重的慘況就是讓整塊板子完全停擺變成一塊磚頭。
《供電系統之演進》
樹莓派供電系統的演進可以分成三個階段:
《第一階段是 Pi2 以前的供電》
重點提示:這代整體的供電源頭是來自於 Micro USB 5V,再轉換成 3.3V、2.5V、1.8V等部份供給系統上元件使用。
圖片來源:Introducing the Raspberry Pi Model B+
接著來看看電路圖了解電源是怎開始的。電源從左側MICRO USB TYPE B這接頭端開始,經過 F3 保險絲再來到 D17 TVS(Transient voltage suppressor)及後端的濾波電容。
這樣的電路設計有什麼優點:
- 電路設計簡單,價錢便宜。
- 保護電路避免外部供給的電壓異常偏高或電極接反。
- 當耗電超過 1A 的電流時提供必要的保護。
缺點是:
- 當外部提供的電源不足 5V 時例如 4.5V,這對系統所需的 5V 來說是不夠的,此時沒有額外的電路可以修復電壓過低的問題。
- 當 USB 線太細或是品質不良時而 USB 埠的供電若只有 4.5V 或 4.75V 時就很容易造成額外的壓降。
- 當電源上有雜訊或是波動的話對樹莓派及接在其 USB 上的週邊來說都是一個風險。
- 當樹莓派上的 USB 接上其它週邊時,若有突如其來的過大電流消耗有可能會導致整路 5V 掉電。
圖片來源:Introducing the Raspberry Pi Model B+
除了 5V 之外系統還需要幾組供電:3.3V、2.5V 及 1.8V,從圖上可以看到左上方5V開始之後經過三個穩壓 IC-NCP1117-3v3、LP2980-2v5、NCP1117-1v8 則可分別轉換出這三組電壓。
《第二段階段是 Pi3B 時的供電》
重點提示:這版的設計較前版來說是相對的可靠並減少了之前 5V 掉電的問題。
這時期的電源還是使用 Micro USB 接頭,保險絲可提供的保護升高到 2A,接著 Q3 是一個 P-通道的 MOSFET(金氧半場效電晶體) 可提供錯接極性的保護,比起多數的二極體至少會有 0.5V 的壓降來說,這顆只有 52mΩ。所以當系統耗電最大到 2A 時則只會有 0.1V 的壓降,最後來到 D5 TVS 二極體可提供過電壓的保護。
至於 3.3V 及 1.8V 供電的部份,原本的 LDO(線性穩壓器)不用了,取而代之的是降壓轉換器 Buck Converter(降壓變換器)。這顆轉換 IC 可提供較好的轉換效率,轉換中產生的熱能也較少,相對的價格上也比以前稍微貴了點。
最大供電達 1A, 雙輸出降壓轉換器,轉換效率達 95%,意謂轉換過程中損失的電流較少。
最後這塊 5V 轉 5V 的電路,主要是提供 USB 週邊的熱插拔使用之電源保護電路。
《第三階段則是 Pi3B+ 之後使用的 PMIC》
重點提示:這代的供電隨著 CPU 和週邊等效能提昇以及開機供電必要的順序,所需的電源複雜度也跟著提昇。為滿足這複雜的供電系統於是便使用上 PMIC(Power Management Integrated Circuit)。
外部電源 5V 還是使用 Micro USB 接頭,這部份線路跟之前的設計一樣。
接著 5V 做為 PMIC-MXL7704 的源頭,之後 LDO 輸出一組 3V3A 以及另外四組供電:3V3、1V8、DDR_1V2 及 VDD_CORE。
最後這塊5V轉5V的電路與前版設計一樣。
《Pi3B+ 的問題》
Pi 3B+ 在 2018 年發行後隨著使用者的增加,我們陸續收到使用者回報板子無法開機的問題,這是過去幾代板子未曾遇到的情況。
絕大部分的狀況是板子無法開機,但電源指示燈是有亮的,理論上是供電系統正常,但板子有問題沒有畫面輸出,UART 也沒有任何訊息輸出。
但如果檢查板子上 I/O pin 腳上的電源,結果是 5V 正常但 3V3 沒電,在追本溯源後發現是 PMIC 本身 3V3 就不輸出了。表示 PMIC 壞了,所以供電出問題,板子無法正常動作。
FAQ:到底是什麼原因會讓 PMIC 壞掉? 前四名依序為
- 使用 I/O pin 腳時不小心讓 3.3V 的電短路。這邊說的短路包含碰觸到 5V,接地(GND)或是與其它的I/O pin。
- 使用 I/O pin 腳時,輸入電壓超過可承受的 3.3V,例如接上訊號準位為 5V 的感測器。
- 使用不合適的電源供應器。因為電壓/電流的不穩定讓 PMIC 損壞。
- 在沒有移除外部電源的情況下插拔 HDMI 線材。
FAQ:PMIC 壞了可以修嗎? 板子還有救嗎?
接著我們把 MXL7704 換掉嘗試著修復板子,有些可以救回,有些連 CPU 都打壞了要救就更麻煩了。以整個成本效益來說,如果是 PMIC 或CPU 燒壞的這些情況下是不值得修。所以我們每次面對使用者或是學員在使用 3B+ 的 I/O pin,總是不厭其煩的提醒務必小心檢查。
傷心的人總是不會孤單,這問題在國內外都有使用者遇到,原廠也表示這種歸咎於使用者短路的情形下造成板子壞掉是不提供保固的。所以一定要小心檢查,小心檢查,小心檢查。
另外國外有網友 Tilde Thurium 還提供了幾個把 3B+ 搞壞的方式:3 Ways To Brick Your Raspberry Pi,前段的內容剛好是其中情況之一。話說正常的人應該不會想把自己的 3B+ 搞壞,而是藉由慘況提醒使用者注意。
假設你在賣場上找了一個 USB充電器,看起來輕薄實惠還支援快充
記得前述提到過的 F1 保險絲,它提供的是過電流保護不是過電壓保護,若你插入不符規格的電壓到板子上,板子很有機會一下就燒壞了,所以使用非原廠的 USB 電源還是得注意一下。
《Pi4 硬體規格的提昇》
1. 使用 Broadcom 2711 四核心晶片(原本為 BCM2837B0)Quad-core Cortex-A72 64-bit SoC,單核心時脈可達 1.5GHz。
2. 三種記憶體(LPDDR4 SDRAM)大小可選擇,分別是 1GB, 2GB, 和 4GB。
3. 乙太網路(Ethernet)達 True Gigabit Ethernet。
4. 支援藍牙5.0(Bluetooth 5.0)。
5. 兩個 USB 3.0 和 兩個 USB 2.0。
6. 支援雙銀幕輸出,解析度可達 4K。
7. 使用 VideoCore VI,可支援 OpenGL ES 3.x。
8. 可硬體解 4Kp60 HEVC 影片。
這代的 Pi 隨著硬體的升級在供電的部份也做了些改變,主要是支援兩個 USB 3.0 port 以及供電的 Adapter 也提升到 3A,接頭則換成USB Type-C。
接著來看電路的部分,供電接頭的部分可以看到 pin 腳數變多了,這些都是 USB Type-C 標準的介面,主要還是取用 5V 的電進來,但這部分的線路設計在最初版本有點失誤,會導致符合 E-marker 規範的 USB 電源線反而無法使用,而原廠及一般的 USB type-c 電源則沒問題,使用上要稍微注意。
接著 5V 把電供給 PMIC 再轉換出另外幾組需要的電,這部分線路跟前一版本比大同小異,主要多做了一點保護,避免發生如 3B+ 那樣容易損壞 PMIC。
《參考資料:》
* Introducing the Raspberry Pi Model B+
* More power to your Pi
* MxL7704 Data Sheet
* SHORTING PINS ON A RASPBERRY PI IS A BAD IDEA; PMIC FAILURES UNDER INVESTIGATION
* 3 Ways To Brick Your Raspberry Pi
* MaxLinear’s MxL7704 PMIC Powers the Raspberry Pi 4
* Powering the Pi 4 – safe voltage levels and current requirements
責任編輯:Ledger



[教學] 啟用 Pi 3B+的WiFi
2018-03-21 14:49:39當拿到 Pi 3B+ 以後,如果安裝目前最新版(2018-03-13)的映像檔開機後,會發現看不到這次改版最大的 WiFi 裝置。
查詢一下原來這次的 release notes 把 wpa_supplicant.conf
的國碼設定拿掉了。
2018-03-13: * Raspberry Pi 3 B+ support * WiFi is disabled until wireless regulatory domain is set (Pi 3 B+ only) - The domain can be done through 'Raspberry Pi Configuration' (rc_gui), 'raspi-config' or by setting 'country=' to an appropriate ISO 3166 alpha2 country code in /etc/wpa_supplicant/wpa_supplicant.conf.
可以從 sudo raspi-config
選單中設定 WiFi 的國碼即可,步驟如下。4 Localisation Options
> I4 Change Wi-fi Country
> TW Taiwan
完成後再執行 ifconfig
就可以看到 wlan0
出來了。
可以用 iw dev
查看支援的頻段,有到 5GHz 了。
$ iw dev phy#0 Unnamed/non-netdev interface wdev 0x2 addr ba:27:eb:18:80:cb type P2P-device txpower 31.00 dBm Interface wlan0 ifindex 3 wdev 0x1 addr b8:27:eb:18:80:cb type managed channel 165 (5825 MHz), width: 20 MHz, center1: 5825 MHz txpower 31.00 dBm
還有 iw list
查看支援的模式。
$ iw list Supported interface modes: * IBSS * managed * AP * P2P-client * P2P-GO * P2P-device
如果設定完國碼還看不到 wlan0
這張網卡的話,可以用 rfkill list
確認無線的啟用狀況,看是被軟體或硬體的設定擋住。
$ sudo rfkill list 0: phy0: Wireless LAN Soft blocked: yes Hard blocked: no 1: hci0: Bluetooth Soft blocked: no Hard blocked: no
如果是 phy0
是 Soft blocked: yes
,可以用 rfkill unblock wifi
啟用 WiFi 即可。
$ sudo rfkill unblock wifi $ sudo rfkill list 0: phy0: Wireless LAN Soft blocked: no Hard blocked: no 1: hci0: Bluetooth Soft blocked: no Hard blocked: no
另外,原本在 Jessie 使用的 ifconfig wlan0 up
,在 Scretch 也不能用了,會出現這樣的訊息。
$ sudo ifconfig wlan0 up SIOCSIFFLAGS: Operation not possible due to RF-kill
要改為下面的方式啟用/停用網路裝置。
$ ip link set wlan0 up $ ip link set wlan0 down
或是啟用/停用內建的 WiFi 裝置。
$ sudo rfkill block 0 $ sudo rfkill unblock 0
更多有關 /etc/wpa_supplicant/wpa_supplicant.conf
的參數可以參考這篇。
參考資料:
* New Pi3B+ Wireless issues
* Wifi on Raspberry Pi 3
* wpa_supplicant.conf
[教學] Raspberry Pi Camera + Python + OpenCV投影片和範例程式 @虎科大
2017-08-17 14:17:49
七月底我們應虎科大電機工程系蔡老師的邀請,帶 Raspberry Pi + Python + Camera 兩天的工作坊。最後會實作”鄉民查水表”功能,是使用 Pi Camera 拍照後,用 OpenCV 做影像處理取得水表指針角度,就可以知道水表目前度數。學生很認真程度也很好,兩天的練習與實做都可以在時間內完成。我們未來也會和虎科大有更多的合作。
這次的工作坊共分為兩天,第一天是介紹 Raspberry Pi Camera + Python。內容與時間如下:
1. 相機原理與應用(1 小時)
2. 控制 Raspberry Pi Camera(2 小時)
– 使用指令列
– 使用 Python
3. 串接 imagga 網路服務(1 小時)
4. Camera和 Webcam(1 小時)
5. 影像串流(3 小時)
– 使用 RTSP + H.264
– 使用 HTTP + MJPG
投影片我們已經放在 slideshare 上了。範例程式在 github 上了。
Raspberry Pi Camera + Python + OpenCV (Day1) from raspberrypi-tw
第二天是介紹 Raspberry Pi Camera + OpenCV。內容與時間如下:
1. 色彩空間與基本影像處理(2 小時)
– 色彩空間介紹
– 用 Python + OpenCV 做影像處理
2. 常用影像處理方法(3 小時)
– 平滑,侵蝕與膨脹
– 找邊緣與找直線
– 找重心與找輪廓
3. 機器學習應用與綜合練習(3 小時)
– 人臉偵測
– 圖形分類(手寫辨識)
其中,在第二天工作坊中的圖形分類(手寫辨識),我們參考了 Ashing’s Blog 的內容,裡面有許多不錯的自學心得。
投影片在 slideshare 上。範例程式在 github 上了。
Raspberry Pi Camera + Python + OpenCV (Day2) from raspberrypi-tw
[基礎] Raspberry Pi 用 3G 網卡(3G USB dongle)上網
2015-01-09 01:43:33本文章使用 Raspberry Pi Model B+,映像檔為 2014-12-24-wheezy-raspbian.img。使用的 3G 網卡為 Huawei E1820 3G 網卡。
現在的 3G/4G 網卡(或稱為 USB 數據機)大多同時有儲存設備和 USB 數據機的功能,其中儲存設備功能存放 MS Windows 的驅動程式,USB 數據機就是可撥號連線接取上網際網路。
如果是第一次將 3G 網卡插在安裝了 Windows 系統的電腦上,網卡將會以虛擬光碟機的模式掛載成儲存設備,並且自動安裝驅動程式。當完成安裝後就可用虛擬光碟機轉換工具(Virtual CD-ROM switching utility)或稱為模式轉換工具,正確轉換網卡為 USB 數據機。
如果要在 Raspberry Pi 上使用 3G/4G 網卡上網,要做的事就是安裝設定模式轉換工具與安裝設定撥號連線程式。步驟如下:
1. 確認硬體資訊。
當插上 E1820 時,可以看到系統可辨認成 HSPA modem。
pi@raspberrypi ~ $ lsusb Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. ... skip ... Bus 001 Device 008: ID 12d1:1446 Huawei Technologies Co., Ltd. E1552/E1800/E173 (HSPA modem) ... skip ...
用 dmesg
查看時,可看到系統將網卡的儲存功能辨認成 scsi 介面的 CD-ROM(sr0)。
pi@raspberrypi ~ $ dmesg ... skip ... [ 7.062455] usb 1-1.4: new high-speed USB device number 6 using dwc_otg [ 7.195063] usb 1-1.4: New USB device found, idVendor=12d1, idProduct=1446 [ 7.219562] usb 1-1.4: New USB device strings: Mfr=3, Product=2, SerialNumber=0 [ 7.242348] usb 1-1.4: Product: HUAWEI Mobile [ 7.251156] usb 1-1.4: Manufacturer: Huawei Technologies [ 7.282719] usb-storage 1-1.4:1.0: USB Mass Storage device detected [ 7.309727] scsi0 : usb-storage 1-1.4:1.0 [ 7.323198] usb-storage 1-1.4:1.1: USB Mass Storage device detected [ 7.351048] scsi1 : usb-storage 1-1.4:1.1 [ 8.322907] scsi 0:0:0:0: CD-ROM HUAWEI Mass Storage 2.31 PQ: 0 ANSI: 2 [ 8.363958] scsi 1:0:0:0: Direct-Access HUAWEI TF CARD Storage PQ: 0 ANSI: 2 [ 8.417357] sd 1:0:0:0: [sda] Attached SCSI removable disk [ 8.583801] sr0: scsi-1 drive [ 8.591172] cdrom: Uniform CD-ROM driver Revision: 3.20 [ 8.681129] sr 0:0:0:0: Attached scsi generic sg0 type 5 [ 8.698176] sr 0:0:0:0: Attached scsi CD-ROM sr0
如果我們將 sr0 掛載起來,就可清楚的看到裡面所存放的檔案是 Windows 驅動程式。
pi@raspberrypi ~ $ ls -al /dev/disk/by-id/ total 0 drwxr-xr-x 2 root root 140 Dec 24 12:31 . drwxr-xr-x 6 root root 120 Jan 1 1970 .. lrwxrwxrwx 1 root root 13 Jan 1 1970 memstick-SU16G_0x27885644 -> ../../mmcblk0 lrwxrwxrwx 1 root root 15 Dec 24 12:28 memstick-SU16G_0x27885644-part1 -> ../../mmcblk0p1 lrwxrwxrwx 1 root root 15 Dec 24 12:28 memstick-SU16G_0x27885644-part2 -> ../../mmcblk0p2 lrwxrwxrwx 1 root root 9 Dec 24 12:38 usb-HUAWEI_Mass_Storage-0:0 -> ../../sr0 lrwxrwxrwx 1 root root 9 Dec 24 12:31 usb-HUAWEI_TF_CARD_Storage-0:0 -> ../../sda pi@raspberrypi ~ $ sudo mount /dev/sr0 /mnt mount: block device /dev/sr0 is write-protected, mounting read-only pi@raspberrypi ~ $ ls -al /mnt/ total 586 dr-xr-xr-x 1 root root 2048 Nov 27 2012 . drwxr-xr-x 22 root root 4096 Dec 21 11:09 .. -r-xr-xr-x 1 root root 148320 Mar 14 2011 AutoRun.exe -r-xr-xr-x 1 root root 45 Oct 1 2008 AUTORUN.INF dr-xr-xr-x 1 root root 2048 Nov 27 2012 Mobile Partner -r-xr-xr-x 1 root root 439926 Nov 15 2009 Startup.ico -r-xr-xr-x 1 root root 1742 Nov 23 2012 SysConfig.dat
2. 安裝與設定模式轉換工具。
安裝 usb-modeswitch 會將有相依性的 usb-modeswitch-data
一併安裝起來。
pi@raspberrypi ~ $ sudo apt-get install -y usb-modeswitch
我們可以比較模式轉換前後的分別,這可幫助我們確認是否有成功轉換 3G 網卡成 USB 數據機。檢查方式是執行 ls /dev/tty*
,在模式還沒有轉換前,可以看到最後兩項是 /dev/ttyAMA0
和 /dev/ttyprintk
。
安裝完成後就要進行模式的設定,usb-modeswitch
需要和 udev
搭配。
udev
包含 user space daemon(udevd)和工具程式 udevinfo(或 udevadm),並可以讓使用者自訂規則存放於 /etc/udev/rules.d/
下。有關 udev
可以看 wiki 的介紹。
udev 是 Linux kernel 2.6 系列的設備管理器。它主要的功能是管理 /dev 目錄底下的設備節點。它同時也是用來接替 devfs 及 hotplug 的功能,這意味著它要在添加/刪除硬件時處理 /dev 目錄以及所有用戶空間的行為,包括加載 firmware 時。
實際上 usb-modeswitch
和 udev
的運作順序如下:
* /lib/udev/rules.d/40-usb_modeswitch.rules
:udev 的規則文件,如果設備被識別(包括 Vendor ID 和 Product ID)就會啟動 usb_modeswitch。
* /lib/udev/usb_modeswitch
: 執行 usb_modeswitch_dispatcher 的 script。
* /usr/sbin/usb_modeswitch_dispatcher
:usb_modeswitch 的 wrapper,用 tcl 寫的,會根據所選擇的設備與設定實際執行 /usr/sbin/usb_modeswitch。
* /etc/usb_modeswitch.conf
:全域的設定檔案,也可用於單一的設備設定資訊。
* /etc/usb_modeswitch.d
:該文件夾包含了各別設備的獨立設定資訊,各別裝置的設定檔案是用設備的 ID 來命名。
* /usr/sbin/usb_modeswitch
:實際轉換裝置模式的二進位程式。
因此我們要新增網卡設備的規則到 /lib/udev/rules.d/40-usb_modeswitch.rules
:
pi@raspberrypi ~ $ sudo vi /lib/udev/rules.d/40-usb_modeswitch.rules
在檔案最後加上兩行。
# E1820 ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1446", RUN+="usb_modeswitch '%b/%k'"
其中 idVendor="12d1" 和 idProduct="1446" 這些資訊是由 lsusb
得到的。
接著再將網卡要轉換的資訊加到 /etc/usb_modeswitch.conf
下。
pi@raspberrypi ~ $ sudo vi /etc/usb_modeswitch.conf
在檔案最後加上幾行。
DefaultVendor=0x12d1 DefaultProduct=0x1446 TargetVendor=0x12d1 TargetProduct=0x14ac MessageContent="5553424312345678000000000000061e000000000000000000000000000000"
DefaultVendor 和 DefaultProduct 也是剛剛 lsusb 的結果。但 TargetVendor 和 TargetProduct 就需要上網爬文,例如這裡有提供。
而將 EnableLogging=0 改為 EnableLogging=1 可在 /var/log 下查看 usb_modeswitch_** 的 log 方便除錯。
如果設定沒問題,重開機用 dmesg
就可以看到已經成功的將 USB 數據機(usb 1-1.4) 掛載到 ttyUSB0、ttyUSB1 和 ttyUSB2。
... skip ... [ 7.062368] usb 1-1.4: new high-speed USB device number 6 using dwc_otg [ 7.185037] usb 1-1.4: New USB device found, idVendor=12d1, idProduct=1446 [ 7.208299] usb 1-1.4: New USB device strings: Mfr=3, Product=2, SerialNumber=0 [ 7.230322] usb 1-1.4: Product: HUAWEI Mobile [ 7.250718] usb 1-1.4: Manufacturer: Huawei Technologies [ 7.273445] usb-storage 1-1.4:1.0: USB Mass Storage device detected [ 7.297764] scsi0 : usb-storage 1-1.4:1.0 [ 7.313332] usb-storage 1-1.4:1.1: USB Mass Storage device detected [ 7.342617] scsi1 : usb-storage 1-1.4:1.1 [ 8.315111] scsi 0:0:0:0: CD-ROM HUAWEI Mass Storage 2.31 PQ: 0 ANSI: 2 [ 8.345229] scsi 1:0:0:0: Direct-Access HUAWEI TF CARD Storage PQ: 0 ANSI: 2 [ 8.373824] sd 1:0:0:0: [sda] Attached SCSI removable disk [ 9.630014] scsi 0:0:0:0: Attached scsi generic sg0 type 5 [ 9.773321] sd 1:0:0:0: Attached scsi generic sg1 type 0 [ 9.819475] sr0: scsi-1 drive [ 9.942382] cdrom: Uniform CD-ROM driver Revision: 3.20 [ 10.122331] sr 0:0:0:0: Attached scsi CD-ROM sr0 [ 11.142844] usb-storage 1-1.4:1.0: USB Mass Storage device detected [ 11.153861] usb 1-1.4: USB disconnect, device number 6 [ 11.176368] scsi2 : usb-storage 1-1.4:1.0 [ 11.208558] scsi 1:0:0:0: rejecting I/O to offline device [ 11.218302] scsi 1:0:0:0: killing request [ 15.762375] usb 1-1.4: new high-speed USB device number 7 using dwc_otg [ 15.885281] usb 1-1.4: New USB device found, idVendor=12d1, idProduct=14ac [ 15.906715] usb 1-1.4: New USB device strings: Mfr=4, Product=3, SerialNumber=0 [ 15.929998] usb 1-1.4: Product: HUAWEI Mobile [ 15.959491] usb 1-1.4: Manufacturer: Huawei Technologies [ 15.999001] usb-storage 1-1.4:1.5: USB Mass Storage device detected [ 16.040642] scsi3 : usb-storage 1-1.4:1.5 [ 16.057131] usb-storage 1-1.4:1.6: USB Mass Storage device detected [ 16.099706] scsi4 : usb-storage 1-1.4:1.6 [ 16.366181] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null) [ 16.445601] usbcore: registered new interface driver cdc_ether [ 16.491873] usbcore: registered new interface driver usbserial [ 16.586318] usbcore: registered new interface driver usbserial_generic [ 16.617253] usbcore: registered new interface driver cdc_wdm [ 16.679164] usbserial: USB Serial support registered for generic [ 16.721907] qmi_wwan 1-1.4:1.1: cdc-wdm0: USB WDM device [ 16.751517] qmi_wwan 1-1.4:1.1 wwan0: register 'qmi_wwan' at usb-bcm2708_usb-1.4, WWAN/QMI device, a6:37:fd:d4:42:14 [ 16.800868] usbcore: registered new interface driver qmi_wwan [ 16.830143] usbcore: registered new interface driver option [ 16.866417] usbserial: USB Serial support registered for GSM modem (1-port) [ 16.953166] option 1-1.4:1.0: GSM modem (1-port) converter detected [ 17.008423] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB0 [ 17.054788] scsi 3:0:0:0: CD-ROM HUAWEI Mass Storage 2.31 PQ: 0 ANSI: 2 [ 17.095286] sr0: scsi-1 drive [ 17.113002] sr 3:0:0:0: Attached scsi CD-ROM sr0 [ 17.113502] sr 3:0:0:0: Attached scsi generic sg0 type 5 [ 17.134929] option 1-1.4:1.3: GSM modem (1-port) converter detected [ 17.155709] scsi 4:0:0:0: Direct-Access HUAWEI TF CARD Storage PQ: 0 ANSI: 2 [ 17.193722] sd 4:0:0:0: [sda] Attached SCSI removable disk [ 17.204968] sd 4:0:0:0: Attached scsi generic sg1 type 0 [ 17.326895] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB1 [ 17.473045] option 1-1.4:1.4: GSM modem (1-port) converter detected [ 17.612898] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB2 ... skip ...
用 ls /dev/tty*
也可看到最後長出了 /dev/ttyUSB0、/dev/ttyUSB1 和 /dev/ttyUSB2。
pi@raspberrypi ~ $ ls /dev/tty*
這時候我們用 lsusb
也可以發現讀到的硬體資訊改變了,包括 idProduct 和名稱都有變化。
pi@raspberrypi ~ $ lsusb Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. ... skip ... Bus 001 Device 007: ID 12d1:14ac Huawei Technologies Co., Ltd. ... skip ...
3. 安裝與設定撥號程式。
安裝撥號程式 wvdial
會一同安裝 ppp
。
pi@raspberrypi ~ $ sudo apt-get install -y wvdial
pi@raspberrypi ~ $ sudo vi /etc/wvdial.conf
加上一個撥號的 profile。
[Dialer E1820] Phone = *99# APN = internet Username = username Password = password Init1 = ATZ Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 Init3 = AT+CGDCONT=1, "IP","Internet" Modem = /dev/ttyUSB0 Baud = 460800 Stupid Mode = 1
其中
* [Dialer xxx]
:profile 名稱,之後撥號就會以 xxx 為名,可設定多組 profile。
* Modem
:wvdial 所用的數據機設備位置,預設為 /dev/modem。
* Baud
:wvdial 和數據機所溝通的 baud rate。
* Stupid Mode
:如果啟用 stupid mode,數據機在和終端伺服器(terminal server)溝通時將不會出現提示,並且當數據機連上後會立即啟動 pppd。
使用 wvdial 進行撥號連線,選擇 E1820 的 profile。
pi@raspberrypi ~ $ sudo wvdial E1820
在進行 pppd
連線過程中,會看到像是亂碼的符號,但如果連線成功會得到 IP 和 DNS 的位址。
再用 ifconfig
查看網路介面資訊,可以發現多了一個 ppp0
的連線。
開啟瀏覽器,確認可以連上網際網路。
常見問與答:
1. 如何測連線速度?
有關測網路的連線速度方法有很多,我們使用 speedtest-cli
這個用 python
寫的命令列測速套件,原始碼在 github。實際執行時,這個工具會連線到 speedtest.net 並測試上傳和下載的速度。
使用前需要先安裝相關的套件如下。
pi@raspberrypi ~ $ sudo apt-get install python-dev python-pip pi@raspberrypi ~ $ sudo pip install speedtest-cli
執行 speedtest-cli
。
pi@raspberrypi ~ $ speedtest-cli Retrieving speedtest.net configuration... Retrieving speedtest.net server list... Testing from Chunghwa Telecom Co., Ltd. (223.136.198.66)... Hosted by Taiwan Fixed Network (New Taipei) [7.30 km]: 91.097 ms Testing download speed........................................ Download: 2.48 Mbits/s Testing upload speed.................................................. Upload: 1.41 Mbits/s
speedtest-cli
會根據使用者所在的位置,連線到最近的伺服器做測速。我們可以加上 --list
列出在台灣的伺服器列表。
pi@raspberrypi ~ $ speedtest-cli --list | grep Taiwan 2133) Taiwan Fixed Network (Taipei, Taiwan) [0.47 km] 2327) Far Eastone Telecommunications Co., Ltd. (Taipei, Taiwan) [0.47 km] 5008) Asia Pacific Telecom (Taipei, Taiwan) [0.47 km] 5661) NCIC Telcom (Taipei, Taiwan) [0.47 km] 2188) TFN Media Co., Ltd. (Taipei, Taiwan) [0.47 km] 3967) Chief Telecom (Taipei, Taiwan) [0.47 km] 5056) Taipei Fiber (Taipei, Taiwan) [0.47 km] 5660) NCIC Telcom (New Taipei, Taiwan) [9.09 km] 4505) Chief Telecom (New Taipei, Taiwan) [9.09 km] 5219) Taiwan Fixed Network (New Taipei, Taiwan) [9.09 km] 5067) Far Eastone Telecommunications Co., Ltd. (New Taipei, Taiwan) [9.09 km] 3921) Taiwan Fixed Network (Taoyuan, Taiwan) [31.66 km] 2589) Far EasTone Telecommunications Co., Ltd (Taoyuan, Taiwan) [31.66 km] ... skip ...
我們也可以指定伺服器做測試。只要在 speedtest-cli
後面加上伺服器的編號例如 --server 2133
就可以了。但我們實際測試時是沒有加上這個選項,而讓它自己選擇最近的伺服器。
2. 有其他網卡的設定可參考嗎?
以下是我們測過的幾張網卡的設定檔。
Huawei E220/Huawei E230
修改 /lib/udev/rules.d/40-usb_modeswitch.rules
。
ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1003", RUN+="usb_modeswitch '%b/%k'"
修改 /etc/usb_modeswitch.conf
。
DefaultVendor=0x12d1 DefaultProduct=0x1003 TargetVendor=0x12d1 TargetProductList="1001,1003,1406,140c,14ac" MessageContent="55534243123456780000000000000011060000000000000000000000000000"
Huawei E372
修改 /lib/udev/rules.d/40-usb_modeswitch.rules
。
ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1505", RUN+="usb_modeswitch '%b/%k'"
修改 /etc/usb_modeswitch.conf
。
DefaultVendor= 0x12d1 DefaultProduct= 0x1505 TargetVendor= 0x12d1 TargetProduct= 0x140c TargetProductList="1001,1406,140b,140c,1412,141b,1433,14ac,1506,150f" MessageContent="5553424312345678000000000000061e000000000000000000000000000000"
Huawei E398u-1
修改 /lib/udev/rules.d/40-usb_modeswitch.rules
。
ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1505", RUN+="usb_modeswitch '%b/%k'"
修改 /etc/usb_modeswitch.conf
。
DefaultVendor=0x12d1 DefaultProduct=0x1505 TargetVendor=0x12d1 TargetProduct=0x1506 MessageContent="5553424312345678000000000000061e000000000000000000000000000000"
使用 speedtest-cli
的參考結果。
E372 和 E398 的 idProduct 相同,只是因為 Huawei 沒有給每一個裝置都使用唯一的 idProduct。
3. 這錯誤訊息是什麼意思?
--> WvDial: Internet dialer version 1.61 --> Initializing modem. --> Sending: ATZ ATZ OK --> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 OK --> Sending: AT+CGDCONT=1, "IP","Internet" AT+CGDCONT=1, "IP","Internet" ERROR --> Bad init string. --> Initializing modem. --> Sending: ATZ ATZ OK --> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 OK --> Sending: AT+CGDCONT=1, "IP","Internet" AT+CGDCONT=1, "IP","Internet" ERROR --> Bad init string. --> Initializing modem. --> Sending: ATZ ATZ OK --> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 OK --> Sending: AT+CGDCONT=1, "IP","Internet" AT+CGDCONT=1, "IP","Internet" ERROR --> Bad init string.
會發生這樣錯誤訊息的可能性有很多種,比如說網卡和 /etc/usb_modeswitch.conf
不匹配,或是 wvdial.conf
連線設定有誤,有可能是 SIM 卡沒安裝或沒插好,也有可能是網卡壞掉,甚至有時候從 Model B 換到 Model B+ 就解決了。
4. 如果發現連線到一半容易斷線該怎麼辦?
這通常是供電不足造成的結果。如果使用好的電源還是會容易斷線的話,解決方法第一個可以先修改 /boot/config.txt
如下,讓 USB 的電流可以從 600mA 提升到 1200 mA。
max_usb_current=1
解決方法第二是接一個有獨立供電的 USB Hub,問題就會解決了。
參考資料:
* Huawei E220
* How to setup a USB 3G Modem on Raspberry PI using usb_modeswitch and wvdial
* Use 3g/UMTS USB Dongle for WAN connection
* USB_ModeSwitch – Handling Mode-Switching USB Devices on Linux
* usb_modeswitch_dispatcher
* usb_modeswitch(1) – Linux man page
* udev
* Device Reference
* Linux / Unix Command: wvdial.conf
* Huawei E372 mobile broadband
* TROUBLESHOOT HUAWEI E398 ON MANJARO LINUX
* How to check Internet Speed via Terminal?
* How to Test Internet Connection Speed using Speedtest-Cli on Ubuntu Server
[基礎] 命令列設置無線網路
2014-09-21 13:41:18本文章使用的映像檔為 2014-09-09-wheezy-raspbian.img。
一般設置 Raspberry Pi 的無線網路大多是透過 WiFi Config 這個應用程式做設定。
但在某些情況,例如 從序列埠登入到 Raspberry Pi,就只能靠命列列設置無線網路。但是記得,做任何修改前要先備份原始設定,以免出錯了無法回復原始狀態。
用命令列設置無線網路的步驟如下:
1. 確認硬體資訊,我們使用 EDIMAX 7811Un 這張無線網卡做設定。建議使用的網卡有在清單中,才可隨插即用。
pi@raspberrypi ~ $ lsusb Bus 001 Device 005: ID 7392:7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]
2. 查看目前無線網路設定,一開始還沒連接上無線網路,所以狀態會是 “unassociated”。
pi@raspberrypi ~ $ iwconfig wlan0 wlan0 unassociated Nickname:"" Mode:Managed Frequency=2.412 GHz Access Point: Not-Associated Sensitivity:0/0 Retry:off RTS thr:off Fragment thr:off Power Management:off Link Quality:0 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0
3. 掃描無線網路,我們會根據掃描結果來設定無線網路。假設本例的 SSID 為 foo,加密方式為 WPA2,使用的 pre-shared key 為 1234567890123。
pi@raspberrypi ~ $ sudo iwlist wlan0 scan wlan0 Scan completed : Cell 03 - Address: 40:4A:03:92:BA:4B ESSID:"foo" Protocol:IEEE 802.11bgn Mode:Master Frequency:2.462 GHz (Channel 11) Encryption key:on Bit Rates:144 Mb/s Extra:rsn_ie=30140100000fac040100000fac040100000fac020c00 IE: IEEE 802.11i/WPA2 Version 1 Group Cipher : CCMP Pairwise Ciphers (1) : CCMP Authentication Suites (1) : PSK Quality=88/100 Signal level=42/100
4. 修改 /etc/wpa_supplicant/wpa_supplicant.conf
。
pi@raspberrypi:~$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
所對應的設定檔如下。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="foo" psk="1234567890123" proto=RSN key_mgmt=WPA-PSK pairwise=CCMP auth_alg=OPEN }
掃描結果與設定檔對應的欄位說明如下。
IE: IEEE 802.11i/WPA2 Version 1
表示加密方式為 WPA2,所對應的欄位 proto。RSN
:WPA(2)WPA
:WPA(1)
Group Cipher : CCMP Pairwise Ciphers (1) : CCMP
表示 WPA2 使用 AES 加密方式,所對應的欄位 pairwise。CCMP
:AES cipher,WPA(2)TKIP
:TKIP cipher,WPA(1)
Authentication Suites (1) : PSK
表示使用 pre-shared key 做鑑別,所對應的欄位為 key_mgmt。WPA-PSK
:Authentication via pre-shared keyWPA-EAP
:Authentication via enterprise authentication server。
再例如使用 SSID 為 bar,加密的方式為 WEP,使用的 WEP key 為 1234567890123。
pi@raspberrypi ~ $ iwlist wlan0 scan wlan0 Scan completed : Cell 03 - Address: 40:4A:03:92:BA:4B ESSID:"bar" Protocol:IEEE 802.11bg Mode:Master Frequency:2.437 GHz (Channel 6) Encryption key:on Bit Rates:54 Mb/s Quality=72/100 Signal level=43/100
所對應的設定檔如下。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="bar" key_mgmt=NONE auth_alg=OPEN wep_key0="1234567890123" }
更多 wpa_supplicant.conf 的範例可參考這裡。
5. 停用 wlan0 網卡。
pi@raspberrypi ~ $ sudo ifdown wlan0
6. 啟用 wlan0 網卡。
pi@raspberrypi ~ $ sudo ifup wlan0
可能會回傳以下訊息,我們忽略掉。
ioctl[SIOCSIWAP]: Operation not permitted ioctl[SIOCSIWENCODEEXT]: Invalid argument ioctl[SIOCSIWENCODEEXT]: Invalid argument
7. 將原來讀取 wpa_supplicant.conf 的程序 wpa_supplicant 殺掉。
pi@raspberrypi ~ $ sudo kill -9 $(ps -ef | grep wpa | awk '{print $2}')
8. 重新執行 wpa_supplicant,並讀取 wpa_supplicant.conf 設定。
pi@raspberrypi ~ $ sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
-B
表示以 daemon 方式在背景執行。-i
表示指定介面(interface)名稱。-c
表示設定檔路徑。
若回傳以下訊息,我們忽略掉。
rfkill: Cannot open RFKILL control device ioctl[SIOCSIWAP]: Operation not permitted ioctl[SIOCSIWENCODEEXT]: Invalid argument ioctl[SIOCSIWENCODEEXT]: Invalid argument
9. 執行 DHCP 用戶端,取得 IP。
pi@raspberrypi ~ $ sudo dhclient
若回傳以下訊息,我們忽略掉。
RTNETLINK answers: File exists
10. 查尋 IP 位址,成功取得 192.168.1.117
。
pi@raspberrypi ~ $ ifconfig wlan0 wlan0 Link encap:Ethernet HWaddr 74:da:38:05:68:4c inet addr:192.168.1.117 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1158 errors:0 dropped:79 overruns:0 frame:0 TX packets:53 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:109024 (106.4 KiB) TX bytes:6214 (6.0 KiB)
常見問與答:
1. WiFi連不上怎麼辦?
接螢幕用 GUI 設定吧,可避免錯誤的設定。
2. WiFi Config的Adapter不見了怎麼辦?
將 /etc/network/interfaces
和 /etc/wpa_supplicant/wpa_supplicant.conf
回復成預設值吧。
##### Default configuration of /etc/network/interfaces ##### auto lo iface lo inet loopback iface eth0 inet dhcp allow-hotplug wlan0 iface wlan0 inet manual wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf iface default inet dhcp
##### Default configuration of /etc/wpa_supplicant/wpa_supplicant.conf ##### ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1
[基礎] 從序列埠登入到 Raspberry Pi
2014-09-16 15:56:08購買產品:PL2303HX USB轉TTL傳輸線,PL2303HXD USB轉TTL傳輸線。
Raspberry Pi 有提供原生的序列(Serial)傳輸介面,因此只要透過 USB 轉 TTL 序列傳輸線,就可以在不需要螢幕和鍵盤滑鼠的情況下登入 Raspberry Pi (預設帳號密碼是 pi/raspberry),連上的虛擬終端機為 ttyAMA0。
序列傳輸介面至少需要有三條線,包括接地(GND)、接收(RX)和傳送(TX),參考接線圖如下。
比較好的產品會有較多的連接線,例如做流量控制的 RTS/CTS 等。在不同作業系統使用的方式大同小異,詳細步驟如下。
注意:
1. 目前 PL2303HX 僅支援 Windows XP/Vista/7 和 Linux 使用,如果是 Windows 8 和 Mac 作業系統,需使用 PL2303HXD 才能正常使用。
2. 安裝 USB 轉 TTL 傳輸線設定時,Raspberry Pi 不需要開機。但是完成安裝後,記得要將 Raspberry Pi 開機,才能透過該序列傳輸線連接。
Windows XP
1. 沒有接上 USB 轉 TTL 序列傳輸線時的裝置管理員。
2. 接上 USB 轉 TTL 序列傳輸線時的裝置管理員,一開始會跳出”歡迎使用尋找新增硬體精靈”。我們先暫時忽略這訊息並下載驅動程式吧。
3. PL2303HX 和 PL2303HXD 都是使用旺玖科技的晶片,官方網站驅動程式下載連結為:
http://www.prolific.com.tw/TW/ShowProduct.aspx?p_id=226&pcid=79
4. 下載後解壓縮執行 PL2303_Prolific_DriverInstaller_v1.8.0.exe,按照指示完成後重開機。再次開啟裝置管理員,可以發現多了一個連接埠 COM3。
5. 下載並開啟 putty。
6. 在 Connection type 先選擇 Serial,再根據剛剛的連接埠依序填入 Serial line、Speed的值。由於剛剛裝置管理員是看到 COM3,因此在 Serial line 也填入 COM3,Speed 填入 115200。
7. 相關的參數填完後,按 “Open” 就能連上 Raspberry Pi 如下圖。如果等了幾秒還是沒有畫面,可將 Raspberry Pi 重開(電源重插拔),應該就可以順利看到登入訊息。
Ubuntu Linux
1. 接上 USB 轉 TTL 序列傳輸線,打 ls /dev/ttyUSB*
,在我們的環境是長在 ttyUSB0。
2. 開啟 putty,如果還沒安裝請執行sudo apt-get install putty
安裝。
3. 在 Connection type 先選擇 Serial,再根據剛剛的連接埠依序填入 Serial line、Speed的值。由於該節點是長在 ttyUSB0,因此在 Serial line 也填入 ttyUSB0,Speed 填入 115200。
4. 如果出現 Unable to open serial port 如下圖,改用 sudo 權限執行 putty。
5. 相關的參數填完後,按 “Open” 將能連上 Raspberry Pi 如下圖。如果等了幾秒還是沒有畫面,可將 Raspberry Pi 重開(電源重插拔),應該就可以順利看到登入訊息。
Mac
1. 下載並安裝 PL2303HXD Driver,安裝後會重新開機。官方網站驅動程式下載連結為:
http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=229&pcid=41
2. 重開機生效。
3. 檢查是否出現裝置節點,打 ls /dev/cu*
,如果出現 /dev/cu.usbserial
,可以直接使用指令 screen /dev/cu.usbserial 115200
連線進去。
4. 如果沒出現 /dev/cu.usbserial
,試著重插拔 USB 轉 TTL 傳輸線和重新插拔電源。
5. 如果使用 screen 後沒畫面出現,重新插拔電源試試看(USB 轉 TTL 傳輸線不要拔掉)。
常見問與答:
1. 我需要接紅色的線嗎?
如果將 USB 轉 TTL 傳輸線的紅色線接到 Pin 2,將會從傳輸線供電給 Pi 而讓 Pi 開機。由於我們已經有供給穩定的電源給 Pi,因此這邊我們不會將紅色線接到 Pin 2。
2. 我可以將序列埠的功能關掉嗎?
我們可以透過修改/boot/cmdline.txt
,將
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
改為
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
還要再修改/etc/inittab
,將
#Spawn a getty on Raspberry Pi serial line T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
改為
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
再重開機即可。
[基礎] 以 VNC 和 Raspberry Pi 連線
2014-04-21 00:33:28VNC 是一種使用 RFB 協定的螢幕畫面分享及遠端操作軟體。由於 VNC 與作業系統無關,因此可跨平台使用。如果我們需要和 Pi 做有圖形介面的連線,VNC 是首選。
這裡簡介如何在 Pi 上安裝設定 VNC 伺服器,並透過個人電腦以 VNC 用戶端連線到 Pi。
1. 在 Pi 上安裝 VNC 伺服器。
pi@raspberrypi:~$ sudo apt-get install tightvncserver
2. 在個人電腦安裝 VNC 用戶端。
sosorry@ubuntu:~$ sudo apt-get install vncviewer gtkvncviewer
3. 在 Pi 上啟動 vncserver。
pi@raspberrypi:~$ vncserver
如果是第一次執行 vncserver 時會問幾個問題,包括登入的密碼和可供其他人流覽的 read-only 密碼,而 read-only 密碼可以不設定。登入的密碼會加密後存在 ~/.vnc/passwd 檔案裡。
You will require a password to access your desktops. Password: Verify: Would you like to enter a view-only password (y/n)? n
之後我們就可以透過 vncviewer 或是 gtkvncviewer 之類的軟體和 Pi 連線了。假設 Pi 的 IP 為 192.168.1.2。
sosorry@ubuntu:~$ vncviewer 192.168.1.2:5901
如果要對 VNC 伺服器做更多設定,常用的參數有:
– 連線埠 (:$NUM):例如設定 :1 開啟的 port 為5901,:2 開啟的 port 為5902,依此類推,預設為 :1。
– 解析度(geometry):例如 640×480, 800×600, 1024×768 等,預設為 1024×768。
– 像素深度(depth):例如 8, 16, 24 等,這是指每個像素可顯示的位元數,預設為 16。
例如我們想設定 VNC 伺服器監聽 5902 這個埠號,當有用戶連線到 5902 後可開啟一個 640×480 BGR233的畫面。
pi@raspberrypi:~$ vncserver :2 -geometry 640x480 -depth 8
如果使用 gtkvncviewer 連線,需要輸入 IP、port 和密碼,使用者名稱可任意輸入。
sosorry@ubuntu:~$ gtkvncviewer
常見問與答:
1. 如何修改 VNC 伺服器的連線密碼?
我們可以用 vncpasswd
這個指令改 VNC 的連線密碼。
Using password file /home/pi/.vnc/passwd Password: Verify: Would you like to enter a view-only password (y/n)? n
2. 我忘了設定 VNC 伺服器聽哪一個 port 了?
我們可以用 netstat
這個指令來查看目前系統開啟的 port。
pi@raspberrypi:~$ netstat -nutlp
-n :列出數字形式的連線地址
-u :列出 UDP 的連線
-t :列出 TCP 的連線
-l :正在進行 Listen (監聽)的服務之網路狀態
-p :列出 PID 與 Program 的檔名
pi@raspberrypi:~$ netstat -nutlp (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:6002 0.0.0.0:* LISTEN 2124/Xtightvnc tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:5902 0.0.0.0:* LISTEN 2124/Xtightvnc udp 0 0 0.0.0.0:22316 0.0.0.0:* - udp 0 0 0.0.0.0:68 0.0.0.0:* - udp 0 0 192.168.1.2:123 0.0.0.0:* - udp 0 0 127.0.0.1:123 0.0.0.0:* - udp 0 0 0.0.0.0:123 0.0.0.0:* -
我們也可以用 ps
這個指令查看目前系統執行的程序中。
pi@raspberrypi:~$ ps aux | grep vnc
– a :不和終端機 (terminal) 有關的所有程序
– u :所有有效使用者 (effective user) 的程序
– x :與 a 這個參數一起使用可列出完整資訊
– | grep vnc 表示只列出有包含 vnc 關鍵字的程序
pi@raspberrypi:~$ ps aux | grep vnc pi 2124 0.0 0.9 6532 3460 ? S 14:36 0:03 Xtightvnc :2 -desktop X -auth /home/pi/.Xauthority -geometry 640x480 -depth 8 -rfbwait 120000 -rfbauth /home/pi/.vnc/passwd -rfbport 5902 -fp /usr/share/fonts/X11/misc/,/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/75dpi/,/usr/share/fonts/X11/100dpi/ -co /etc/X11/rgb pi 2128 0.0 0.1 1760 508 ? S 14:36 0:00 /bin/sh /home/pi/.vnc/xstartup pi 2426 0.0 0.2 3548 800 pts/0 S+ 15:44 0:00 grep --color=auto vnc
3. 如何在開機時就啟動 VNC 伺服器?
在 /etc/init.d/ 下建立一個控制的腳本 (script),例如取名為 tightvncserver
pi@raspberrypi:~$ sudo vim /etc/init.d/tightvncserver
內容如下,重要的是在 start) 部份設定啟動的參數。
#!/bin/bash ### BEGIN INIT INFO # Provides: tightvncserver # Required-Start: $syslog # Required-Stop: $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: vnc server # Description: ### END INIT INFO export USER='pi' eval cd ~$USER # Check the state of the command - this'll either be start or stop case "$1" in start) # if it's start, then start vncserver using the details below su $USER -c '/usr/bin/vncserver :1 -geometry 800x600 -depth 16 -pixelformat rgb565' echo "Starting vncserver for $USER " ;; stop) # if it's stop, then just kill the process pkill Xtightvnc echo "vncserver stopped" ;; *) echo "Usage: /etc/init.d/tightvncserver {start|stop}" exit 1 ;; esac exit 0
修改腳本權限。
pi@raspberrypi ~ $ sudo chmod 755 /etc/init.d/tightvncserver
將該腳本加入預設的啟動程序。
pi@raspberrypi ~ $ sudo update-rc.d tightvncserver defaults
執行結果如下。
update-rc.d: using dependency based boot sequencing insserv: warning: script 'mathkernel' missing LSB tags and overrides
如果不喜歡這 warning,就順便修改一下 mathkernel 的腳本吧。
pi@raspberrypi ~ $ sudo vim /etc/init.d/mathkernel
根據 LSB 的規則將啟動資訊加到最前面。
### BEGIN INIT INFO # Provides: mathkernel # Required-Start: $local_fs # Required-Stop: $local_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: mathkernel ### END INIT INFO
重新啟動 Pi,再執行 netstat -nutlp
或是 ps aux | grep vnc
,可以看到 VNC 伺服器已經跑起來了。