コンソール画面のスクリーンショットを撮影したい

Raspberry Pi 3 Model B
OS: Raspbian Stretch lite November 2017

キーボードもマウスもディスプレイも接続されていないRaspberry Pi 3なのである。コンソール画面の様子を確認したいのであるが現場へ赴きディスプレイを接続するのは大変な手間であるからどうしても遠隔地から確認する術が必要である。fbcatパッケージを導入するのがよいようである。

$ sudo apt install fbcat

あとはfbgrabコマンドを実行することでフレームバッファの中身をPNG画像として拵えてくれる。何のエラーもあらわれないのに真っ黒な画像しか得られない場合はコンソール画面が消灯している為である可能性が高いからまずはsettermで画面をつついてからスクリーンショットを撮影するが良さそうであった。

$ sudo fbgrab -c 1 -d /dev/fb0 -i screenshot.png
pnmtopng: 193 colors found

$ file screenshot.png
screenshot.png: PNG image data, 1920 x 1200, 8-bit colormap, interlaced

表示されている文字を手っ取り早く見届けるだけなら/dev/vcsを覗き見るという方法もあるようである。

$ sudo cat /dev/vcs | fold

参考:
jwilk/fbcat
Can I take a screenshot of a virtual console?
Linux framebuffer

消灯したコンソール画面を点灯させる

Raspberry Pi 3 Model B
OS: Raspbian stretch lite November 2017

キーボードもマウスも接続されていないRaspberry Pi 3にディスプレイだけが接続されている。デフォルトでは600秒でコンソール画面が消灯するようセットされているから起動して10分が経過するともはや何も見えない。

$ cat /sys/module/kernel/parameters/consoleblank
600

時にはコンソール画面の表示を拝見したいことがあるけれどもわざわざキーボードやマウスを接続するのも手数がかかるのでそういうときはsshで接続してこうである。

$ sudo su -c "setterm --term linux --blank 10 > /dev/tty1"

これで消灯していたディスプレイに灯が入った。blankの数値は0~60まで分単位で指定するようである。この内、0は決して消灯してはならぬという指示になる。或いは--blank pokeオプションを用いて次のようなコマンドを実行してもよろしい。

$ sudo su -c "setterm --term linux --blank poke < /dev/tty1"

点灯させたは良いがやはり今すぐ消灯させたいならば--blank forceである。此れはキーボードやマウス操作をしたとて消灯が解消されるものではなくなるから今後は手探りで操作するか再び--blank pokeで点灯するか選択を迫られるところである。

$ sudo su -c "setterm --term linux --blank force < /dev/tty1"

ところで以前はsettermのオプションはハイフン一つだった気がするけれども近頃はハイフン二つをサポートするようになったことに気がついた。

COMPATIBILITY
Since version 2.25 setterm has support for long options with two hyphens, for example --help, beside the historical long options
with a single hyphen, for example -help. In scripts it is better to use the backward-compatible single hyphen rather than the
double hyphen. Currently there are no plans nor good reasons to discontinue single-hyphen compatibility.

なおRaspberry Piを再起動しても永続的に消灯時間を指定するならコマンドラインオプションでconsoleblankを引き渡せばよいということである。単位は秒であった。

$ sudo vi /boot/cmdline.txt
#dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=fb9e6cf7-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=fb9e6cf7-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait consoleblank=0

settermコマンドのblankオプションと違ってconsoleblankはどうやら60分が上限では無い模様であり莫大な数値を指定しても受け入れた。然し乍ら1億5千万を超えたあたりから起動時のメッセージが表示されずラズベリーが四つ並んでいる画面しか表示されなくなったので無闇に大きな値を放り込むのは良くないと思った。

$ cat /sys/module/kernel/parameters/consoleblank
150000000

参考:
How do I prevent the screen from going blank?
The Kernel Command Line - Raspberry Pi Documentation

Raspbianのスワップ領域を拡張する

Raspberry Pi 3 Model B
OS: Raspbian stretch lite November 2017
MySQL 5.7.21

Raspbianを導入したRaspberry Pi 3でMySQLのビルドをこなしていたらこのような有様であった。何者かの差し金でコンパイラの処理が勝手に打ち切られている模様である。

$ make
(snip)
[ 50%] Building CXX object sql/CMakeFiles/sql.dir/item_geofunc_setops.cc.o
c++: internal compiler error: Killed (program cc1plus)

dmesgから手がかりを探るとどうやらOut of memory killerがメモリを潤沢に用いるプロセスの刈り取りに乗り出しているようである。Raspberry Pi 3 Model Bのメモリ搭載量1GBに対して800MBを超えるメモリを消費すればお咎めを受けるのも宜なるかなというところである。

$ dmesg
(snip)
[16075.666040] Out of memory: Kill process 11885 (cc1plus) score 853 or sacrifice child
[16075.666059] Killed process 11885 (cc1plus) total-vm:919780kB, anon-rss:842300kB, file-rss:0kB, shmem-rss:0kB
[16076.103693] oom_reaper: reaped process 11885 (cc1plus), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB

さりとて素直に応じるわけにもいかぬ。途轍もない待ち時間がふいになるのは誠に遺憾である。物理メモリが足りぬならスワップ領域を拡張するのが良かろうと思う。Raspbianのデフォルトでは100MBが割り当てられていたが近頃のMySQLをビルドするには到底足りない模様であるからセオリーに則って物理メモリの1~2倍程度に変更する。Raspbianは/etc/dphys-swapfileでスワップ領域の設定を管理するようである。

$ sudo vi /etc/dphys-swapfile
#CONF_SWAPSIZE=100
CONF_SWAPSIZE=2048

$ sudo dphys-swapfile install
want /var/swap=2048MByte, checking existing: deleting wrong size file (104857600), generating swapfile ... of 2048MBytes

$ sudo dphys-swapfile swapon

これでスワップ領域が2GBに拡張された。

$ free -m
              total        used        free      shared  buff/cache   available
Mem:            927          76         455          12         395         787
Swap:          2047           0        2047

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

スワップ領域を2GBに拡張して再度、MySQLのビルドを試みたところ450分程度を費やして恙無く完了した。なおスワップ領域を1GBにセットしたときもビルドは完了したものの一体どうしたことかSegmentation faultでMySQLが全く操作できなかったので、実際にはうまい具合にビルドできていなかった疑いがある。

参考:
man dphys-swapfile
Increase size of existing swap file