OS
RPi2でubuntu14.04LTS(4)x-window
0インストール
まずx-windowをインストールします。
1 2 |
sudo apt-get -y install libraspberrypi-bin libraspberrypi-dev \ xserver-xorg-video-fbturbo xinit x11-xserver-utils |
インストールが完了したら/etc/X11/xorg.confを新規作成します。
1 2 3 4 5 6 |
Section "Device" Identifier "Raspberry Pi FBDEV" Driver "fbturbo" Option "fbdev" "/dev/fb0" Option "SwapbuffersWait" "true" EndSection |
ウインドウマネージャーはOpenBoxを使用します。
1 |
sudo apt-get -y install openbox openbox-xdgmenu obmenu |
デスクトップはCrunch Bang!(PiBang!)に倣って軽量のアプリケーションでまとめることにします。
- パネル tinit2
- 監視ツール conky
- ランチャ gmrun
- ターミナル lxterminal
- ファイルマネージャ spacefm
- 壁紙 hsetroot nitrogen/li>
1 |
sudo apt-get -y install tint2 conky gmrun lxterminal spacefm hsetroot nitrogen |
設定
OpenBox開始時の設定
OpenBox開始時にtintとconkyが起動するように設定を行います。
デフォルトの設定ファイルが/etc/xdg/openboxにあるので、これを~/.config/openboxにコピーします。
1 |
cp /etc/xdg/openbox/* ~/.config/openbox |
~/.config/openbox/autostartの末尾に設定を記述します。
15 16 17 18 19 20 21 22 23 |
# If you want to use XFCE config tools... # #xfce-mcs-manager & xset r rate 250 25 & spacefm --daemon-mode & nitrogen --restore & tint2 & conky -q & |
19行はキーリピートの設定、20行はspacefmをデーモンモードで起動しています。
startxすると画面下にtint2、左上にconkyが表示されます。
conkyのチラつき対策
conkyはデフォルト設定のままでは表示がチラつくので、これを解消するため、/etc/conky/conky.confに「double_buffer yes」を追加します。
54 55 56 57 58 59 |
show_graph_scale no show_graph_range no double_buffer yes TEXT ${scroll 16 $nodename - $sysname $kernel on $machine | } |
OpenBoxメニュー
インストールしたアプリケーションをOpenBoxのメニューに追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
<?xml version="1.0" encoding="UTF-8"?> <openbox_menu xmlns="http://openbox.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://openbox.org/ file:///usr/share/openbox/menu.xsd"> <menu id="root-menu" label="Openbox 3"> <item label="Run Program"> <action name="Execute"> <command> gmrun </command> </action> </item> <separator/> <item label="Terminal emulator"> <action name="Execute"><execute>x-terminal-emulator</execute></action> </item> <item label="Web browser"> <action name="Execute"><execute>x-www-browser</execute></action> </item> <item label="File Manager"> <action name="Execute"> <command> spacefm </command> </action> </item> <!-- This requires the presence of the 'menu' package to work --> <menu id="/Debian" /> <separator /> <menu id="client-list-menu" /> <separator /> <item label="ObConf"> <action name="Execute"><execute>obconf</execute></action> </item> <item label="ObMenu"> <action name="Execute"><execute>obmenu</execute></action> </item> <item label="Wallpaper"> <action name="Execute"> <command> nitrogen /usr/share/backgrounds </command> </action> </item> <item label="Reconfigure"> <action name="Reconfigure" /> </item> <item label="Restart"> <action name="Restart" /> </item> <separator /> <item label="Exit"> <action name="Exit" /> </item> </menu> </openbox_menu> |
ショートカットキー
OpenBoxのショートカットキーバインドを設定します。
~/.config/openbox/rc.xmlのから下を変更します。
305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 |
<!-- Keybindings for running applications --> <!-- <keybind key="W-e"> <action name="Execute"> <startupnotify> <enabled>true</enabled> <name>Konqueror</name> </startupnotify> <command>kfmclient openProfile filemanagement</command> </action> </keybind> --> <keybind key="A-F2"> <action name="Execute"> <startupnotify> <enabled>true</enabled> <name>Run Program</name> </startupnotify> <command>gmrun</command> </action> </keybind> <keybind key="W-f"> <action name="Execute"> <startupnotify> <enabled>true</enabled> <name>spacefm</name> </startupnotify> <command>spacefm</command> </action> </keybind> <keybind key="W-t"> <action name="Execute"> <startupnotify> <enabled>true</enabled> <name>Terminal</name> </startupnotify> <command>lxterminal</command> </action> </keybind> <keybind key="W-x"> <action name="Exit"> <prompt>yes</prompt> </action> </keybind> <keybind key="W-Tab"> <action name="ShowMenu"> <menu>client-list-combined-menu</menu> </action> </keybind> <keybind key="W-space"> <action name="ShowMenu"> <menu>root-menu</menu> </action> </keybind> |
上記の変更では以下のショートカットを追加しました。
- Alt+F2 ランチャ
- Super+f ファイルマネージャ
- Super+t ターミナル
- Super+x ログアウト
- Super+Tab メインメニュー
- Super+Space デスクトップとウィンドウの一覧
RPi2でubuntu14.04LTS(3)タイムゾーン、キーボード、ロケール設定
0タイムゾーンとキーボード
タイムゾーンの設定はdpkg-reconfigureから行います。
1 |
sudo dpkg-reconfigure tzdata |
日本語キーボードを使っている場合は、同様にdpkg-reconfigureから設定します。
1 |
sudo dpkg-reconfigure keyboard-configuration |
Keyboard modelはGeneric 105-key (Intl) PC、Country of origin for the keyboardはJapaneseを選択、そのほかはデフォルトのままで良いでしょう。
ロケール変更
ロケールを生成するlocale-genは、/var/lib/locales/supported.d下のファイルを参照します。
デフォルトでは英語ロケールのenファイルのみが存在します。このファイルを編集して、不要なロケールをコメントアウトしておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#en_HK.UTF-8 UTF-8 #en_DK.UTF-8 UTF-8 #en_IN UTF-8 #en_ZM UTF-8 #en_ZW.UTF-8 UTF-8 #en_NZ.UTF-8 UTF-8 #en_PH.UTF-8 UTF-8 #en_NG UTF-8 #en_US.UTF-8 UTF-8 #en_GB.UTF-8 UTF-8 #en_AU.UTF-8 UTF-8 #en_SG.UTF-8 UTF-8 #en_BW.UTF-8 UTF-8 #en_AG UTF-8 #en_ZA.UTF-8 UTF-8 #en_CA.UTF-8 UTF-8 #en_IE.UTF-8 UTF-8 |
通常はen_US.UTF-8だけで良いでしょう。
日本語ロケールを追加してロケールを変更します。
この作業はローカルコンソールで行います。SSH接続はクライアントのロケール情報が送信されるため、うまく行きません。
1 2 |
sudo locale-gen --purge ja_JP.UTF-8 sudo update-locale LANG=ja_JP.UTF-8 LC_TIME=POSIX LC_MESSAGES=POSIX |
時刻表示とメッセージは(ローカルコンソールで日本語表示が文字化けするので)POSIXにしておきます。
一旦ログアウトしてログインし直すと、ロケールが日本語になっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
ubuntu@ubuntu:~$ locale LANG=ja_JP.UTF-8 LANGUAGE= LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="POSIX" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="POSIX" LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8" LC_ALL= ubuntu@ubuntu:~$ |
RPi2でubuntu14.04LTS(2)SDを延命
0tmpfsを使う
SDへの書き込み回数を減らすため、テンポラリディレクトリをtmpfsにマウントするよう/etc/fstabを変更します。
対象とするのは/tmp、/var/tmpです。
1 2 3 4 5 |
proc /proc proc defaults 0 0 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1 /dev/mmcblk0p1 /boot/firmware vfat defaults 0 2 tmpfs /tmp tmpfs defaults,size=32m,noatime,mode=1777 0 0 tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0 |
後ろの2行が追加した部分です。
logをtmpfsに置いてバックアップ
/var/logもtmpfsに持っていきたいところですが、logはあとで参照したい場合がありますね。
スクリプトを使ってシャットダウン時にSDにバックアップしておき、起動時にtmpfsに戻せないかと考えていたところ、denian向けにちょうど良いスクリプトがありましたので、これを利用することにします。
このページから-etc-init.d-transientlog.shをダウンロードしてファイル名transientlogで保存します。
transientlogを/etc/init.dに配置し、パーミッションを設定します。
1 2 3 |
sudo sh -c "tr -d '\r' < transientlog > /etc/init.d/transientlog" sudo chown root:root /etc/init.d/transientlog sudo chmod a+x /etc/init.d/transientlog |
ファイルの改行コードがCR+LFなので、trコマンドでCRを削除しながらコピーしています。
このあとにinsservコマンドでスクリプトを登録するのですが、「Required-Startが無い」「Required-Stopが無い」と言ってエラーになるので、Providesの後に記述しておきます。
1 2 3 4 5 6 7 |
#!/bin/sh ### BEGIN INIT INFO # Provides: transientlog # Required-Start: # Required-Stop: # X-Start-Before: $syslog # X-Stop-After: $syslog |
insservで登録します。
1 |
sudo /usr/lib/insserv/insserv transientlog |
ホームディレクトリのファイル
~/.bash_historyなどもtmpfsに持って行きましょう。
bashスクリプト/usr/local/bin/temporizeを新規作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
#!/bin/bash FILES=(".bash_history" ".Xauthority" ".xsession-errors") temporize() { if [ ! -L $HOME/$1 ]; then if [ ! -e /tmp/$USER/$1 ]; then if [ -e $HOME/$1 ]; then cp -ra $HOME/$1 /tmp/$1 else touch /tmp/$USER/$1 fi fi rm -rf $HOME/$1 ln -s /tmp/$USER/$1 $HOME/$1 fi } permanent() { if [ -L $HOME/$1 ]; then rm $HOME/$1 fi if [ ! -e $HOME/$1 -a -e /tmp/$USER/$1 ]; then cp -ra /tmp/$USER/$1 $HOME/$1 fi rm -rf /tmp/$USER/$1 } do_start() { if [ `w -h |grep -c "^$USER[ \t]"` -eq "1" ]; then mkdir -p /tmp/$USER for f in ${FILES[@]}; do temporize $f file done fi } do_stop() { if [ `w -h |grep -c "^$USER[ \t]"` -eq "1" ]; then for f in ${FILES[@]}; do permanent $f done rm -rf /tmp/$USER fi } do_stopall() { for u in `ls /tmp`; do echo $u if [ `cat /etc/passwd | grep -c "$u:"` -eq "1" ]; then for f in ${FILES[@]}; do permanent $u/$f done rm -rf /tmp/$u fi done } case "$1" in login) do_start ;; logout) do_stop ;; shutdown) do_stopall ;; *) ;; esac |
temporize loginとして実行すると、~/.bash_history、~/.Xauthority、~/.xsession-errorsを/tmp/$USERにコピーし、ホームディレクトリからリンクを張ります。
temporize logoutではリンクを削除して/tmp/$USERからホームディレクトリに書き戻します。
シャットダウンやリブートするときは、temporize shutdownで/tmpからすべてのユーザーのファイルを書き戻します。
ログイン時にtemporize loginを実行するように~/.bash_profileを編集します。
1 |
/usr/local/bin/temporize login |
~/.bash_logoutにはtemporize logoutの処理を追記します。
1 2 3 4 5 6 7 8 9 |
# ~/.bash_logout: executed by bash(1) when login shell exits. # when leaving the console clear the screen to increase privacy if [ "$SHLVL" = 1 ]; then [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q fi /usr/local/bin/temporize logout |
シャットダウンとリブート時にはtemporize shutdownを実行するように、/etc/init.d/transientlogを編集します。
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred /usr/local/bin/temporize shutdown [ -f $LOCKFILE ] || return 1 # Check if I am root [ `id -u` -eq 0 ] || return 2 # Merge back to permanent storage cp -rfup $VARLOG -T $VARLOGPERM # The following cannot fail... or can it? umount -l $VARLOG umount -l $VARLOGPERM rm -f $LOCKFILE return 0 } |
キャッシュ間隔を長くする
デフォルトではメモリキャッシュの書き込みは5秒間隔となっています。
これを30秒に設定します。/etc/sysctrl.confの末尾に以下の行を追加します。
1 |
vm.dirty_writeback_centisecs = 3000 |
mlocateを削除
cron.dailyでmlocate(ファイル検索)のデータベースが更新されています。
私はmlocateを使わないので、パッケージごと削除してしまいます。
1 |
sudo apt-get purge mlocate |
RPi2でubuntu14.04LTS(1)インストール
0RaspberryPi2にubuntuをインストールしてみます。
OSイメージはubuntuのwikiで公開されているコミュニティ版を使用します。
イメージ書き込み
ZIPファイルにはimgとbmapがアーカイブされています。ddまたはbmapでSDにイメージを書き込みます。
1 2 |
sudo dd bs=4M if=ubuntu-trusty.img of=/dev/sdX sudo sync |
または
1 |
sudo bmaptool copy --bmap ubuntu-trusty.bmap ubuntu-trusty.img /dev/sdX |
書き込みが完了したらSDをraspiに挿してブートします。ユーザー、PWはともに”ubuntu”です。
領域拡張
raspbianのraspi-configにあたる設定ツールが無いので、ディスク領域拡張は手作業で行います。
まず、fdiskを起動して、パーティション2を最大領域に作り直します。
1 |
sudo fdisk /dev/mmcblk0 |
第2パーティションを削除(d,2)して、新規で再度作成(n,p,enter,enter,enter)、セーブして終了(w)。
ここで一旦リブートします。
1 |
sudo reboot |
再度ログインしたらパーティション2をリサイズします。
1 |
sudo resize2fs /dev/mmcblk0p2 |
アップデート
アップデートをかけてOSを最新の状態にしておきましょう。
1 2 |
sudo apt-get update sudo apt-get upgrade |
これで最小構成のubuntuが使えるようになりました。