ラベル RaspberryPi の投稿を表示しています。 すべての投稿を表示
ラベル RaspberryPi の投稿を表示しています。 すべての投稿を表示

2018年1月29日月曜日

Raspberry Pi の無線 LAN まわりの設定

raspi-config で無線 LAN の設定をしたのですが、設定ファイルを見るとパスワードがそのまま記録されていました。 かなり気になるので修正して、ついでに固定 IP にしました。

環境

  • Raspberry Pi 3 Model B
  • Raspbian Stretch Lite

無線 LAN パスワードがそのまま記録されていたので修正

パスワードがそのまま記録されているのはこのファイルです。

/etc/wpa_supplicant/wpa_supplicant.conf

まずはこのファイルから関連の箇所をごっそり削除

改めて SSID とパスワードを設定

$ wpa_passphrase MY_SSID | sudo tee -a /etc/wpa_supplicant/wpa_supplicant.conf
  • 標準入力からパスワードを入力してリターンキー

この時点で以下のようになりました。

$ cat /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

# reading passphrase from stdin
network={
        ssid="MY_SSID"
        #psk="MY_PASSWORD"
        psk=da2beb2e20bc43948554653b92b7c79c589926b0f91b0cd16a7dacc2e2b4dc95
}
  • いろいろいじったのが原因か、一般ユーザーでも見ることができてしまっています。

以下の行を削除

#psk="MY_PASSWORD"

一般ユーザーが中身を見たり修正できないようにしておきました。

$ sudo chmod 640 /etc/wpa_supplicant/wpa_supplicant.conf
$ ls -la /etc/wpa_supplicant/wpa_supplicant.conf
-rw-r----- 1 root root 214 Jan 29 23:25 /etc/wpa_supplicant/wpa_supplicant.conf

無線 LAN に固定 IP アドレスを設定

以下のように IP アドレス情報追加

echo "
interface wlan0
static ip_address=192.168.0.11/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1 8.8.8.8
" \
| sudo tee -a /etc/wpa_supplicant/wpa_supplicant.conf

Raspberry Pi 再起動


Raspberry Pi に Raspbian をヘッドレスで最初から固定 IP でインストール

Raspberry Pi 3 にモニターを接続しない状態 (ヘッドレス) で Raspbian Stretch をインストールします。

モニターが無いため最初から SSH でログインする必要があり、デフォルト状態では最初に DHCP で割りあてられた IP アドレスを探り出す必要があり大変です。

そこで、母艦 Ubuntu で microSD メモリカードに Raspbian をインストールする時に Raspbian の IP アドレスも固定で設定します。

環境

  • Raspberry Pi 3 Model B
  • Raspbian Stretch Lite
  • 母艦: Ubuntu 14.04

microSD カードに Raspbian イメージを書き込み (母艦の Ubuntu で作業)

Raspbian をインストールする microSD カードは手元にあった 32G のものを使います。 大事なファイルが残っていないことを確認し、念のため全てのパーティションを fdisk コマンドで削除しておきました。

https://www.raspberrypi.org/ から Raspbian Stretch Lite (デスクトップ環境無し) のイメージファイルをダウンロード。ダウンロード時の最新イメージファイルは 2017-11-29-raspbian-stretch-lite.zip でした。

念のため、チェックサムがサイトに掲載されているものと一致することを確認

$ sha256sum 2017-11-29-raspbian-stretch-lite.zip
e942b70072f2e83c446b9de6f202eb8f9692c06e7d92c343361340cc016e0c9f  2017-11-29-raspbian-stretch-lite.zip

ダウンロードした zip ファイルを解凍

$ unzip 2017-11-29-raspbian-stretch-lite.zip
$ ls -l
合計 2170716
-rw-r--r-- 1 worker worker 1858076672 11月 29 11:37 2017-11-29-raspbian-stretch-lite.img
-rw-rw-r-- 1 worker worker  364724005  1月 27 21:51 2017-11-29-raspbian-stretch-lite.zip
  • 解凍されて .img ファイルができました。

microSD カードがマウントされていないことを確認

$ mount | grep /dev/XXXXXXX
  • /dev/XXXXXXX は実際は microSD カードのデバイスファイルです。 (環境によって異なります)

イメージを microSD カードに書き込み

Warning

/dev/XXXXXXX を間違えると、意図せず HDD など他のデバイスの情報を消去してしまうので注意が必要です。

$ sudo dd bs=4M if=2017-11-29-raspbian-stretch-lite.img of=/dev/XXXXXXX conv=fsync

書き込んだ後の microSD の中身

$ sudo fdisk -l /dev/XXXXXXX

