常見問與答

[常見問與答] 解決從序列埠登入到 Pi 3 的亂碼問題

2016-03-18 02:54:03 service

購買產品:PL2303HX USB轉TTL傳輸線PL2303HXD USB轉TTL傳輸線

raspberry-pi-3-login-via-uart-baud-rates-broken

剛拿到 Pi 3 如果安裝 2016-02-26-raspbian-jessie 的映像檔後想使用序列埠連線,會發現出現亂碼,該怎麼辦?

這是因為原本 Pi 3 內建的硬體 UART 被 BCM2837 SoC 拿去給 Bluetooth 晶片組使用,而原本的 UART 輸出腳位(GPIOs 14 & 15)改成用 mini-uart port。意思是原本硬體 UART 有獨立的 clock divisor,因此 baud rate 可以維持在 115200,可是 mini-uart 使用系統核心時脈,實際只能跑到 72000 左右的 baud rate,因此當使用 115200 的 baud rate 連線就會出現亂碼。

解決的方法為:
步驟一,增加一個 pi3-disable-bt-overlaydevice tree overlay。這個 overlay 會停用藍牙,並且將 UART0/ttyAMA0 再設定給 GPIOs 14 & 15。
建議將 image 寫入 SD 卡後就直接修改 /boot/config.txt,在檔案最後增加兩行。

force_turbo=1
dtoverlay=pi3-disable-bt

add-pi3-disable-bt-overlay-at-config-file

其中,force_turbo=1 是強制 CPU 的時脈維持 1.2GHz 的時脈。預設值為 0 時表示時脈為 ondemand,會隨著負載而調整。
dtoverlay=pi3-disable-bt 表示載入 pi3-disable-bt 這個 device tree overlay,將會停用藍牙並將 UART0/ttyAMA0 設定到 GPIOs 14 & 15 腳位。

其實做完步驟一以後就可以用 115200 的 baud rate 透過序列埠連線進 Pi 了。可是雖然載入 pi3-disable-bt-overlay,但藍牙的服務依然是開啟的,因此還是要進入系統將藍牙服務停掉。

$ sudo systemctl disable hciuart

最後,因為使用 force_turbo=1 這個設定,整個 SoC 溫度會很高,因此再更新系統(包括 firmware 和 dtb)後就可以把這個設定註解掉,重開機生效。

$ sudo apt-get update
$ sudo apt-get upgrade

connect-to-raspberry-pi-3-via-serial

更多資訊:

1. 要如何看 CPU 時脈?
可以用 cat 指令查看以下三個檔案如下,分別為最高時脈、目前時脈、最低時脈。

$ cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
$ cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq

2. 如何看目前的 Device Tree?
首先要安裝 device tree compiler

$ sudo apt-get install device-tree-compiler

再用 dtc 指令查看。

$ dtc -I fs /proc/device-tree

結果會像

/dts-v1/;

