Raspberry Piに,OSとしてRaspbian*1 with Desktopをインストールしてみた。
最新のバージョンのRasbianとしては4代目であるRaspbian Buster with desktopが,06/24/2019にリリースされている。RaspbianはRaspberry Pi向けに調整したDebian(Raspberry Pi+Debian=Raspbian)ということみたい。
Raspberry Pi3BにRaspbian Stretch with Desktopを,Pi4BにはRaspbian Buster with Desktopをインストールした。以前のPi BやPi 2BにはRaspbian Jessieを入れていたが,インストール方法はほぼ同じ。
注意するのは使用するMicroSDカード。Raspberry Piでは問題なく使用できるMicroSD/SDカードをけっこう選ぶ。使用中トラブルが出るMicroSDカードってのが意外と多くある。
経験的にTOSHIBAのものだと概ね大丈夫なので,理由がなければTOSHIBAのMicroSDカードを使用するようにしたほうがよい。
以下は,モニターやキーボード,マウスを使用しないでOSをインストールする手順をメモしておく。
Download*2した2018-04-18-raspbian-stretch.zipを解凍して, WindowsマシンでEtcher を使用してそのまま容量が8GB以上のMicro SDカードに書きこむか,もしくはzipファイルを解凍して2019-04-08-raspbian-stretch.imgを Win32DiskImager を使って,容量が8GB以上のMicro SDカードに書きこむ。
64GB,128GBなどの大きな容量のMicroSDカードを使用する場合には, Etcher で書き込む必要がある。 Win32DiskImager で書き込んだ場合はブート出来ない。
64GBや128GBといった大きな容量のSD/MicroSDカードを使用する場合は,購入したときには大抵exFATでフォーマットされているので,Raspbianのイメージを書き込んでもブート出来ない場合がある。これは,Raspberry Piでは最初のパーテーションがFAT/FAT32でないとブートローダーがロードできないため。
MicroSDカードをFAT32でフォーマットし直せば使えるのではあるが, SD card Formatter では64GB以上だとexFATでフォーマットされる。
なので,古いHP USB Disk Storage Format Tool や BuffaloのDiskFormatter2 なんかを使えばFAT32でフォーマットできる。(もしくは,パーテーションを操作できるツールを使う)
あとは,通常通りイメージファイルを書き込めば,64GB,128GBのMicroSDカードでも使用出来る。
モニターやキーボード,マウスを接続しないでインストールするため,ブートパーテーションに空の内容でsshというファイル名のファイルを作成した。こうすると,最初にブート後SSHでログイン出来るようになる。
書き込んだSD/MicroSDカードの/bootパーテーションはFAT/FAT32なため,Windowsマシンからでも直接編集出来る。
モニターやキーボード,マウスを使用しない場合,インストール後の各種設定を行うためにリモート接続する必要がある。
リモート接続する時には,
といった方法がある。
家のローカルネットワークにRaspberry Piを接続出来る場合,有線LAN接続でDHCPクライアントで自動でIP Addressがアサインされるので,有線LANでSSHログインしてインストールするのがやりやすいとは思う。無線LANでも前もって,設定ファイルを用意すれば,同様に使用することが出来る。
今回はこの方法で,SSHログインでインストールを行うことにした。
Pi3Bのシリアルポートを使用してPCと接続しシリアルコンソールを使用すれば,LANケーブルも接続しないで,OSのインストールと各種設定を行うことが出来る。
この場合,準備は上記のブートパーテーション(/boot)に空のファイルでsshを作成してしておくだけでOK。 LANケーブルを接続し,USBケーブルで電源を供給してしばらくたったらPuTTYなんかでSSHログインする。
この時,Raspberry PiにDHCPでアサインされたIP Addressを知らないと接続できない。
Windowsマシンでは,以下のようにすれば見つけることが出来る。
for /l %i in (0,1,255) do ping -w 1 -n 1 192.168.XXX.%i
実行が終わったら,
arp -a
とすると,EthernetのMACアドレスが表示されるんで,b8:27から始まのがRaspberry Piになる。
Linuxマシンであれば,
arp-scan --interface=eth0 192.168.XXX.0/24 | grep b8:27
とかすればわかる。
Pi4では,LANチップがBroadcom BCM54213Pに変更されて,これに伴いdc:a6:32で始まるMACアドレスに変更されている。
モニターやキーボード,マウスを接続しないでインストールする時にWLANを使用する場合には,指定するアクセスポイントに接続してdhcpを使用してNetworkに接続するということが必要になる。
無線LANを使う場合,/bootにwpa_supplicant.confを作成しておけば,ブート時に使用してくれるようだ。
最初にブート後,/boot/wpa_supplicant.confを/etc/wpa_supplicant/wpa_supplicant.confにコピー後,/boot/wpa_supplicant.confは削除される。
/boot/wpa_supplicant.confを以下のように作成しておく。
ctrl_interface=/var/run/wpa_supplicant country=JP network={ ssid="access1" key_mgmt=NONE <-- WEPの場合 wep_key0="xxxxxx" wep_tx_keyidx=0 priority=2 <-- 数字が大きい方が優先される } network={ ssid="access2" psk="xxxxxxxxxxxxxx" <-- WAPの場合 priority=1 }
Raspberry PiのIPアドレスを知るのは,有線LANと同様。
有線LANも無線LANも使用できない場合は,GPIOコネクタのシリアルポートを使用して,シリアル コンソールでログインするようにする。
この場合,Raspberry Pi3BとZeroWの場合は,
core_freq=250
Raspberry Pi4Bの場合は,
enable_uart=1
を,/boot/config.txtに追加する。
Piのヘッダピンの以下のシリアルポート信号をPCのCOMポートと接続する。
PC | Raspberry Pi |
GND | 6pin (GND) |
RXD | 8pin (TXD) |
TXD | 10pin (RXD) |
注意:Raspberry Pi側は3.3V CMOS系なので,これをCOMポート(RS232C)に変換する必要がある。
PC側は,
Baudrate:115200,Data:8,Stopbit:1,Parity:なし
で接続する。
Raspberry PiにACアダプター等で電源を接続して最初に起動したら,SSHでリモートログインする。
利用できるデフォルトのユーザーアカウントは,piユーザーとrootユーザー。
pi:raspberry root:パスワードは設定されていない
piユーザーでログインする。
まず,デフォルトで登録されているpiユーザのパスワードを変更する。(raspi-configでも出来る)
$ sudo passwd pi
ルール無しでパスワードを設定できる。
それから,rootのパスワードを設定する。
$ sudo passwd root
設定ツールraspi-configを使って,いくつか設定を行う。
# raspi-config
Asia → Tokyo
# timedatectl status Local time: 火 2017-07-11 08:48:28 JST Universal time: 月 2017-07-10 23:48:28 UTC RTC time: n/a Time zone: Asia/Tokyo (JST, +0900) NTP enabled: no NTP synchronized: yes RTC in local TZ: no DST active: n/a
# timedatectl set-timezone Asia/Tokyo
Japan
ja_JP.UTF-8
もしくは,/etc/locale.genファイルのja_JP.UTF-8 UTF-8を有効にして(#を削除する),
# locale-gen Generating locales (this might take a while)... ja_JP.UTF-8... done # localectl set-locale LANG=ja_JP.utf8
上記の設定をして,Finishをクリックで再起動。
パーテーションのサイズは最初に自動で拡張される。
SSH等でリモートログインして使用する場合は設定の必要ないが,モニターキーボードを接続して使用する場合は必要になる。
キーボードを接続している場合は,raspi-configで設定出来るが,今回は接続していないので別の方法で設定しておく。
現在の設定を確認する。
# localectl status System Locale: LANG=ja_JP.utf8 VC Keymap: n/a X11 Layout: gb X11 Model: pc105
のように,英語キーボード配列になっている。
# localectl set-keymap jp106
として,106キーボード配列を設定する。
# localectl status System Locale: LANG=ja_JP.utf8 VC Keymap: jp106 X11 Layout: jp X11 Model: jp106 X11 Options: terminate:ctrl_alt_bksp
106日本語キーボードに設定しておく。
Pi3Bでは,1.2Aが最大合計電源供給量になっていて,切り替えは出来ないみたいだ。なのでこれは必要ない。
Pi1B+やPi2B(Pi1Bは出来ない)だと,ソフトウェアで最大合計電源供給量を切り替え出来る。
その場合は,/boot/config.txtに以下を追加する。
max_usb_current=1
Piモデル | USBポート最大合計電源供給量 |
Raspberry Pi A | 500mA |
Raspberry Pi B | 500mA |
Raspberry Pi A+ | 500mA |
Raspberry Pi B+ | 600mA/1200mA(切り換え) |
Raspberry Pi2 B | 600mA/1200mA(切り換え) |
Raspberry Pi3 B | 1200mA |
Raspberry Pi ZeroW | 制限無し |
Raspberry Pi4 B | 1200mA |
ユーザを追加する。
$ su - # adduser yuji
/etc/groupファイルを編集して,追加したユーザが参加するグループを片っ端から登録する。
編集し終わったら,
# grpconv
で,変更を反映させる。
必要であれば,追加したユーザをsudoグループに追加する。
# gpasswd -a xxxxx sudo
追加したユーザのsudo時のパスワード入力を省くようにしておく。 /etc/sudoersファイルを編集して,以下の行を追加する。
xxxxx ALL=(ALL) NOPASSWD: ALL
デフォルトでは,GUIのXが立ち上がるようになっている。
CUIの操作で十分な場合は,デフォルトをコンソールに変更する。
# raspi-config
から,3 Boot OptionsのB1 Desktop / CUIでConsoleを選ぶ。
モニターやキーボード,マウスを接続しないでインストールする時に設定していた場合は,この無線LANの設定は必要ない。
/etc/wpa_supplicant/wpa_supplicant.confを編集する。
以下のように必要であれば編集する。
network={ ssid="access1" key_mgmt=NONE <-- WEPの場合 wep_key0="xxxxxxxxxxxxxxxxxxx" wep_tx_keyidx=0 priority=2 <-- 数字が大きい方が優先される } network={ ssid="access2" psk="xxxxxxxxxxxxxx" <-- WAPの場合 key_mgmt=WPA-PSK priority=1 }
これで,有線LANのケーブルをはずして,リブートし直すと無線LANで接続される。
パッケージ管理ツールのapt-get用に,近いサイトを設定する。
/etc/apt/sources.listを編集して,デフォルトを削除し,以下を追加
deb http://ftp.jaist.ac.jp/raspbian jessie main contrib non-free deb http://ftp.yz.yamagata-u.ac.jp/pub/linux/raspbian/raspbian/ jessie main contrib non-free
jessieのところを,必要によってstretch,busterにする。
システムを更新しておく。
# apt-get update # apt-get upgrade # apt-get dist-upgrade
時々,これを行って更新するようにする。
upgrade途中で書き込みエラーとかで失敗する場合は,MicroSDカードの相性や寿命が考えられる。
Raspberry Pi 3Bのファームフェアを必要なら更新する。(aptパッケージ管理に登録される前の実験的なコードも含まれる。)
# rpi-update
/etc/ntp.confを編集する。
#server 0.debian.pool.ntp.org iburst #server 1.debian.pool.ntp.org iburst #server 2.debian.pool.ntp.org iburst #server 3.debian.pool.ntp.org iburst server ntp1.jst.mfeed.ad.jp server ntp2.jst.mfeed.ad.jp server ntp3.jst.mfeed.ad.jp
に修正した。
以下のコマンドで,Network time on: yesになっているか確認する。
# timedatectl status Local time: Tue 2017-08-29 21:08:10 JST Universal time: Tue 2017-08-29 12:08:10 UTC RTC time: n/a Time zone: Asia/Tokyo (JST, +0900) Network time on: yes NTP synchronized: yes RTC in local TZ: no
yesになっていなければ以下のコマンドで有効にする。
# timedatectl set-ntp true
NTPサーバーを指定するには,/etc/systemd/timesyncd.confを編集する。
FallbackNTPには予備のサーバーを指定しておく。
[Time] NTP=ntp.jst.mfeed.ad.jp ntp.nict.jp FallbackNTP=time.google.com
/boot/config.txtに以下を追加。デフォルトは,メインRAMの内64Mbyteを割り当てるようになっています。
128Mbyteに変更する。
gpu_mem=128
リモート接続する時にGUIで操作したい場合は,通常はvncを使うかxrdpを使うかします。Raspbianではrealvnc-vnc-serverが入っているようだ。
vncを使う場合は,raspi-configの5. Interfacing OptionからP3 VNCをたどってenableにすればOK。
デフォルトをコンソールにしている場合はGUIに変更しておく。Raspi-configの3 Boot OptionsのB1 Desktop / CUIでGUIを選ぶ。
リモート接続側は,通常のRealVNC Viewerを使用する。
VNCを使ってリモート接続するとそのままでは,VGA(720x480)の解像度になってしまう。
これは,インストールされているVNCサーバー(RealVNC)では,モニター(ディスプレイ)レスの場合は接続している解像度をモニターから取得できないため,デフォルトの解像度になってしまう。
これでは不便なので,解像度の設定を変更する。
/boot/config.txtを修正する。下の行の行頭のコメント記号を外す。
framebuffer_width=1280 framebuffer_height=720
とする。
もしくは,常時,HDMIから希望の解像度で出力するようにしてもOK。
HDMIコネクタにディスプレーを接続しないとアナログ・ビデオ出力になってしまう。
この場合は,HDMIのディスプレーを接続しないでも強制的にHDMIから画像が出力されるように,合わせて設定しておく。
hdmi_force_hotplug=1 hdmi_group=2 hdmi_mode=85
これでも,1280x768@60Hzに設定できる。設定値はこちらを参照。)
後者は,HDMIを使ってディスプレー表示した場合でも,この解像度が使用される。
いつからかははっきりしないが,上記のやり方で解像度の変更を行ってもVNCの解像度が変更されなくなって,常に720x480もしくは1024x720になってしまうようになった。
この場合,Raspbian StrechだとRaspberry Piの設定にある解像度の設定で解像度を変更すると,VNCでもその設定値の解像度になる。
Raspbian Busterでヘッドレスの場合は,Raspberry Piの設定に解像度の項目が表示されなくなっていて,代わりに設定>Screen Configlationを使って解像度を変更する。
現在の画面の設定値を知りたい場合は,
# tvservice -s state 0x12000a [HDMI DMT (85) RGB full 16:9], 1280x720 @ 60.00Hz, progressive
のように,表示してくれる。
後は,Raspberry Piを再起動すれば,画面サイズが変更されている。
VNCクライアントには亜流がたくさんある。他のVNCクライアントを使いたい場合は, /root/.vnc/config.d/vncserver-x11の
Authentication=VncAuth
に変更する。もし該当する行がなければ追加する。
# vncpasswd -service
で,適当なパスワードをセットする。接続時に必要なので忘れないようにする。
デフォルトだとGUI環境でpiユーザで自動ログインされる。
これをやめる。
/etc/lightdm/lightdm.confファイルを編集して,
autologin-user=pi ↓ #autologin-user=pi
のように,コメントする。
PCから普通のvncクライアントを使って接続してもいいんだけど,Webブラウザで動作するvncクライアントnoVNCを使ってみる。
インストールは,
# apt-get install novnc
でインストールできる。
/root/.vnc/config.d/vncserver-x11に以下を追加する。
ProtocolVersion=4.1 RemapKeys=ja-jp
自動起動するように,novnc.serviceファイルを作成する。
[Unit] Description=noVNC service After=vncserver-x11-serviced.service [Service] ExecStart=/usr/share/novnc/utils/launch.sh Restart=always Type=simple User=xxx Group=pi [Install] WantedBy=multi-user.target
ファイルを反映させる。
# systemctl daemon-reload # systemctl enable novnc.service # systemctl start novnc.service
Webブラウザで,http://xxxx:6080/vnc.html?host=xxxx&port=6080 のURL(XXXXはマシン名)にアクセスする。
vncpasswdで設定したパスワードを使って接続すれば,vncの画面が表示される。
Windowsマシンでは標準でリモートデスクトップ接続が使えます。VNCの場合は,WindowsマシンへVNC Viewerをインストールする必要があるんで,面倒な場合はリモートデスクトップ接続を使いたいわけです。
Raspbianでも,このリモートデスクトップ接続を使える。
# apt-get install xrdp
Raspberry Piを再起動後は,Windowsマシンからリモートデスクトップ接続を使って接続できる。
リモートデスクトップ接続の場合,画面の解像度なんかも接続側で設定できる。また,音をリモートすることも出来る。(Raspberry PiにPulseaudioをインストールする必要がある。)
リモートデスクトップ接続した場合,キーボード入力がUSキー配列のままになっている場合がある。
この場合には,以下のようにして対処する。
ここにある km-0411.ini を/etc/xrdpにダウンロードして,ダウンロードしたkm-0411.iniファイルのシンボリックファイルをいくつか貼る。
# cd /etc/xrdp/ # ln -s km-0411.ini km-e0010411.ini # ln -s km-0411.ini km-e0200411.ini # ln -s km-0411.ini km-e0210411.ini # systemctl restart xrdp.service # systemctl enable xrdp.service
FTPプロトコルを使用して,ネットワーク上でファイルをやり取りする場合に便利なので,FTPサーバーをインストールしておく。
FTPサーバーのvsftpをインストール
# apt-get install vsftpd
設定ファイル/etc/vsftpd.confを修正する
anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 ascii_upload_enable=YES ascii_download_enable=YES chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list
/etc/vsftpd.chroot_listファイルを編集する
ユーザ権限の設定ファイルである/etc/vsftpd.chroot_listを編集する。
例:piとxxxxユーザーを追加
pi xxxxx
vsftpデーモンを起動して,自動起動もONする
# systemctl start vsftpd.service # systemctl enable vsftpd.service
Sambaは,Microsoftが開発したネットワーク上でファイル共有を行うMicrosoft Network機能をLinux(Unix)で使用できるように実装されたソフトウェア。
Microsoft Networkのファイルサーバー,ドメインコントローラ機能,プリンター共有,ユーザー認証などの機能がある。
Windowsマシンとのファイルやり取りなどに便利なので,インストールしておく。
Sambaをインストール
# apt-get install samba
で,パッケージでインストールできる。
設定ファイル /etc/samba/smb.conf を編集する
[global] unix charset = UTF-8 dos charset = CP932 workgroup = UENO server string = Pi's SMB file server netbios name = pi1 log file = /var/log/samba/log.%m max log size = 50 syslog = 0 panic action = /usr/share/samba/panic-action %d server role = standalone server max protocol = SMB2 ntlm auth = yes client ntlmv2 auth = yes security = user map to guest = bad User username map = /etc/samba/smbusers guest account = nobody passdb backend = tdbsam encrypt passwords = yes unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . dns proxy = no load printers = no disable spoolss = yes unix extensions = no wide links = yes deadtime = 10 browseable = yes [homes] comment = %U : Home Directories path = %H browseable = no writable = yes valid users = %S vfs objects = recycle recycle:repository = .recycle recycle:keeptree = no recycle:versions = yes recycle:touch = no recycle:maxsize = 0 recycle:exclude = *.tmp ~$* [public] comment = Public Directories path = /var/public guest ok = yes browseable = yes writable = yes force group = public force create mode = 0664 force directory mode = 0775 vfs objects = recycle recycle:repository = .recycle recycle:keeptree = no recycle:versions = yes recycle:touch = no recycle:maxsize = 0 recycle:exclude = *.tmp ~$*
このように編集する。
使用するユーザーを作成する
# pdbedit -a pi # pdbedit -a xxxxx <-- ユーザ名
で,Sambaを利用するユーザーを追加する。
Windowsのアカウント名を変換する設定ファイルを編集する
Raspberry PiにアクセスしてくるWindowsマシンのユーザーを,Raspbianのユーザーに変換するための設定ファイル /etc/samba/smbuser を編集する。
root = administrator admin nobody = guest pcguest smbguest
これを使用すると,Raspbianにアカウントが無いユーザーも,設定されたユーザー権でアクセス出来るようになる。
共有ディレクトリの作成
設定ファイルで設定した共有ディレクトリ /home/publicを作成する。
# mkdir /var/public # chmod 777 /var/public
Sambaの起動
Sambaを起動する。
# systemctl start smbd.service # systemctl start nmbd.service
ブート時に自動的にSambaを起動するようにセットする。
# systemctl enable smbd.service # systemctl enable nmbd.service
新しくコメントをつける