... snip ...

/dev/XXXXXXXp1            8192       93236       42522+   c  W95 FAT32 (LBA)
/dev/XXXXXXXp2           94208     3629055     1767424   83  Linux

正しく書き込めたこと確認 (母艦の Ubuntu で作業)

microSD カードからイメージを吸い出し

Warning

microSD カードのサイズが 32G の場合、以下を実行すると Ubuntu の HDD も 32G 消費されるので、HDD が容量不足にならないように注意が必要です。

$ sudo dd bs=4M if=/dev/XXXXXXX of=from-sd-card.img
$ ls -l
合計 33053532
-rw-r--r-- 1 worker worker  1858076672 11月 29 11:37 2017-11-29-raspbian-stretch-lite.img
-rw-rw-r-- 1 worker worker   364724005  1月 27 21:51 2017-11-29-raspbian-stretch-lite.zip
-rw-r--r-- 1 root   root   31624003584  1月 28 00:59 from-sd-card.img

from-sd-card.img のサイズは microSD カードと同じ 32G なので、比較のため切り詰め

$ sudo truncate --reference 2017-11-29-raspbian-stretch-lite.img from-sd-card.img
$ ls -l
合計 3985244
-rw-r--r-- 1 worker worker 1858076672 11月 29 11:37 2017-11-29-raspbian-stretch-lite.img
-rw-rw-r-- 1 worker worker  364724005  1月 27 21:51 2017-11-29-raspbian-stretch-lite.zip
-rw-r--r-- 1 root   root   1858076672  1月 28 01:04 from-sd-card.img
  • from-sd-card.img のサイズが 2017-11-29-raspbian-stretch-lite.img と同じになりました。

比較

$ diff -s from-sd-card.img 2017-11-29-raspbian-stretch-lite.img
ファイル from-sd-card.img と 2017-11-29-raspbian-stretch-lite.img は同一です
$ md5sum from-sd-card.img 2017-11-29-raspbian-stretch-lite.img
85c7c13b75e45e5394120e52415234a6  from-sd-card.img
85c7c13b75e45e5394120e52415234a6  2017-11-29-raspbian-stretch-lite.img

sync 実施

$ sudo sync

固定 IP アドレスの設定 (母艦の Ubuntu で作業)

microSD カードのパーティションを認識させる

$ sudo partx -v -a /dev/XXXXXXX
partition: none, disk: /dev/XXXXXXX, lower: 0, upper: 0
/dev/XXXXXXX: partition table type 'dos' detected
/dev/XXXXXXX: partition #1 added
/dev/XXXXXXX: partition #2 added

デバイスファイルができたことを確認

$ ls /dev/XXXXXXX*
/dev/XXXXXXX  /dev/XXXXXXXp1  /dev/XXXXXXXp2

Raspbian では以下のようにマウントされるようです。

デバイスファイル マウントポイント
/dev/XXXXXXXp1 /boot/
/dev/XXXXXXXp2 /

microSD カードがマウントされていないことを確認

$ mount | grep /dev/XXXXXXX

マウントポイント作成

$ mkdir mount_point_p1
$ mkdir mount_point_p2

マウント

$ sudo mount /dev/XXXXXXXp1 mount_point_p1/
$ sudo mount /dev/XXXXXXXp2 mount_point_p2/

Rasbian Stretch のカーネルは eth0 ではなく enxXXXXXXX (環境によって異なる) となります。このままだと実際のインターフェース名は Raspbian を起動して ssh しないとわからないので eth0 を使うようにします。

cmdline.txt をバックアップ

$ sudo cp -p mount_point_p1/cmdline.txt mount_point_p1/cmdline.txt.org

eth0 を使うように cmdline.txt の最後に以下のように追加

$ echo "
net.ifnames=0" | sudo tee -a mount_point_p1/cmdline.txt
$ diff -u mount_point_p1/cmdline.txt.org mount_point_p1/cmdline.txt
--- mount_point_p1/cmdline.txt.org      2017-11-29 02:37:02.000000000 +0900
+++ mount_point_p1/cmdline.txt  2018-01-28 16:35:22.000000000 +0900
@@ -1 +1,3 @@
 dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=37665771-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh
+
+net.ifnames=0

dhcpcd.conf をバックアップ

$ sudo cp -p mount_point_p2/etc/dhcpcd.conf mount_point_p2/etc/dhcpcd.conf.org

実際の環境にあわせて dhcpcd.conf の最後に IP アドレス情報を追加