/ {
    model = "Raspberry Pi 3 Model B Rev 1.2";
    compatible = "brcm,bcm2710", "brcm,bcm2709";
    memreserve = <0x3b000000 0x4000000>;
    #address-cells = <0x1>;
    #size-cells = <0x1>;
    interrupt-parent = <0x1>;
...
    soc {
        compatible = "simple-bus";
        ranges = <0x7e000000 0x3f000000 0x1000000>;
        #address-cells = <0x1>;
        phandle = <0x27>;
        #size-cells = <0x1>;
        linux,phandle = <0x27>;
...
            uart0_pins {
                phandle = <0x34>;
                brcm,function = <0x4>;
                brcm,pins = <0xe 0xf>;
                brcm,pull = <0x0 0x2>;
                linux,phandle = <0x34>;
            };
            uart1_pins {
                phandle = <0xf>;
                brcm,function = <0x2>;
                brcm,pins = <0xe 0xf>;
                brcm,pull = <0x0 0x2>;
                linux,phandle = <0xf>;
            };
...

參考資料:
* CONFIG.TXT
* DEVICE TREES, OVERLAYS AND PARAMETERS
* Raspberry Pi Device Tree Overlays
* Raspberry Pi 3 UART Overlay Workaround
* Raspberry Pi 3 compatibility (BT disable & serial port remap fix)
* RPi Serial Connection
* Raspberry Pi Serial Communication: What, Why, and a Touch of How
* More on Raspberry Pi serial ports

Tagged in: Bluetoothconfig.txtcpu frequencydevice treedevice tree compilerdevice tree overlaydtcmini-uartpi3-disable-bt-overlayRaspberry Pi 3serialUART Read more...

[常見問與答] 如何看 Raspbian 的版本資訊?

2016-02-12 00:06:16 service

自從 Raspbian 從 Wheezy 升級到 Jessie 以後,許多系統性的設計都有所不同。那要如何看 Raspbian 的版本資訊呢?

1. uname -a 查詢 kernel 版本。

# 2015-05-05-raspbian-wheezy 
pi@raspberrypi ~ $ uname -a
Linux raspberrypi 3.18.11-v7+ #781 SMP PREEMPT Tue Apr 21 18:07:59 BST 2015 armv7l GNU/Linux
# 2016-02-03-raspbian-jessie
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.1.17-v7+ #834 SMP Mon Feb 1 15:17:54 GMT 2016 armv7l GNU/Linux

 

2. /opt/vc/bin/vcgencmd version 查詢 firmware 版本。

# 2015-05-05-raspbian-wheezy 
pi@raspberrypi ~ $ /opt/vc/bin/vcgencmd version
Apr 21 2015 14:42:19 
Copyright (c) 2012 Broadcom
version 2d5ad04b63af4233440c3f7c8587108223201102 (clean) (release)
# 2016-02-03-raspbian-jessie
pi@raspberrypi:~ $ /opt/vc/bin/vcgencmd version
Feb  1 2016 17:51:17 
Copyright (c) 2012 Broadcom
version b3dc56931507f355d503ea69397778643f7a3dc3 (clean) (release)

 

3. strings /boot/start.elf | grep VC_BUILD_ID 查詢 firmware 版本。

# 2015-05-05-raspbian-wheezy 
pi@raspberrypi ~ $ strings /boot/start.elf | grep VC_BUILD_ID
VC_BUILD_ID_USER: dc4
VC_BUILD_ID_TIME: 14:42:19
VC_BUILD_ID_BRANCH: master
VC_BUILD_ID_TIME: Apr 21 2015
VC_BUILD_ID_HOSTNAME: dc4-XPS13-9333
VC_BUILD_ID_PLATFORM: raspberrypi_linux
VC_BUILD_ID_VERSION: 2d5ad04b63af4233440c3f7c8587108223201102 (clean)
# 2016-02-03-raspbian-jessie
pi@raspberrypi:~ $ strings /boot/start.elf | grep VC_BUILD_ID
VC_BUILD_ID_USER: dc4
VC_BUILD_ID_TIME: 17:51:17
VC_BUILD_ID_BRANCH: master
VC_BUILD_ID_TIME: Feb  1 2016
VC_BUILD_ID_HOSTNAME: dc4-XPS13-9333
VC_BUILD_ID_PLATFORM: raspberrypi_linux
VC_BUILD_ID_VERSION: b3dc56931507f355d503ea69397778643f7a3dc3 (clean)

 

4. cat /proc/version 查詢更完整的 kernel 資料。

# 2015-05-05-raspbian-wheezy 
pi@raspberrypi ~ $ cat /proc/version
Linux version 3.18.11-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03) ) #781 SMP PREEMPT Tue Apr 21 18:07:59 BST 2015
# 2016-02-03-raspbian-jessie
pi@raspberrypi:~ $ cat /proc/version
Linux version 4.1.17-v7+ (dc4@dc4-XPS13-9333) (gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03) ) #834 SMP Mon Feb 1 15:17:54 GMT 2016

 

5. cat /etc/os-release 查詢 OS 版本資訊。

