Raspberry Pi専用のツール群

Last modified: 2019-07-16

Raspberry Pi専用のツールについて。Raspbianには標準でインストールされているが、他ディストリから追加インストールして使うこともできる。

rc-gui (Raspberry Pi の設定) とraspi-config

Raspberry Pi専用の設定ツールで、ハードウェアに関係する部分とソフトウェアに関係する部分の両方が設定できる。

GUI版と端末版の2つがあり、パッケージ名も異なるが、ほとんどの項目はどちらからでも設定できる。

設定可能な項目

  • ユーザのパスワード
  • ホスト名
  • OS起動時にGUIデスクトップを起動するかどうか
  • 自動ログインするかどうか
  • 起動時にネットワークの確立を待つかどうか
  • 起動時にスプラッシュ画面を表示するかどうか
  • 画面解像度
  • オーバースキャンの切り替え
  • ピクセルダブリング(解像度自体を変えずに縦横それぞれを拡大したような表示にする・広さ自体は狭くなる)の切り替え
  • カメラなどの各インターフェースの有効/無効の設定
    • SSHやVNCのサーバプログラムは標準搭載されているがいずれも無効になっており、ここで有効化しないと利用できない
      • SSHは過去に標準で有効になっていたが、標準のパスワードやポート番号のままの設定のPiがインターネットに接続されて侵入されるというリスクを考えてか、後に標準で無効となった
    • SSHについてはRaspbianを同OSのイメージファイルから(NOOBSを用いずに)インストールする際にディスプレイなしで作業を行いたいときにmicroSDカードの第一パーティションの最上位ディレクトリにsshという名前の空のファイルを作成することでも有効化できる
  • GPUへの割り当てメモリ量(増やすとシステムメモリが減るので注意)
  • ロケール
  • タイムゾーン
  • キーボード
  • 無線LANを使用している国

ここで設定されるRaspbian標準のVNCサーバはRealVNC社のもので、同社のサイトからクライアント(x86_64のLinux用もある)をダウンロードして使わないとクライアントが動作しない。GNU/Linux PCなどでRemminaなどの汎用のリモートデスクトップクライアントを用いるには、代わりにPiにtightvncserverをインストールしてサーバソフトウェアを置き換える必要がある。

GPUへの割り当てメモリ量は、動画再生支援のみの利用であれば128Mあればよい。

rc-gui

  • GUIの設定ツール
  • “Raspberry Pi の設定” というメニュー項目から起動
  • コマンド名はrc_gui

raspi-config

  • 端末から実行・操作する(sudo raspi-configとして実行)
  • コマンド名はraspi-config
  • 一部の操作はこちらでなければ行えない
    • HDMIオーディオの使用
    • 実験的な、ESではないOpenGLに対応するグラフィックドライバの使用
    • microSDカードにイメージを書き込むと容量が小さくなるが、再び全体の容量が使えるようにするためのパーティションのサイズ変更を行う
      • これは初回起動時に自動で行われるようになっている

vcgencmd

各種情報を表示したり、一部のハードウェア制御を行ったりできるコマンド。サブコマンドの数が多いが、よく使用されるものを以下に示す。

(温度を“temp=52.6'C”のような形式で表示・数字部分のみを得るには少し加工が必要)
$ vcgencmd measure_temp

(CPUクロックを“frequency(45)=600000000”のような形式で表示・これも数字部分を得るには加工が必要)
$ vcgencmd measure_clock arm

(ディスプレイ出力をオフにする)
$ vcgencmd display_power 0 >/dev/null

(ディスプレイ出力をオンにする)
$ vcgencmd display_power 1 >/dev/null

(CPUとGPUそれぞれから利用可能なメモリ量を表示)
$ vcgencmd get_mem arm; vcgencmd get_mem gpu

(現在の詳細な設定を表示)
$ vcgencmd get_config int; vcgencmd get_config str

(使用可能なサブコマンド名の一覧を表示)
$ vcgencmd commands

決まった時刻にディスプレイの出力をオン/オフにする機能は、crontabで実行するようにする(スクリプトの中にこのコマンドの実行の記述を含めるのも可)と便利で、使い方次第では節電にもなる。

出力を加工して表示

Pythonを使用した例

下はPythonでクロックと温度を表示する例。

#! /usr/bin/python

from __future__ import print_function
import subprocess

c = subprocess.check_output(("vcgencmd", "measure_clock", "arm")).decode("ascii")
t = subprocess.check_output(("vcgencmd", "measure_temp")).decode("ascii")

clock = float(c.split("=")[1]) / 1000000000
temp = t[t.index("=") + 1:-3]

print("Clock:{:.2f}[GHz] Temp:{}['C]".format(clock, temp))

上のスクリプトにおけるクロックの出力については、手元のPi 3B+ではコマンドで直接取得すると0.6GHzとなるがこのスクリプトで表示すると処理負荷によりクロックが引き上げられて1.4GHzとなることが多い。なお、このコードはPyPyを用いても実行時間は短縮されない。

Luaを使用した例

上のPythonのコードと同様にしてクロックと温度をそれぞれ取得してまとめて表示する例。LuaJITを使用している。

#! /usr/bin/luajit

do
    local f = io.popen("vcgencmd measure_clock arm")
    local c = f:read()
    f:close()

    f = io.popen("vcgencmd measure_temp")
    local t = f:read()
    f:close()

    local idx = c:find("=")
    local clock = c:sub(idx + 1) / 1000000000

    idx = t:find("=")
    local temp = t:sub(idx + 1, t:len() - 2)

    print(("Clock:%.2f[GHz] Temp:%s['C]"):format(clock, temp))
end

手元のPi 3B+ではPythonを使用したものより処理時間がかなり短く、クロックが1.4GHzに上がることもほとんどない(0.6GHz表示になる)。