$ echo "
interface eth0
static ip_address=192.168.0.10/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1 8.8.8.8" | sudo tee -a mount_point_p2/etc/dhcpcd.conf
$ diff -u mount_point_p2/etc/dhcpcd.conf.org mount_point_p2/etc/dhcpcd.conf
--- mount_point_p2/etc/dhcpcd.conf.org  2017-11-22 23:46:27.000000000 +0900
+++ mount_point_p2/etc/dhcpcd.conf      2018-01-28 16:41:48.855806158 +0900
@@ -55,3 +55,8 @@
 #interface eth0
 #fallback static_eth0

+
+interface eth0
+static ip_address=192.168.0.10/24
+static routers=192.168.0.1
+static domain_name_servers=192.168.0.1 8.8.8.8

Raspbian 起動時に ssh サーバーも起動するようにするため、ssh ファイル作成

$ sudo touch mount_point_p1/ssh

microSD カードをアンマウント

$ sudo umount mount_point_p1
$ sudo umount mount_point_p2

Ubuntu 機から microSD カードを抜く

インストール後の設定 (Raspberry Pi で作業)

microSD カードを Raspberry Pi に挿して起動

Raspberry Pi に ssh でログイン

  • user: pi
  • password: raspberry

ログインパスワード変更

$ passwd

raspi-config 起動

$ sudo raspi-config

raspi-config で以下を設定しました。

  • 無線 LAN
  • Locale
  • Timezone
  • Wifi Country

SSH 鍵の更新

$ sudo rm -v /etc/ssh/ssh_host*
$ sudo dpkg-reconfigure openssh-server

パスワード無しでの sudo 禁止

現状はこのような感じになっていました。

$ sudo cat /etc/sudoers.d/010_pi-nopasswd
pi ALL=(ALL) NOPASSWD: ALL

このファイルを削除

$ sudo rm /etc/sudoers.d/010_pi-nopasswd

その他

/boot/ssh は自動で削除されましたが、Raspberry Pi 再起動後も ssh でログインできています。

microSD は 32G を使いましたが、/ は最大容量まで拡張されたようです。

$ sudo fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 29.5 GiB, 31624003584 bytes, 61765632 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd711aa51

Device         Boot Start      End  Sectors  Size Id Type
/dev/mmcblk0p1       8192    93236    85045 41.5M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      94208 61765631 61671424 29.4G 83 Linux
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        29G  1.1G   27G   4% /
devtmpfs        460M     0  460M   0% /dev
tmpfs           464M   76K  464M   1% /dev/shm
tmpfs           464M   12M  452M   3% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           464M     0  464M   0% /sys/fs/cgroup
/dev/mmcblk0p1   41M   21M   21M  51% /boot
tmpfs            93M     0   93M   0% /run/user/1000

2016年5月2日月曜日

Raspberry Pi カメラのリアルタイム動画をリモートで確認とか静止画とか

Raspberry Pi に接続したカメラで静止画や動画を撮ったり、リアルタイム動画をリモートの Ubuntu で確認してみました。


環境

  • Raspberry Pi 3 Model B

  • Raspbian GNU/Linux 8.0 (jessie)

  • カメラはよくある Raspberry Pi 専用のものです

    https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfW8q9zWv2hb0VMPODZ6e5DlsdIgm7JeCkLmvf8PoJqv3vojiMUB3Ej4oAB8F8dLnPcnWvp7TqST9SZnERTSQPQWZbP_FynvrwXrjJbBDyo7fIY3ukPOztTPKVjNwmg8BaaqAHBbI6/s320/Screenshot+from+2016-05-02+12%253A25%253A26.png

Raspberry Pi でカメラを使えるようにする

Raspberry Pi をシャットダウン

電源 USB 抜く

カメラを Raspberry Pi に接続

rasp-config を起動

$ sudo raspi-config

raspi-config の画面で以下を実行

  • ‘6 Enable Camera’ を選択
  • ‘Enable support for Raspberry Pi camera?’ と聞いてくるので ‘Enable’ を選択
  • ‘Finish’ を選択
  • ‘Would you like to reboot now?’ と聞いてくるので ‘Yes’ を選択してリブート

Jpeg 形式で画像を保存

$ raspistill -o image.jpg

動画を保存

$ raspivid -o video.h264 -t 10000 -w 960 -h 540 -b 500000 -fps 31
  • デフォルトで h264 形式で保存されるようです
  • 10秒間 (10000ms) の動画を保存
  • サイズ 960 x 540
  • ビットレート 500000 Bits/s
  • フレームレート 31 frames per second

カメラの動画をリアルタイムでネットワーク越しの Ubuntuで確認

リモートの Ubuntu で以下実行

$ ssh pi@Raspberry raspivid -t 0 -o - | mplayer -fps 31 -cache 1024 -