# 2015-05-05-raspbian-wheezy 
pi@raspberrypi ~ $ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 7 (wheezy)"
NAME="Raspbian GNU/Linux"
VERSION_ID="7"
VERSION="7 (wheezy)"
ID=raspbian
ID_LIKE=debian
ANSI_COLOR="1;31"
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
# 2016-02-03-raspbian-jessie
pi@raspberrypi:~ $ cat /etc/os-release 
PRETTY_NAME="Raspbian GNU/Linux 8 (jessie)"
NAME="Raspbian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

 

6. cat /etc/issue 查詢 Linux distro 版本。

# 2015-05-05-raspbian-wheezy 
pi@raspberrypi ~ $ cat /etc/issue
Raspbian GNU/Linux 7 \n \l

# 2016-02-03-raspbian-jessie
pi@raspberrypi:~ $ cat /etc/issue
Raspbian GNU/Linux 8 \n \l

 

7. cat /etc/debian_version 查詢 Debian 版本編號。

# 2015-05-05-raspbian-wheezy 
pi@raspberrypi ~ $ cat /etc/debian_version
7.8
# 2016-02-03-raspbian-jessie
pi@raspberrypi:~ $ cat /etc/debian_version
8.0
Tagged in: firmwarekernelraspbianstart.elfversion版本 Read more...

[常見問與答] Raspbian Jessie版本差異?

2016-02-09 21:42:26 service

Raspbian 是最多人在 Raspberry Pi 上安裝的作業系統,也是 Raspberry Pi 基金會持續維護的版本。在 Raspberry Pi 官方網站的下載JessieJessie Lite 兩種選擇,這兩者有什麼差別呢?
Download-Raspbian-Jessie-and-Raspbian-Jessie-Lite

其實這兩者主要分別在於 Jessie Lite 沒有預設安裝 X-server 與相關的套件,因此無法用 startx 啟動視窗管理員。因為也沒有安裝 QtGTK+ 的函式庫,因此也無法執行相關的視窗程式。

比較 Jessie 和 Jessie Lite 這兩個映像檔的大小(2016-02-03),分別是 3.9G(Jessie) 和 1.4G(Jessie Lite)。
jessie-vs-jessie-lite-file-size

我們可以用 ncdu / 從根目錄開始比較目錄與檔案在磁碟的使用量。下圖左邊是 Jessie 右邊是 Jessie Lite。 /usr 目錄下主要放的是 shared library,例如 Jessie 有 libreoffice 和 libQtWebKit 等視窗應用程式函式庫。
jessie-vs-jessie-ncdu-root

也可以用 dpkg -l 列出已經安裝的套件列表,並用 dpkg -l|wc 統計安裝套件數目。左邊是 Jessie 約 1150 個,右邊是 Jessie Lite 約 411 個。
jessie-vs-jessie-lite-dpkg-list

再比較這兩個映像檔預設安裝套件,可以看到 Jessie Lite 少了 x11 和 xserver 相關套件。
meld-jessie-dpkg-list-vs-jessie-lite-dpkg-list

因為少了 X 與相關套件,因此 Jessie Lite 可以有更小的磁碟空間使用與更低的記憶體使用量。一般來說 Jessie 是適合個人桌面環境使用,而 Jessie Lite 適合安裝在伺服器上。

那要如何在 Jessie Lite 上安裝視窗環境呢? 只要用 sudo apt-get updatesudo apt-get install lxde 就可以將 LXDE 和相依的套件裝起來,大約會新裝 602 個套件共計 842MB。之後就可以用 startx 開始使用 GUI。
jessie-lite-install-lxde

另外,除了 Jessie Lite,還有一套針對單板電腦(Single-Board Computer)所優化過的系統 DietPi。DietPi 也做了一個比較表,列出與 Jessie Lite 不同的地方,是打造輕量級產品的另一個選擇。
DietPi-Jessie-vs-Raspbian-Jessie-Lite
圖片來源:Raspbian Jessie Lite now available

參考資料:
* Raspbian Jessie Lite now available
* 鳥哥的私房菜第二十三章、X Window 設定介紹
* Lightweight Debian: LXDE Desktop From Scratch

Tagged in: DietPijessieJessie Litelxderaspbianstartx Read more...

[常見問與答] Raspberry Pi Zero 網路解決方案

