OS
RPi3にubuntu16.04(1) インストール
0RaspberryPi3にubuntu16.04をインストールします。
ubuntuのサイトからRPi3用のイメージファイルをダウンロード。SDに書き込みます。
1 2 |
wget http://www.finnie.org/software/raspberrypi/ubuntu-rpi3/ubuntu-16.04-preinstalled-server-armhf+raspi3.img.xz xzcat ubuntu-16.04-preinstalled-server-armhf+raspi3.img.xz | sudo dd of=/dev/sdX |
SDを延命
起動したら、まずSDの延命措置を施しましょう。
やることはRPi2のubuntu14.04インストールと同じですが、変更元ファイルの内容が一部違っていたりするので、ここでは16.04での変更内容を示します。
最初に/tmpと/var/tmpをtmpfsに追い出します。/etc/fstabに以下の変更を行います。
1 2 3 4 5 |
LABEL=cloudimg-rootfs / ext4 defaults 0 0 LABEL=system-boot /boot/firmware vfat defaults 0 1 proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults,size=32m,noatime,mode=1777 0 0 tmpfs /var/tmp tmpfs defaults,size=16m,noatime,mode=1777 0 0 |
つぎに、ログファイルもtmpfsに置くようにします。
RPi用のtransientlogスクリプトを使用します。
このスクリプトは、RPi起動時にログファイルをtmpfsに移動し、シャットダウン時にSDに書き戻すようになっているので、シャットダウンしてもログファイルの内容が保持されます。
1 2 3 4 |
wget https://github.com/senju/transientlog/archive/master.zip unzip master.zip cd transientlog-master chmod +x install.sh |
install.shを変更してinsservのパスを追加します。
148 149 150 151 152 153 |
#! /bin/sh cp transientlog.init /etc/init.d/transientlog chmod a+x /etc/init.d/transientlog #insserv transientlog /usr/lib/insserv/insserv transientlog |
また、transientlog.initをそのままインストールするとサービスのstart/stopがエラーになるので、一部変更します。
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in # 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 exit 0 ;; # 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 exit 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in # 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 exit 0 ;; # 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 exit 1 ;; esac |
変更を保存したらインストールします。
1 |
sudo ./install.sh |
その他の変更は、RPi2のホームディレクトリのファイル以降の内容と同じです。
そのほか
タイムゾーン、キーボード、ロケール設定をRPi2のタイムゾーン、キーボード、ロケール設定と同様に行います。
ついでにlogrotateでログファイル肥大化抑制もやっておきましょう。
RPi3にubuntu16.04(2) bluetoothとwi-fiを使う
0Bluetooth関連パッケージのインストール
pi3上のbluetoothを使うために、raspbianではbluez-firmware
とpi-bluetooth
パッケージが追加されていますが、これらはubuntuには含まれていません。
あちこち探してみると、ubuntu-pi-flavour-makerというプロジェクトが見つかりました。
ubuntuをベースに、pi2/3のubuntu MATE、lubuntu、xbuntuなどをリリースしていて、いずれもpi3のbluetoothとwifiに対応しています。
このubuntu-pi-flavour-makerのPPAを追加して、bluetoothとwifi関連のパッケージをインストールします。
1 2 3 |
sudo add-apt-repository ppa:ubuntu-pi-flavour-makers/ppa sudo apt-get update sudo apt-get install bluez bluetooth libbluetooth3 bluez-firmware pi-bluetooth |
インストールが完了したら、hciconfig
コマンドでbluetoothレシーバが認識されているか確認します。
1 2 3 4 5 6 |
ubuntu@ubuntu:~$ hciconfig hci0: Type: BR/EDR Bus: UART BD Address: C2:58:90:B8:27:EB ACL MTU: 1021:8 SCO MTU: 64:1 UP RUNNING RX bytes:820 acl:0 sco:0 events:53 errors:0 TX bytes:1850 acl:0 sco:0 commands:49 errors:0 |
bluetoothキーボードのペアリングと自動接続
本体側の準備ができたらキーボードを接続します。今回使用したのはiBuffaloのBSKBB24BKです。
設定はbluetoothctl
コマンドで行います。
1 2 3 |
ubuntu@ubuntu:~$ sudo bluetoothctl [NEW] Controller C2:58:90:B8:27:EB ubuntu [default] [bluetooth]# |
レシーバが認識されています。
キーボードのペアリングボタンを押して待機状態にしたら、scan on
と入力してデバイスをスキャンします。
1 2 3 4 5 |
[bluetooth]# scan on Discovery started [CHG] Controller C2:58:90:B8:27:EB Discovering: yes [NEW] Device EF:D0:89:DC:2C:26 BSKBB24 [bluetooth]# |
デバイスが見付かったらpair
コマンドでペアリングします。
1 2 3 4 5 6 7 8 9 10 11 |
[bluetooth]# pair EF:D0:89:DC:2C:26 Attempting to pair with EF:D0:89:DC:2C:26 [CHG] Device EF:D0:89:DC:2C:26 Connected: yes [CHG] Device EF:D0:89:DC:2C:26 Modalias: usb:v0A5Cp4502d011B [CHG] Device EF:D0:89:DC:2C:26 UUIDs: 00001000-0000-1000-8000-00805f9b34fb [CHG] Device EF:D0:89:DC:2C:26 UUIDs: 00001124-0000-1000-8000-00805f9b34fb [CHG] Device EF:D0:89:DC:2C:26 UUIDs: 00001200-0000-1000-8000-00805f9b34fb [CHG] Device EF:D0:89:DC:2C:26 Paired: yes Pairing successful [CHG] Device EF:D0:89:DC:2C:26 Connected: no [bluetooth]# |
ペアリングされたデバイスは、paired-devices
コマンドで確認できます。
1 2 3 |
[bluetooth]# paired-devices Device EF:D0:89:DC:2C:26 BSKBB24 [bluetooth]# |
ペアリングはrpiを再起動しても維持されます。デバイスにはconnect
コマンドで接続します。
1 2 3 4 5 |
[bluetooth]# connect EF:D0:89:DC:2C:26 Attempting to connect to EF:D0:89:DC:2C:26 [CHG] Device EF:D0:89:DC:2C:26 Connected: yes Connection successful [BSKBB24]# |
プロンプトが[bluetooth]
から[BSKBB24]
に変わっています。以降はデバイスを指定しなければBSKBB24に対するコマンドと解釈されます。
trust
コマンドを実行して、以降は自動で接続するようにしておきます。
1 2 3 4 |
[BSKBB24]# trust [CHG] Device EF:D0:89:DC:2C:26 Trusted: yes Changing trust succeeded [BSKBB24]# |
たぶん、ここまでの操作はUSBキーボードかsshで行っているのではないでしょうか。
一度接続を切って再起動し、自動的に接続するか試してみましょう。
1 2 3 4 5 6 7 |
[BSKBB24]# disconnect Attempting to disconnect from EF:D0:89:DC:2C:26 Successful disconnected [CHG] Device EF:D0:89:DC:2C:26 Connected: no [bluetooth]# exit [DEL] Controller C2:58:90:B8:27:EB ubuntu [default] ubuntu@ubuntu:~$ sudo reboot |
wifi設定
まずはrpiのwifiを有効にします。
/etc/network/interfaces
にwlan0
の設定を追記します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # Source interfaces # Please check /etc/network/interfaces.d before changing this file # as interfaces may have been defined in /etc/network/interfaces.d # See LP: #1262951 source /etc/network/interfaces.d/*.cfg auto wlan0 iface wlan0 inet manual |
追加したwlan0
を起動してifconfig
で確認します。
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 |
ubuntu@ubuntu:~$ sudo ifup wlan0 ubuntu@ubuntu:~$ ifconfig enxb827eb683af2 Link encap:Ethernet HWaddr b8:27:eb:68:3a:f2 inet addr:192.168.2.41 Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: fe80::ba27:ebff:fe68:3af2/64 Scope:Link inet6 addr: 2408:13:11c8:cc00:ba27:ebff:fe68:3af2/64 Scope:Global UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:280 errors:0 dropped:0 overruns:0 frame:0 TX packets:182 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:29416 (29.4 KB) TX bytes:26209 (26.2 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:160 errors:0 dropped:0 overruns:0 frame:0 TX packets:160 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:11840 (11.8 KB) TX bytes:11840 (11.8 KB) wlan0 Link encap:Ethernet HWaddr b8:27:eb:3d:6f:a7 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) ubuntu@ubuntu:~$ |
wifi関連のパッケージ、wpasupplicant
、wireless-tools
、iw
をインストールします。
1 |
sudo apt-get install wpasupplicant wireless-tools iw |
iwlist
コマンドでアクセスポイントを検索します。
1 2 3 4 5 6 7 8 9 10 |
ubuntu@ubuntu:~$ sudo iwlist wlan0 scan | grep ESSID ESSID:"WARPSTAR-01504C" ESSID:"WARPSTAR-01504C-W" ESSID:"aterm-8deeda-gw" ESSID:"elecom2g-1788A8" ESSID:"e-timer-1788A8" ESSID:"auhome_bXvkCh" ESSID:"catch22" ESSID:"Buffalo-G-5538" ubuntu@ubuntu:~$ |
この例ではcatch22
に接続します。
wpa_passphrase
コマンドで接続キーを生成して/etc/wpa_supplicant/catch22.conf
に保存します。接続先はcatch22
、パスフレーズはsortie50
です。
1 |
sudo sh -c "wpa_passphrase catch22 sortie50 > /etc/wpa_supplicant/catch22.conf" |
生成された/etc/wpa_supplicant/catch22.conf
の内容はこのようになっています。
1 2 3 4 5 |
network={ ssid="catch22" #psk="sortie50" psk=81a7fe6297535368a04df23b1cb2fadca7e058436deacd13c7136ea8fa949f1c } |
3行目に生のパスフレーズがコメントアウトされています。必要なければこの行は削除しておきましょう。
ネットワーク起動時にcatch22.conf
を読み込んでdhcp接続するように/etc/network/interfaces
を変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # Source interfaces # Please check /etc/network/interfaces.d before changing this file # as interfaces may have been defined in /etc/network/interfaces.d # See LP: #1262951 source /etc/network/interfaces.d/*.cfg auto wlan0 #iface wlan0 inet manual iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant/catch22.conf iface default inet dhcp |
設定は以上です。
wlan0
を再起動してアクセスポイントに接続します。
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 |
ubuntu@ubuntu:~$ sudo ifdown wlan0 && sudo ifup wlan0 Internet Systems Consortium DHCP Client 4.3.3 Copyright 2004-2015 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Listening on LPF/wlan0/b8:27:eb:3d:6f:a7 Sending on LPF/wlan0/b8:27:eb:3d:6f:a7 Sending on Socket/fallback DHCPRELEASE on wlan0 to 192.168.3.1 port 67 (xid=0x6a770bf0) Internet Systems Consortium DHCP Client 4.3.3 Copyright 2004-2015 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Listening on LPF/wlan0/b8:27:eb:3d:6f:a7 Sending on LPF/wlan0/b8:27:eb:3d:6f:a7 Sending on Socket/fallback DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 3 (xid=0x7210bc27) DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 5 (xid=0x7210bc27) DHCPREQUEST of 192.168.3.3 on wlan0 to 255.255.255.255 port 67 (xid=0x27bc1072) DHCPOFFER of 192.168.3.3 from 192.168.3.1 DHCPACK of 192.168.3.3 from 192.168.3.1 bound to 192.168.3.3 -- renewal in 13411 seconds. ubuntu@ubuntu:~$ |
アクセスポイントのIPアドレスは192.168.3.1
です。dhcpで192.168.3.3
のアドレスが割り当てられました。
ifconfig
で確認してみましょう。
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 |
ubuntu@ubuntu:~$ ifconfig enxb827eb68f23a Link encap:Ethernet HWaddr b8:27:eb:68:3a:f2 inet addr:192.168.2.41 Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: fe80::ba27:ebff:fe68:3af2/64 Scope:Link inet6 addr: 2408:13:11c8:cc00:ba27:ebff:fe68:3af2/64 Scope:Global UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:382 errors:0 dropped:0 overruns:0 frame:0 TX packets:260 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:32372 (32.3 KB) TX bytes:41483 (41.4 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:160 errors:0 dropped:0 overruns:0 frame:0 TX packets:160 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:11840 (11.8 KB) TX bytes:11840 (11.8 KB) wlan0 Link encap:Ethernet HWaddr b8:27:eb:3d:6f:a7 inet addr:192.168.3.3 Bcast:192.168.3.255 Mask:255.255.255.0 inet6 addr: fe80::ba27:ebff:fe3d:6fa7/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:52 errors:0 dropped:2 overruns:0 frame:0 TX packets:12 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:20278 (20.2 KB) TX bytes:1868 (1.8 KB) ubuntu@ubuntu:~$ |
RPi2でubuntu14.04LTS(12) xcompmgrで透過ターミナルとフェードイン/アウト
0コンポジットマネージャーxcompmgrを使うと、ターミナルの背景を半透明にしたり、ウインドウやメニューをフェードイン/アウトさせたりできます。
1 |
sudo apt-get -y install xcompmgr |
~/.config/openbox/autostartにxcompmgrを追加します。
19 20 21 22 23 24 |
xset r rate 250 25 & xcompmgr -f -D10 -I0.2 -O0.15 & nitrogen --restore & spacefm --daemon-mode & tint2 & conky -q & |
- -f フェードイン/アウト有効
- -D フェード処理周期(msec)
- -I フェードインの周期ごとの変化量
- -O フェードアウトの周期ごとの変化量
ウインドウとメニューに影を付けるには、次のようにします。
1 |
xcompmgr -f -D10 -I0.2 -O0.15 -c -t8 -l6 -r2 -o0.4 & |
- -c 影有効
- -t 上辺からのオフセット位置
- -l 左辺からのオフセット位置
- -o 影の非透明度
lxterminalの背景を透過させるには、~/.config/lxterminal/lxterminal.confを編集してbgalphaを設定するか、編集メニューの設定ダイアログを開き、スタイルタブの背景色ボタンをクリックしてOpacityを設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[general] fontname=DejaVu Sans Mono 10 selchars=-A-Za-z0-9,./?%&#:_ scrollback=1000 bgcolor=#282828282828 bgalpha=53000 fgcolor=#aaaaaaaaaaaa disallowbold=false cursorblinks=false cursorunderline=false audiblebell=false tabpos=top hidescrollbar=false hidemenubar=false hideclosebutton=false disablef10=false disablealt=false |
RPi2でubuntu14.04LTS(11)logrotateでログファイル肥大化抑制
0tmpfsに追い出した/var/logが大きくなりすぎないように、logrotateでログの保存期間を抑制します。
この例では、1日ごとまたは500KBごとにファイルを分け、1つ前までのファイルを残すようにします。
まずは/etc/logrotate.confを編集してデフォルトとwtmp、btmpの設定を変更します。
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 |
# see "man logrotate" for details # rotate log files weekly #weekly daily # use the syslog group by default, since this is the owning group # of /var/log/syslog. su root syslog # keep 4 weeks worth of backlogs #rotate 4 rotate 1 # create new (empty) log files after rotating old ones create # uncomment this if you want your log files compressed #compress size 500k # packages drop log rotation information into this directory include /etc/logrotate.d # no packages own wtmp, or btmp -- we'll rotate them here /var/log/wtmp { missingok # monthly daily size 500k create 0664 root utmp rotate 1 } /var/log/btmp { missingok # monthly daily size 500k create 0660 root utmp rotate 1 } # system-specific logs may be configured here |
次に、/etc/logrotate.d/rsyslogと/etc/logrotate.d/updatartを変更します。
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 |
/var/log/syslog { # rotate 7 rotate 1 size 500k daily missingok notifempty delaycompress compress postrotate reload rsyslog >/dev/null 2>&1 || true endscript } /var/log/mail.info /var/log/mail.warn /var/log/mail.err /var/log/mail.log /var/log/daemon.log /var/log/kern.log /var/log/auth.log /var/log/user.log /var/log/lpr.log /var/log/cron.log /var/log/debug /var/log/messages { # rotate 4 # weekly rotate 1 daily size 500k missingok notifempty compress delaycompress sharedscripts postrotate reload rsyslog >/dev/null 2>&1 || true endscript } |
1 2 3 4 5 6 7 8 9 10 |
/var/log/upstart/*.log { daily missingok # rotate 7 rotate 1 size 500k compress notifempty nocreate } |
ここで一度logrotateを実行して、変更後の設定に合わせてログを整理しておきます。
1 |
sudo logrotate -f /etc/logrotate.conf |
また、(「いままさに不具合の調査中!」など)特に必要なければ、圧縮されたログとupstartのログも削除してしまいましょう。
1 2 3 |
sudo /etc/init.d/transientlog stop sudo rm -f /var/log/*.gz /var/log/upstart/*.gz sudo /etc/init.d/transientlog start |
RPi2でubuntu14.04LTS(10)日本語入力
0
iBus-MOZCをインストールします。
1 |
sudo apt-get -y install ibus-mozc |
lxterminalなどでCtrl+SpaceしてもMOZCが有効にならない場合は、以下の設定を行います。
- x-windowからibus-setupを実行。
- Input MethodタブのCustomize active input methodsにチェックを入れる。
- Select an input methodドロップダウンでJapanese→Mozcを選択。
- Addボタンをクリック。
- Close。
MOZCのデータファイルは頻繁に書き込みが発生しそうなのでtmpfsに追い出してキャッシュしましょう。
/usr/share/libpam-script/temporize.listに.mozcと、ついでに.cacheを追加します。
1 2 |
# ITEMS=(".bash_history" ".Xauthority" ".xsession-errors") ITEMS=(".bash_history" ".Xauthority" ".xsession-errors" ".mozc" ".cache") |
RPi2でubuntu14.04LTS(9)LightDMでx-windowの言語選択
0
LightDMの言語選択メニューを有効にします。
18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
[greeter] #background=/usr/share/backgrounds/warty-final-ubuntu.png background=#2E3436 #theme-name=Ambiance theme-name=waldorf #icon-theme-name=LoginIcons icon-theme-name=CrunchBang #font-name=Ubuntu 11 font-name=Liberation Sans 10 xft-antialias=true xft-dpi=96 xft-hintstyle=slight xft-rgba=rgb indicators=~language;~session;~power |
この時点で言語選択メニューに表示されるのはEnglishとEnglish USAです。
メニューに日本語を追加するには、languege-pack-jaをインストールします。
languege-pack-jaはロケール設定で追加した日本語ロケールとかぶるので、一旦削除してからインストールします。
1 2 3 |
sudo rm /var/lib/locales/supported.d/local sudo locale-gen --purge sudo apt-get -y install language-pack-ja |
インストールが完了したらロケールを更新します。
1 2 |
sudo update-locale sudo update-locale --locale-file=/etc/default/x-locale |
LightDMで選択した言語によって、LANGとLANGUAGEが切り替わります。
言語のデフォルトは、/etc/default/localeのLANGの設定値になります。
RPi2でubuntu14.04LTS(8)x-window日本語化
0
x-window専用のロケール設定
x-windowを日本語化するとき問題となるのが、ttyのローカルコンソールでメッセージが文字化けしてしまうことです。
export LANG=Cとすれば済むことではありますが、それをいちいちやるのは面倒です。
x-windowだけのロケール設定ができないものかと調べてみたら、PAMでLightDMの認証時にスクリプトをフックできることが判りました。ローカルコンソールはLightDMを通らないので、x-windowセッションのときだけシステムロケール設定を上書きできます。
ロケールファイル作成
/etc/default/localeをコピーして/etc/default/x-localeを作成します。
1 |
sudo cp /etc/default/locale /etc/default/x-locale |
x-localeに対してupdate-localeを実行して、ロケールを設定します。
1 |
sudo update-locale --reset --locale-file=/etc/default/x-locale LANG=ja_JP.UTF-8 LC_ALL=ja_JP.UTF-8 |
メニューなども日本語化するには、上記にLANGUAGE=jp_JP.UTF-8
を追加します。
PAM設定
/etc/pam.d/lightdmを編集して、セッションのロケールファイルをlocaleからx-localeに変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#%PAM-1.0 auth requisite pam_nologin.so auth sufficient pam_succeed_if.so user ingroup nopasswdlogin @include common-auth auth optional pam_gnome_keyring.so auth optional pam_kwallet.so @include common-account session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close session required pam_limits.so @include common-session session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open session optional pam_gnome_keyring.so auto_start session optional pam_kwallet.so auto_start session required pam_env.so readenv=1 #session required pam_env.so readenv=1 user_readenv=1 envfile=/etc/default/locale session required pam_env.so readenv=1 user_readenv=1 envfile=/etc/default/x-locale @include common-password |
LightDMのログイン画面も日本語化するなら、/etc/pam.d/lightdm-greeterも同様に変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#%PAM-1.0 auth required pam_permit.so auth optional pam_gnome_keyring.so auth optional pam_kwallet.so @include common-account session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close session required pam_limits.so @include common-session session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open session optional pam_gnome_keyring.so auto_start session optional pam_kwallet.so auto_start session required pam_env.so readenv=1 #session required pam_env.so readenv=1 user_readenv=1 envfile=/etc/default/locale session required pam_env.so readenv=1 user_readenv=1 envfile=/etc/default/x-locale |
ログイン画面はLANGの値を見ているようで、LANGUAGEの設定は関係ないようです。
RPi2でubuntu14.04LTS(7)pam-scriptでbashログイン非依存なスクリプト実行
0
pam-scriptでLightDMに対応
LightDMでログインするとbashログインを経由せずにx-windowセッションが開始されるので、.bash_profileと.bash_logoutが実行されず、ホームディレクトリのファイルをtmpfsに逃がす仕掛けがうまく働きません。
これを解決するため、pam-scriptでセッション開始/終了時にスクリプトをフックさせることにします。
まずはインストール。
1 |
sudo apt-get -y install libpam-script |
pam-scriptはユーザー認証処理の特定のタイミングでスクリプトをフックする仕組みです。
/usr/share/libpam-scriptに既定のファイル名のスクリプトを置くことで、セッション開始/終了時に任意の処理を噛ませることができます。
また、bashでもLightDMでも同じように動作してくれます。
スクリプト作成
セッション開始時に実行されるスクリプト/usr/share/libpam-script/pam_script_ses_openを新規作成します。
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 |
#!/bin/bash . /usr/share/libpam-script/temporize.list temporize() { if [ ! -L /home/$1 ]; then if [ ! -e /tmp/$1 ]; then if [ -e /home/$1 ]; then cp -ra /home/$1 /tmp/$1 else if [ -d /home/$1 ]; then mkdir -p /tmp/$1 else touch /tmp/$1 fi chown $PAM_USER:$PAM_USER /tmp/$1 fi fi rm -rf /home/$1 ln -s /tmp/$1 /home/$1 fi } [ ! -e /home/$PAM_USER ] && exit 0 [ `w -h | grep -c "^$PAM_USER[ \t]"` -ne "0" ] && exit 0 mkdir -p /tmp/$PAM_USER chown $PAM_USER:$PAM_USER /tmp/$PAM_USER for f in ${ITEMS[@]}; do temporize $PAM_USER/$f done |
セッション終了時に実行されるスクリプトは/usr/share/libpam-script/pam_script_ses_closeです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#!/bin/bash . /usr/share/libpam-script/temporize.list permanent() { if [ -L /home/$1 ]; then rm /home/$1 fi if [ ! -e /home/$1 -a -e /tmp/$1 ]; then cp -ra /tmp/$1 /home/$1 fi rm -rf /tmp/$1 } [ ! -e /home/$PAM_USER ] && exit 0 [ `w -h | grep -c "^$PAM_USER[ \t]"` -ne "0" ] && exit 0 for f in ${ITEMS[@]}; do permanent $PAM_USER/$f done rm -rf /tmp/$PAM_USER |
pam-scriptはリブート、シャットダウン時の面倒は見てくれないので、まとめて/homeに書き戻すスクリプトwritebackhomeを新規作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/bin/bash . /usr/share/libpam-script/temporize.list permanent() { if [ -L /home/$1 ]; then rm /home/$1 fi if [ ! -e /home/$1 -a -e /tmp/$1 ]; then cp -ra /tmp/$1 /home/$1 fi rm -rf /tmp/$1 } for u in `ls /tmp`; do [ `cat /etc/passwd | grep -c "^$u:"` -ne "1" ] && continue [ ! -e /home/$u ] && continue for f in ${ITEMS[@]}; do permanent $u/$f done rm -rf /tmp/$u done |
これらのスクリプトは、スクリプトtemporizeから若干変更しました。
ユーザー名を$USERではなく$PAM_USERで受け取っていること、ホームディレクトリが存在するか確認している、退避するファイル名を別ファイルに追い出している、ファイルだけでなくディレクトリにも対応、などの変更を加えています。
退避するファイル名は/usr/share/libpam-script/temporize.listに記述します。
1 |
ITEMS=(".bash_history" ".Xauthority" ".xsession-errors") |
古い処理の削除と修正
.bash_profileからスクリプトの呼び出しを削除します。
1 |
# /usr/local/bin/temporize login |
.bash_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 |
/etc/init.d/transientlogからtemporizeに代えてwritebackhomeを実行させます。
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
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 /usr/local/bin/writebackhome [ -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 } |
ここでは分かりやすくするためにコメントアウトしていますが、行削除で構いません。
使わなくなったスクリプトは削除しておきます。
1 |
sudo rm /usr/local/bin/temporize |
RPi2でubuntu14.04LTS(6)ディスプレイマネージャーでログイン
0LightDMインストール
ディスプレイマネージャーは、いわゆるグラフィカルログインのインターフェースです。
最初にSLiMを入れようと思ったところ、プロジェクトHPが繋がらず、ArchLinuxのWikiによればSLiMは活動を停止しているとのことでした。
そこでQingyを試してみると、KMSと干渉して動作しません。
というわけで、普通にLightDMを使うことにします。ツールキットはGTKを使います。
1 2 |
sudo apt-get -y install lightdm-gtk-greeter sudo apt-get -y install lightdm |
いきなりlightdmパッケージをインストールすると、大量の依存パッケージもインストールされてしまいます。
先にlightdm-gtk-greeterをインストールすることで、最低限のパッケージだけをインストールします。
設定
/etc/lightdm/lightdm-gtk-greeter-ubuntu.confを編集してテーマをCrunchBang!風にします。
18 19 20 21 22 23 24 25 26 27 |
[greeter] background=#2E3436 theme-name=waldorf icon-theme-name=CrunchBang font-name=Liberation Sans 10 xft-antialias=true xft-dpi=96 xft-hintstyle=slight xft-rgba=rgb indicators=~session;~power |
次に/etc/lightdm/lightdm.confを新規作成してログインダイアログを設定します。
1 2 3 |
[SeatDefaults] greeter-hide-users=true allow-guest=false |
この例では、ユーザー名ドロップダウンを非表示、ゲストログインを不可にしています。
RPi2でubuntu14.04LTS(5)CrunchBang!風にしてみる
0CrunchBang!とPiBang!
CrunchBang!はモノクロのスパルタンなデザインが人気のLinuxディストリビューションで、これにインスパイアされてRaspberryPi向けにPiBang!というディストリビューションが公開されていました。
CPUパワーが向上したRaspberryPi2ではPiBang!がより快適に動作すると期待されますが、PiBang!のRaspberryPi2版はいまのところアナウンスが無いようです。
ということで、自分で作ってみることにしました。
リソースはCrunchBang!のリポジトリから拝借します。
壁紙とテーマを追加
ubuntuリポジトリからgtk2-engines-murrine、CrunchBang!リポジトリからcrunchbang-wallpapersとwaldorf-ui-themeをダウンロードしてインストールします。
1 2 3 4 5 |
sudo apt-get install gtk2-engines-murrine wget http://packages.crunchbang.org/waldorf/pool/main/crunchbang-wallpapers_1.0-1_all.deb wget http://packages.crunchbang.org/waldorf/pool/main/waldorf-ui-theme_0.07_all.deb sudo dpkg -i crunchbang-wallpapers_1.0-1_all.deb sudo dpkg -i waldorf-ui-theme_0.07_all.deb |
テーマが使用するliberationフォントをインストールします。
1 |
sudo apt-get -y install ttf-liberation |
- テーマ設定
ObConf(右クリック→ObConf)でWaldorfテーマを選択 - 壁紙設定
Nitrogen(右クリック→Wallpaper)でPreferencesを開いてAdd(参照先ディレクトリ追加)。
/usr/share/backgroundsを追加。
default-tile.pngを選択。
dmenuインストール
dmenuはsuckless-toolsパッケージに入っています。
1 |
sudo apt-get install suckless-tools |
起動スクリプトを~/config/dmenu/dmenu-bind.shに新規作成します。
1 2 |
#!/bin/bash dmenu_run -b -nb '#151617' -nf '#d8d8d8' -sb '#d8d8d8' -sf '#151617' |
CrunchBang!の設定ファイルを取得
CrunchBang!リポジトリからcb-configsのtarボールをダウンロードして展開します。
1 2 |
wget http://packages.crunchbang.org/waldorf/pool/main/cb-configs_20130504-2.tar.gz tar xzf cb-configs_20130504-2.tar.gz |
OpenBoxの設定
~/.config/openbox/rc.xmlを~/.config/openbox/~rc.xmlにリネーム。
CrunchBang!のcb-configs-20130504/skel/.config/openbox/rc.xmlを~/.config/openboxにコピー。
1 2 |
mv ~/.config/openbox/rc.xml ~/.config/openbox/~rc.xml cp cb-configs-20130504/skel/.config/openbox/rc.xml ~/.config/openbox |
~/.config/openbox/rc.xmlの下のブロックを、~/.config/openbox/~rc.xmlの内容で置き換える。
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 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 |
<!-- Keybindings for running applications --> <keybind key="A-F2"> <action name="Execute"> <startupnotify> <enabled>true</enabled> <name>Run Program</name> </startupnotify> <command>gmrun</command> </action> </keybind> <keybind key="A-F3"> <action name="Execute"> <startupnotify> <enabled>true</enabled> <name>dmenu-bind</name> </startupnotify> <command>~/.config/dmenu/dmenu-bind.sh</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> |
tint2設定
CrunchBang!のcb-configs-20130504/skel/.config/tint2/tint2rcを~/.config/tint2にコピー。
1 |
cp cb-configs-20130504/skel/.config/tint2/tint2rc ~/.config/tint2 |
conky設定
CrunchBang!のcb-configs-20130504/skel/.conkyrcを~にコピー。
1 |
cp cb-configs-20130504/skel/.conkyrc ~ |
SYSTEM INFOからスワップ表示を削除してCPU周波数を追加、SHORTCUT KEYSからアサインされていない表示を削除します。
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 71 |
############################################## # Output ############################################## TEXT S Y S T E M I N F O ${hr} Host:$alignr$nodename Uptime:$alignr$uptime Frequency (in MHz):$alignr$freq CPU1 usage:$alignr${cpu cpu0}% CPU2 usage:$alignr${cpu cpu1}% CPU3 usage:$alignr${cpu cpu2}% CPU4 usage:$alignr${cpu cpu3}% RAM:$alignr$mem/$memmax Disk usage:$alignr${fs_used /}/${fs_size /} Networking Up:$alignr${upspeed eth0} Networking Down:$alignr${downspeed eth0} S H O R T C U T K E Y S ${hr} Alt+F2$alignr Run Dialog Alt+F3$alignr Alt Menu Super+Space$alignr Main Menu Super+Tab$alignr Client Menu Super+t$alignr Terminal Super+f$alignr File Manager Super+x$alignr Logout |
アイコンテーマ
ubuntuリポジトリからdmz-cursor-themeを、CrunchBang!からgnome-icon-theme、crunchbang-icon-themeをインストールします。
1 2 3 |
sudo apt-get install dmz-cursor-theme wget http://packages.crunchbang.org/waldorf/pool/main/gnome-icon-theme_3.4.0-2crunchbang2_all.deb wget http://packages.crunchbang.org/waldorf/pool/main/crunchbang-icon-theme_20130502-1_all.deb |
cb-configs-20130504/skel/.gtk2rc-2.0を~にコピー。
cb-configs-20130504/skel/.config/gtk-3.0/settings.iniを~/.config/gtk-3.0にコピー。
1 2 3 4 |
cp cb-configs-20130504/skel/.gtkrc-2.0 ~ cp cb-configs-20130504/skel/.gtkrc-2.0.mine ~ mkdir .config/gtk-3.0 cp cb-configs-20130504/skel/.config/gtk-3.0/settings.ini ~/.config/gtk-3.0 |