2016年4月20日水曜日

Raspberry Pi 3 で Vino で VNC でデスクトップ共有

Respberry Pi 3 に HDMI で接続したディスプレイに表示されているデスクトップ環境を Vino を使って VNC で共有してみました。

ググると、Raspbian での Vino の設定は vino-preferences でできるようですが、今回の環境では vino-preferences を使えるようにする方法がわからなかったので dconfEditor でやってます。

環境

  • Raspberry Pi 3 Model B
  • Raspbian GNU/Linux 8.0 (jessie)

パッケージインストール

$ sudo apt-get install vino
$ sudo apt-get install dconf-editor
$ sudo apt-get install ibus-anthy
$ sudo apt-get install fonts-takao

dconfEditor で設定変更

HDMI ディスプレイのデスクトップで dconfEditor を起動

$ DISPLAY=:0.0 dconf-editor

dconfEditor の左側のツリーの画面で org -> gnome -> desktop -> remote-access をクリック

prompt-enabled のチェックを外す

require-encryption のチェックを外す

VNC クライアントとの通信が暗号化されないので気をつけて下さい

Vino 自動起動設定

設定ファイル用ディレクトリ作成

$ mkdir -p /home/pi/.config/autostart/

以下の内容で /home/pi/.config/autostart/vino.desktop 設置

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=VINO
Comment=
Exec=/usr/lib/vino/vino-server
StartupNotify=false
Terminal=false
Hidden=false

Raspberry Pi 再起動

$ sudo shutdown -r now
  • Vino へ VNC 接続ができるようになってます。

日本語入力ができるようにする

GUI デスクトップで ‘Menu’ -> ‘Preferences’ -> ‘IBus Preferences’

IBus デーモンをスタートするかきいてくるので ‘Yes’ をクリック

‘Input Method’ タブ

‘Add’ をクリック

‘Japanese’ -> ‘Anthy’ を選択して ‘Add’ をクリック

‘English - English (US)’ を選択して ‘Remove’ をクリック

‘Close’ をクリック

参考


2016年4月15日金曜日

ディスプレイを接続しないで Raspberry Pi を起動するとデスクトップの解像度が低い

デフォルト状態だと Raspberry Pi にディスプレイを接続していない状態で電源を投入すると、デスクトップの解像度がかなり低い状態になっています。

これでは困るので、ディスプレイが接続されていない状態でも指定したデスクトップの解像度で起動するように設定してみました。

環境

  • Raspberry Pi 3 Model B
  • Raspbian GNU/Linux 8.0 (jessie)

まずはデフォルト設定でディスプレイを接続しない状態で電源を投入した場合を確認します。

Raspberry Pi 起動後にディスプレイを接続すると、上で述べたようにデスクトップの解像度がかなり低い状態になっています。

起動時のカーネルパラメータは以下のようになっていました。 (見やすいように改行を入れてます)

$ cat /proc/cmdline
8250.nr_uarts=1
dma.dmachans=0x7f35
bcm2708_fb.fbwidth=640
bcm2708_fb.fbheight=480
bcm2709.boardrev=0xa22082
bcm2709.serial=0x3b65b052
smsc95xx.macaddr=B8:27:EB:65:B0:52
bcm2708_fb.fbswap=1
bcm2709.uart_clock=48000000
vc_mem.mem_base=0x3dc00000
vc_mem.mem_size=0x3f000000
dwc_otg.lpm_enable=0
console=ttyS0,115200
console=tty1
root=/dev/mmcblk0p7
rootfstype=ext4
elevator=deadline
fsck.repair=yes
rootwait

いったんシャットダウンし、電源 USB を抜きます。

次は、HDMI にディスプレイを接続してから電源 USB を接続し起動します。

起動時のカーネルパラメーターは以下のようになっていました。 (見やすいように改行を入れてます)

$ cat /proc/cmdline
8250.nr_uarts=1
dma.dmachans=0x7f35
bcm2708_fb.fbwidth=1824
bcm2708_fb.fbheight=984
bcm2709.boardrev=0xa22082
bcm2709.serial=0x3b65b052
smsc95xx.macaddr=B8:27:EB:65:B0:52
bcm2708_fb.fbswap=1
bcm2709.uart_clock=48000000
vc_mem.mem_base=0x3dc00000
vc_mem.mem_size=0x3f000000
dwc_otg.lpm_enable=0
console=ttyS0,115200
console=tty1
root=/dev/mmcblk0p7
rootfstype=ext4
elevator=deadline
fsck.repair=yes
rootwait

ディスプレイ接続無し/有りの場合を比較してみました。