2015-12-12 07:36:52 service

由於 Raspberry Pi Zero 沒有內建乙太網路插槽,因此如何讓 Zero 可以上網需要額外安裝其他週邊,以下我們介紹幾種可能的方式。

1. (Ethernet)OTG + USB to RJ45 Converter

圖片來源:How to give an internet access to Raspberry Pi Zero

需要搭配的硬體如下:
- OTG Cable(支援 Micro USB)
- RJ45 to USB Converter(H1102NL 晶片)
- 網路線與數據機(或是路由器)

2. (Ethernet)OTG + USB to RJ45 Converter

圖片來源:How to give an internet access to Raspberry Pi Zero

需要搭配的硬體如下:
- OTG Cable(支援 Micro USB)
- RJ45 to USB Converter(SR9800 晶片)
- 網路線與數據機(或是路由器)

3. (Ethernet)Ethernet Module
zero-enc28j60
需要搭配的硬體如下:
- Ethernet Module(ENC28J60)
- 杜邦線母對母 x6
- 網路線與數據機(或是路由器)

4. (Tethering)OTG + Sharing Internet connections via USB

圖片來源:How to give an internet access to Raspberry Pi Zero

需要搭配的硬體如下:
- OTG Cable(支援 Micro USB)
- 智慧型手機資料傳輸線
- 可上網的智慧型手機

5. (WiFi)OTG + WiFi Dongle

圖片來源:How to give an internet access to Raspberry Pi Zero

- OTG Cable(支援 Micro USB)
- EDIMAX EW-7811Un 無線網卡(RTL8188CUS 晶片)

6. (WiFi)Hack WiFi Dongle
zero-hack-wifi-dongle
- EDIMAX EW-7811Un 無線網卡(RTL8188CUS 晶片)
- 單芯線 x4
* 注意:從 Micro USB 腳位直接接線到無線網卡將導致原本的 Micro USB 插槽無法同時讀取其他裝置

《速度測試》
我們使用 speedtest-cli,測速單位為 Mbit/s

Type Download Upload
OTG + USB to RJ45 Converter(H1102NL) Ethernet 19.37 2.16
OTG + USB to RJ45 Converter(SR9800) Ethernet 7.65 4.1
Ethernet Module(ENC28J60) Ethernet 3.67 3.1
OTG + WiFi Dongle(RTL8188CUS) WiFi 18.3 4.96
Hack WiFi Dongle(RTL8188CUS) WiFi 16.5 3.92

結論:
1. 想使用 Ethernet 上網,選擇 OTG + USB to RJ45 Converter(H1102NL) 方案。
2. 想使用 WiFi 上網,選擇 OTG + WiFi Dongle 方案。
3. 最好外接 USB Hub,一方面可提供穩定的電力,另一方面也能有更多的 USB 插槽可以使用。

參考資料:
* How to give an internet access to Raspberry Pi Zero
* Ethernet On Pi Zero – How To Put An Ethernet Port On Your Pi
* FIRST RASPBERRY PI ZERO HACK – PIGGY-BACK WIFI.

Tagged in: 7811UnENC28J60EthernetH1102NLOTGraspberry pi zeroRTL8188CUSspeedtest-cliSR9800TetheringUSB to RJ45 ConverterWiFi網路解決方案 Read more...

[常見問與答] Raspberry Pi 的工作溫度範圍?

2015-07-06 23:42:08 service

以下內容翻自於 geektopiaRPi FAQ

使用 BCM2835Raspberry Pi Model B,熱的來源主要從以下三個元件而來:
1. 電源輸入的穩壓器(voltage regulator)。
2. SoC BCM2835,包含了 ARM11 CPU、GPU 和 RAM。
3. LAN9512,是 USB 和 Ethernet 的控制器。

我們可以比較幾個情境。
* 閒置狀態(僅通電開機,沒有連接 Ethernet)
thermal raspberrypi idle
圖片來源:geektopia
BCM2835 平均溫度在 48.7°C。Voltage regulator 平均溫度在 49.9°C。LAN9512 溫度是三者最高的,平均溫度在 53.0°C。

* 網路傳輸狀態(Ethernet 以平均 40MBits/s 速度傳輸 20 分鐘後)
thermal raspberrypi samba
圖片來源:geektopia
LAN9512 溫度仍然是三者最高的,平均溫度在 59.2°C。

* 忙碌狀態(以 stress 程式對 CPU 進行壓力測試,使用率達 100%)
thermal raspberrypi stress.png
圖片來源:geektopia
LAN9512 溫度仍然是三者最高的,平均溫度在 60.6°C。

* 影片播放狀態(從隨身碟播放以 x264 視訊格式和 AC3 音訊格的 1080p 影片為例)
thermal raspberrypi video playback
圖片來源:geektopia
LAN9512 溫度仍然是三者最高的,平均溫度在 58.5°C。

結論:
1. LAN9512 溫度會比 voltage regulator 和 SoC 來的高。

2. 從以上幾張圖片的條件,我們可以知道 CPU 滿載或是檔案傳輸最容易讓溫度升高。並且在正常使用情況下(未超頻),各元件的最高溫度會是在 65°C 以下。

3. 而根據 RPi FAQ,LAN9512 的工作溫度範圍在 0°C 到 70°C,BCM2835 的工作溫度範圍在 -40°C 到 85°C。

The Raspberry Pi is built from commercial chips which are qualified to different temperature ranges; the LAN9512 is specified by the manufacturers being qualified from 0°C to 70°C, while the AP is qualified from -40°C to 85°C. You may well find that the board will work outside those temperatures, but we’re not qualifying the board itself to these extremes.

4. 根據實測,在 -78°C 的低溫下,Raspberry Pi 會停止反應。

圖片來源:geek

5. 除了使用紅外線測溫外,我們還可以使用 /opt/vc/bin/vcgencmd measure_temp 指令來查看 CPU 的溫度。
raspberry_pi_measure_cpu_temp

參考資料:
* Does the computer Raspberry Pi is heated? Study their operating temperatures
* RPi FAQ
* Raspberry Pi proven to be stable when submerged in liquid nitrogen
* Raspberry Pi model B Thermal Tests

Tagged in: BCM2835LAN9512Raspberry Pi Model Bstresstemperaturevoltage regulator Read more...

[常見問與答] Raspbian (2015-01-31) 在 Pi 2 的 RPi.GPIO 問題

2015-02-17 23:50:08 service

問題:
2015-01-31 釋出的 RaspbianPi 2 呼叫 RPi.GPIO 模組會出現 RuntimeError: This module can only be run on a Raspberry Pi! 錯誤訊息。

情境:
假設我們寫一個可以控制 LED 一明一滅的 python 程式。範例來自 用 Raspberry Pi 學 GPIO – 自己做遊戲機

線路圖如下:
led_blink_schematic

程式碼範如 led_blink.py

import RPi.GPIO as GPIO 
import time

LED_PIN = 12    
GPIO.setmode(GPIO.BOARD)
GPIO.setup(LED_PIN, GPIO.OUT)

try:
    while True:
        print("LED is on")
        GPIO.output(LED_PIN, GPIO.HIGH)
        time.sleep(1)
        print("LED is off")
        GPIO.output(LED_PIN, GPIO.LOW)
        time.sleep(1)

except KeyboardInterrupt:
    print "Exception: KeyboardInterrupt"

finally:
    GPIO.cleanup()    

如果在 Raspberry Pi 2 (2015-01-31 版本)執行這段程式碼會出現以下訊息:

pi@raspberrypi ~ $ sudo python led_blink.py
Traceback (most recent call last):
  File "led_blink.py", line 1, in 
    import RPi.GPIO as GPIO    
RuntimeError: This module can only be run on a Raspberry Pi!

看起來是沒有 RPi.GPIO 的模組。所以我們用 sudo pip install RPi.GPIO 指令安裝 RPi.GPIO 模組看看。

pi@raspberrypi ~ $  sudo pip install RPi.GPIO
Requirement already satisfied (use --upgrade to upgrade): RPi.GPIO in /usr/lib/python2.7/dist-packages
Cleaning up...