-bcm2708_fb.fbwidth=640
-bcm2708_fb.fbheight=480
+bcm2708_fb.fbwidth=1824
+bcm2708_fb.fbheight=984

接続無しの場合は 640 x 480、接続有りの場合は今回の環境では 1824 x 984 となっていたようです。

https://www.raspberrypi.org/documentation/configuration/config-txt.md を見ると、解像度の固定は /boot/config.txt の hdmi_group 、 hdmi_mode で設定するようです。

以下のように変更してみました。

$ diff -u /boot/config.txt.org /boot/config.txt
--- /boot/config.txt.org        1980-01-01 00:00:00.000000000 +0000
+++ /boot/config.txt    2016-04-15 05:23:04.000000000 +0000
@@ -25,8 +25,8 @@
 #hdmi_force_hotplug=1

 # uncomment to force a specific HDMI mode (this will force VGA)
-#hdmi_group=1
-#hdmi_mode=1
+hdmi_group=2
+hdmi_mode=23

 # uncomment to force a HDMI mode rather than DVI. This can make audio work in
 # DMT (computer monitor) modes
  • 1280x768 60Hz にしてます。
  • ディスプレイの設定あまり詳しくないですが、このあたりの設定値を適切にしないと Raspberry Pi やディスプレイが壊れてしまう場合もあるようです。

再度シャットダウンし、一度 USB 電源を抜きます。

HDMI にディスプレイを接続していない状態で Raspberry Pi を起動

期待した通り、1280x768 になってます。

bcm2708_fb.fbwidth=1280
bcm2708_fb.fbheight=768

2016年4月1日金曜日

Raspberry Pi 3 に NOOBS を使って Raspbian インストール

環境

  • Raspberry Pi 3 Model B
  • Raspbian GNU/Linux 8.0 (jessie)
  • 母艦: Ubuntu 14.04 Desktop

母艦 Ubuntu での作業

https://www.raspberrypi.org/downloads/noobs/ から NOOBS をダウンロード

ダウンロードしたファイルは NOOBS_v1_9_0.zip

メモリカードの容量は数ギガ程度で良いようなのですが、32G class 10 の Micro SDHC を安価に入手できたのでこれを使います。

メモリーカード購入時のパーティション構成

$ sudo fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 31.6 GB, 31624003584 bytes
255 heads, 63 sectors/track, 3844 cylinders, total 61765632 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192    61765631    30878720    c  W95 FAT32 (LBA)

パーティション構成はこのままで作業を進めます。

メモリカードに NOOBS_v1_9_0.zip を展開

メモリカードのディレクトリに移動

$ cd /media/worker/XXXX-XXXX/

展開

$ unzip /.../some/where/NOOBS_v1_9_0.zip

メモリカードの使用量は 1G 程度になりました。

$ df -h /dev/mmcblk0p1
Filesystem      Size  Used Avail Use% Mounted on
/dev/mmcblk0p1   30G  1.0G   29G   4% /media/worker/XXXX-XXXX/

Raspberry Pi での作業

NOOBS をインストールしたメモリカードを装着

キーボード、マウス、ディスプレイを接続

念のため、電源の USB ケーブルを接続する前に実施します。

今回は Logicool の Unifying マウス、キーボードと HDMI ディスプレイを使いました。

電源の USB ケーブルを接続

本体に電源スイッチは無いようで、電源の USB を接続するとすぐに NOOBS が起動しました。

NOOBS の画面で Raspbian を選択して Install をクリック

10分程度待つと「OS(es) Installed Successfully」となったので OK をクリックすると再起動がかかり、無事 Raspbian で起動してきました。


その他もろもろ

ssh サーバーはデフォルトで起動してました。

ユーザー名:pi
デフォルトパスワード:raspberry

デスクトップ環境が起動している状態でのメモリ状況

$ free
             total       used       free     shared    buffers     cached
Mem:        948012     272584     675428       7336      17268     162024
-/+ buffers/cache:      93292     854720
Swap:       102396          0     102396
  • まだまだ余裕があります。

メモリーカードのパーティションは以下のように切り直されてました。

/dev/mmcblk0p1 1.1G W95 FAT16 (LBA) NOOBS が入ってます (多分)
/dev/mmcblk0p5 32M Linux 使途不明
/dev/mmcblk0p6 63M W95 FAT32 (LBA) /boot
/dev/mmcblk0p7 28.3G Linux / (多分)

スワップはパーティションではなく、ファイルが割り当てられてます。

$ cat /proc/swaps
Filename                                Type            Size    Used    Priority
/var/swap                               file            102396  0       -1