解答:
原來是要升級模組才行。我們要使用 sudo pip install --upgrade RPi.GPIO 指令。

pi@raspberrypi ~ $ sudo pip install --upgrade RPi.GPIO
Downloading/unpacking RPi.GPIO from https://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.5.11.tar.gz#md5=9dc3dab6ce2b7ccb833a866efb392821
  Downloading RPi.GPIO-0.5.11.tar.gz
  Running setup.py egg_info for package RPi.GPIO
    
Installing collected packages: RPi.GPIO
  Found existing installation: RPi.GPIO 0.5.9
    Uninstalling RPi.GPIO:
      Successfully uninstalled RPi.GPIO
  Running setup.py install for RPi.GPIO
    building 'RPi.GPIO' extension
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c source/py_gpio.c -o build/temp.linux-armv7l-2.7/source/py_gpio.o
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c source/c_gpio.c -o build/temp.linux-armv7l-2.7/source/c_gpio.o
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c source/cpuinfo.c -o build/temp.linux-armv7l-2.7/source/cpuinfo.o
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c source/event_gpio.c -o build/temp.linux-armv7l-2.7/source/event_gpio.o
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c source/soft_pwm.c -o build/temp.linux-armv7l-2.7/source/soft_pwm.o
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c source/py_pwm.c -o build/temp.linux-armv7l-2.7/source/py_pwm.o
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c source/common.c -o build/temp.linux-armv7l-2.7/source/common.o
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c source/constants.c -o build/temp.linux-armv7l-2.7/source/constants.o
    gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro build/temp.linux-armv7l-2.7/source/py_gpio.o build/temp.linux-armv7l-2.7/source/c_gpio.o build/temp.linux-armv7l-2.7/source/cpuinfo.o build/temp.linux-armv7l-2.7/source/event_gpio.o build/temp.linux-armv7l-2.7/source/soft_pwm.o build/temp.linux-armv7l-2.7/source/py_pwm.o build/temp.linux-armv7l-2.7/source/common.o build/temp.linux-armv7l-2.7/source/constants.o -o build/lib.linux-armv7l-2.7/RPi/GPIO.so
    
Successfully installed RPi.GPIO
Cleaning up...

再次執行,沒問題了。

Read more...

[常見問與答] 如何在Raspberry Pi上擷取畫面?

2014-05-16 00:16:53 service

如果是在 X Window 下,最簡單的方式是安裝 shutter,但這有兩個缺點,就是 shutter 相依的套件太多,所以光是截圖這個小功能就需要安裝將近 90MB 的套件,並且執行起來很慢,但使用最容易。

步驟如下:
1. 先安裝必要套件

pi@raspberrypi:~$ sudo apt-get install shutter

2. 從主要功能選單(main-menu)叫起來
shutter_shortcut
3. 執行區域性的截圖、或是全螢幕的截圖等功能
shutter_capture_window

如果覺的 shutter 不適合,還可以用 scrot + openbox,之後就可以按 PrtSc 直接做 snapshot。有關 scrot 的使用方式可以參考這篇

步驟如下:
1. 先安裝必要套件

pi@raspberrypi:~$ sudo apt-get install scrot

2. 增加按鍵的繫結(key binding),將 keybind 的定義放在 <keyboard> 和 </keyboard> 之間

pi@raspberrypi:~$ vi ~/.config/openbox/lxde-rc.xml
  <keybind key="Print">
      <action name="Execute">
          <command>scrot</command>
      </action>
  </keybind>

3. 進到桌面環境下,按 PrtSc 做 snapshot,擷取畫面的預設路徑是放在家目錄 (/home/pi) 下。
xwindow

 

如果是在 console 底下 可以透過 cat /dev/fb0 > snapshot.rawframebuffer 的資料轉存為 RGB565 的 raw 檔。但如果要用 Eye 等看圖軟體讀取,就需要將 raw 檔透過 FFmpeg 等軟體先轉為 PNG 或是 BMP 等格式。

幸運的是,我們也可以透過 vc_dispmanx_snapshot 這個函式取得目前螢幕的狀態。
Andrew Duncan 已經寫成成執行檔,下載後編譯就可以在 console 底下隨時擷取螢幕畫面。

步驟如下:
1. 先安裝必要套件

pi@raspberrypi:~$ sudo apt-get install libpng12-dev

2. 下載原始碼

pi@raspberrypi:~$ git clone https://github.com/AndrewFromMelbourne/raspi2png.git

3. 編譯

pi@raspberrypi:~$ cd raspi2png
pi@raspberrypi:~$ make

4. 使用,不加任何參數時預設是存成 png 格式的檔案

pi@raspberrypi:~$ ./raspi2png

console

可用的參數有以下幾種,當然這指令也可以在X Window下執行。

--pngname - 抓圖後的存檔名稱(預設是 snapshot.png )
--verbose - 顯示完整資訊
--height - 圖片高度(預設是螢幕的高度)
--width - 圖片寬度(預設是螢幕的寬度)
--type - 圖片的色彩格式,可用的格式為 RGB565 RGB888 RGBA16 RGBA32
--delay - 多久後擷取(預設是0,立刻執行)

最後,我們最喜歡用的其實是同一個作者的 fb2png。這程式可以讀取 framebuffer 並直接儲存成 png 格式的檔案。

步驟如下:
1. 先安裝必要套件

pi@raspberrypi:~$ sudo apt-get install libpng12-dev

2. 下載原始碼

pi@raspberrypi:~$ git clone https://github.com/AndrewFromMelbourne/fb2png.git

3. 編譯

pi@raspberrypi:~$ cd fb2png
pi@raspberrypi:~$ make

4. 使用

pi@raspberrypi:~$ ./fb2png

最後比較一下 raspi2png 和 fb2png,底下是相同時間的擷取結果,可以發現 raspi2png 是根據 VideoCore API 的 vc_dispmanx_display_get_info 傳回螢幕解析度,因此雖我們已經將 framebuffer 的解析度調整成 800×600,但是因為我們用的螢幕解析度是 1280×800,因此最後還是抓下 1280×800 的截圖。
snapshot

而 fb2png 則是開啟 /dev/fb0 的裝置檔,並根據 fb_var_screeninfo 回傳 framebuffer 的 xres 和 yres,因此最後截圖結果會是 800×600 的解析度,比較符合我們想要的結果。
fb

Tagged in: consolefb2pngraspi2pngscreenshotshuttersnapshotx window Read more...

[常見問與答] sudo: effective uid is not 0, is sudo installed setuid root?

2014-04-19 02:54:56 service

在某些情況下,sudo 會突然失靈,回傳錯誤訊息如: sudo: effective uid is not 0, is sudo installed setuid root?

解決方法如下:

1. 將 SD 卡接到其他電腦,在 /boot/cmdline.txt 最後面加上 single

2. 將 SD 卡插回 Raspberry Pi,重新啟動後將會進入 single user mode。

3. 將 /usr 的擁有者和群組改成 root,並修改全部權限為 rX 。

chown -R root:root /usr
chmod -R a+rX /usr

4. 更改 sudo 相關檔案的使用者和權限。

chown root:root /usr/lib/sudo/sudoers.so
chown -R root:root /etc/sudoers*
chmod 4755 /usr/bin/sudo

5. 測試。

su - pi
sudo
usage: sudo [-D level] -h | -K | -k | -V
usage: sudo -v [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-u user name|#uid]
usage: sudo -l[l] [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-U user name] [-u user name|#uid] [-g groupname|#gid] [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C fd] [-D level] [-g groupname|#gid] [-p prompt] [-u user name|#uid] [-g groupname|#gid] [VAR=value] [-i|-s] []
usage: sudo -e [-AknS] [-r role] [-t type] [-C fd] [-D level] [-g groupname|#gid] [-p prompt] [-u user name|#uid] file ...

6. 將 single user mode 取消後重開機就大功告成了。

Tagged in: not workingsudo Read more...

Leave a Reply

Your email address will not be published. Required fields are marked *


two + = 10


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>