Raspberry Pi 3のWi-Fi自動起動のこと
Raspberry Pi 3にArch Linux Armをインストールして、
オンボードのEthernetとWi-FIに個別のIPアドレスを付与する点で
非常にハマったのでメモを残しておく。
起
Arch Linux Armのネットワーク設定は、
デフォルトの場合、Systemd-Networkdが使われていて、
Ethernetの方は自動認識してくれるが、Wi-Fiは設定を作成しないと接続できない。
そこでWi-Fi接続の際は、WPA_Supplicantの定義ファイルとSystemd-Networkdの定義ファイルを作成する必要がある。
ところが、これをやってもIPアドレスは振られるものの
なぜかWi-FIから接続できなかった。(結局、原因もわからなかった)
承
そこで、Systemd-Networkdを使わずにNetworkManagerを使う方針に変更。
nmtuiで接続設定を作成(SSID、パスワード関連およびIPアドレス設定)し、
OS起動時にWi-Fi接続が行われるように設定した。
- 「自動的に接続する 」をON
- 「全ユーザーに使用可能 」をON
ところが、起動時にWi-Fi接続は行われなかった。
コマンドを用いて手動起動は確認できた。
nmcli con up <接続定義名>
Arch Linux ArmにUPNPメディアレンダラーを立てるのこと
以前、Raspberry Pi上にUPNPメディアレンダラーを立てる記事を書いた。
nagamitsu1976.hatenadiary.jp
これと同じことをArch Linux Armでやった時、
gmrender-resurrectのビルドに多少手間取ったので記録を残しておく。
GMRenderのビルド
クローン
GitHubからソースを取得する。
https://github.com/hzeller/gmrender-resurrect.git
依存ライブラリのインストール
Arch Linux AURにgmrender-resurrect-gitとして登録されていたので、
依存関係はここを見て確認した。
https://aur.archlinux.org/packages/gmrender-resurrect-git
見たところ、必要なパッケージはlibupnp、gst-plugin-good, gst-plugin-baseだったので、
これらをインストールした。
$ pacman -S libupnp # vlcをインストールしたから入ってた(多分) $ pacman -S gst-plugins-good $ pacman -S gst-plugins-base
ビルド
Configure, make, make installを実行。
$ ./autogen.sh $ ./configure $ make $ make install
テスト
gmrender-resurrectのReadmeを参照して、
手順通りに起動し、音声が再生できればOK。
Arch Linux Armでラジオを鳴らすのこと
以前、Raspberry PiでRadikoを聴く件について書いた。
nagamitsu1976.hatenadiary.jp
あれと同じことをArch Linux Armでやってみたら
存外ハマったので記録を残しておく。
ALSAの設定
音声出力設定
alsa-utilパッケージのインストールと/boot/config.txtに下記を設定する。
dtparam=audio=on hdmi_drive=2 # HDMIで音を出す場合に設定 audio_pwm_mode=2 # ステレオ端子で音を出す場合に設定
詳しくはArch Linux Armのサイトの手順を参照。
Raspberry Pi | Wiki | Arch Linux ARM
aplay -Lでデバイスが見つからない場合
root以外のユーザで上記の設定をしていても
デバイスが見つからないことがある。
その場合は、ユーザをaudioグループに追加するとデバイスが参照できる。
再起動でボリュームが初期値に戻る
Arch Linuxの時と同じ対処方法をとればOK。
$ sudo alsactl -f /var/lib/alsa/asound.state store $ sudo alsactl restore
SWFTools(swfextract)のビルド
Arch Linux Arm用にビルドされたSWFToolsが無いので、ソースからビルドする必要がある。
作業内容については、この記事を参考にした。
radikoの録音・再生(ArchLinux) | まっつんぶろぐ
ソースの取得
SWFToolsのサイトから最新ソースをダウンロード。
http://www.swftools.org/
依存ライブラリのインストール
SWFToolsのサイトから情報を引きたかったのだが、参照できなかったので、
先のブログ様の記事の通り、ライブラリをインストールした。
$ pacman -S pdflib zip fftw zziplib ruby
ビルド
ソースを展開してビルド開始。
先のブログ様の記事の通り、途中でエラーが発生し、ビルドが中断するが、
srcディレクトリ内を参照し、swfextract.oができていればOKとする。
$ ./Configure $ make # swfextractができていれば $ make install
Raspberry Piに Arch Linux Armをインストールするのこと
Arch Linux Arm on Raspberry Pi
RaspbianからArch Linux Armに載せ替えてみた。
GUIなどはインストールしなかった分、起動は早かった……ような気がする。
以下に手順を残しておく。
ガイドに従ってインストール
サイトの指示に従ってインストールする。
ガイドは作業PCがLinux前提で書いてあるけど、
Windowsだったらどうするんだろうなぁ。
Raspberry Pi | Arch Linux ARM
環境設定
以下はArch Linuxをインストールした時と同じ手順で行えた。
初期起動時点でsshdは起動しているのでリモートで作業できる。
nagamitsu1976.hatenadiary.jp
GW-900Dのドライバ導入
うちのRaspberry Piは初期型なのでWifiはドングルを使っている。
このドングルはドライバが用意されていないので、
ソースからビルドする必要があるのはRaspbianと変わらない。
ビルド環境の準備
ビルド環境とgitをインストール
$ pacman -S base-devel $ pacman -S linux-raspberrypi-headers $ pacman -S git
RTL8812au ドライバの作成&インストール
$ cd [適当なworking directory] $ git clone https://github.com/gnab/rtl8812au.git $ cd rtl8812au $ nano Makefile # ターゲットCPUをi386からarmに変更 $ make $ cp 8812au.ko /lib/modules/extramodules--raspberrypi/kernel/drivers/net/wireless/ $ depmod $ reboot
再起動したらlsmodとdmesgでドライバがロードされているか確認。*2
ip linkでネットワークインターフェイス名を確認し、wifiのI/Fが確認できればOK。
Pacmanフックの追加
カーネルが更新されるとwifiドライバもビルドし直しとなる。
手動ビルドも面倒なので、Pacmanフックを使って自動化してみる。
Pacmanフックを設定するには/etc/pacman.d/hooks配下にhookファイルを配置する。
Arch Linuxのwiki Pacmanフックの項を参考に作ってみたhookファイルはこんな感じ。
/etc/pacman.d/hooks/rtl8812au.hook …… [Trigger] Operation = Upgrade Type = Package Target = linux-raspberrypi Target = linux-raspberrypi-headers [Action] Depends = linux-raspberrypi-headers Depends = make Depends = gcc When = PostTransaction Exec = /usr/local/src/rtl8812au/8812au_make.sh ……
カーネルとカーネルヘッダの更新をトリガーとして、
それらが更新された後にExecで指定したmake用のシェルを実行する、
といった感じ。ドライバのビルドにはカーネルヘッダが必要なので
依存条件にカーネルヘッダが入れてある。*3
wpa_supplicantの設定
接続情報の設定
wpa_passphreseでssidのパスワードを自動生成しておく。
/etc/wpa_supplicant/wpa_supplicant-wlan0.confを新規作成し、以下の内容を記述する。
ctrl_interface=/run/wpa_supplicant update_config=1 network={ ssid="XXXXXXXXXXX" proto=RSN key_mgmt=WPA-PSK pairwise=CCMP group=CCMP #psk="xxxxxxxxxxxxx" psk=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345678901 scan_ssid=1 }
wpa_supplicant起動パラメータの編集
このまま起動するとこんな感じで、ドライバー未サポートのエラーが出る。
Successfully initialized wpa_supplicant nl80211: Driver does not support authentication/association or connect commands wlan0: Failed to initialize driver interface
Arch Linuxのwikiにあるwpa_supplicantの項に対処方法が書いてあるので、
wikiに従って対処する。
WPA supplicant - ArchWiki
$ nano /usr/lib/systemd/system/wpa_supplicant@.service …… # ExecStartの行の最後に「-Dnl80211,wext」を追加する。 ExecStart=/usr/bin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -i%I -Dnl80211,wext ……
wpa suppliantサービスの有効化
wpa suppliantサービスの有効化を行う。
$ systemctl start wpa_supplicant@wlan0 $ systemctl status wpa_supplicant@wlan0 # ステータス確認で問題なければenableする。 $ systemctl enable wpa_supplicant@wlan0
IPアドレスの割り当て
IPアドレスはsystemd-networkdが管理しているようなので*4、以下を編集する。
ファイルの書き方はここを参照。*5
Ethernetポートの場合
/etc/systemd/network/eth0.networkを編集
[Match] Name=eth0 #[Network] #DHCP=yes [Address] Address=192.168.10.32/24 [Route] Gateway=192.168.10.1
Wifiの場合
/etc/systemd/network/wlan0.networkを編集。
ファイルがなければ/etc/systemd/network/eth0.networkをコピーしてリネームしてから編集する。
[Match] Name=wlan0 #[Network] #DHCP=yes [Address] Address=192.168.10.33/24 [Route] Gateway=192.168.10.1
systemd-networkdのリロード
systemd-networkdをリロードして、
ip aでIPアドレスが設定通りか確認する。
$ systemctl restart systemd-networkd
再起動
再起動して、ネットワークが自動起動すればOK。
Congraturations!
初期設定はこんな感じでおしまい。
Arch Linuxのインストール手順のこと その4
How to use AUR
Ubuntuで言うPPAみたいなもの。
AURのリポジトリにはソースが置いてあるので、
ダウンロードしてきて、ビルド、インストールすると認識すればいい。
手でやるのは面倒だと思うけど、そこはそれ、
パッケージ名を指定するだけで導入できるツールがある。
Yaourtの導入
ヨーグルトと読むらしい。
これを導入すれば、AURも簡単に導入できる。
package-queryのインストール
yaourtで必要なpackage-queryをインストールする。
適当なディレクトリを作ってそこにcloneして、手順に従ってビルドする。
$ mkdir ~/.local/share/aur $ cd aur $ git clone https://aur.archlinux.org/package-query.git $ cd package-query $ makepkg -si $ cd ..
yaourtのインストール
続いて、yaourtをcloneして、ビルドする。
ビルドが終われば導入完了。
$ git clone https://aur.archlinux.org/yaourt.git $ cd yaourt $ makepkg -si $ cd ..
実験: Mate Tweakのインストール
AURパッケージ導入の実験として、Mate Tweakをインストールしてみる。
Ubutu MateにあったMate TweakはArch LinuxではAURに分類されているので、
まずは、Arch LinuxのAURのページへ行き、Mate Tweakのパッケージ名を調べる。
いくつかあるが4つのうち3つは開発版だたりgtk2版だったりして違うようなので、
最上位にある「mate-tweak」をインストールしてみる。
$ yaourt -S mate-weak
手順としては上のコマンドを実行するだけ。
これで、ソースのダウンロードからビルド、インストールまで一括で行える。
コマンド実行中にビルドファイルの編集、ビルドされたパッケージの内容確認を聞かれるが
これは特にしなくても大抵は問題ない。
出来あったパッケージをインストールすれば、
コントロールセンターにMate Tweakが追加される。
Arch Linuxのインストール手順のこと その3
Customize Mate Desktop Environment
とりあえず、デスクトップが表示されたけれど、
まだ、機能が足りない。
というわけで、環境構築の続き。
GUIのフォントが文字化けしている場合なんかは、
外観の設定で好きなフォントを設定しておいてください。
IMEの設定
キーボードレイアウトの設定。
キーボードレイアウトが初期ではUSになっているので、
コントロールセンターからキーボード設定を呼び出して、
レイアウトの設定を行う。
日本語レイアウトを追加してUSレイアウトを削除する。
合わせてキーボードの型式も設定する。
インプットメソッドフレームワークのインストール
Ubuntu Mate 16.04でも採用されていたfcitx-mozcをインストールする。
$ sudo pacman -S fcitx-im fcitx-mozc fcitx-configtool
ホームディレクトリに.xprofileを作成し、下記を追加する。
$ nano ~/.xprolie …… export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx
一旦、ログオフし再ログインすると、fcitxが立ち上がる。
(通知スペースにキーボードのアイコンが出る)
fcitxの設定パネルからアドオンタブを開いて、advancedチェックをON。
Fcitx XIM Frontendを選択して、ダイアログのチェックボックスをONにする。
fcitxを再起動。
XDGユーザディレクトリの作成
XDGユーザディレクトリというのは、ユーザのホームディレクトリ配下にある
「デスクトップ」とか「ダウンロード」などのディレクトリのこと。
初期のMateではパッケージがインストールされていないので作られていない。
手順は以下の通り。
xdg-user-dirsパッケージのインストール
$ sudo packman -S xdg-user-dirs
xdg-user-dirs-updateの実行
デフォルトで良ければ、xdg-user-dirs-updateを実行する。
英語が良ければ、LC_ALL=C xdg-user-dirs-updateを実行する。
$ xdg-user-dirs-update or $ LC_ALL=C xdg-user-dirs-update
デフォルト以外のパスを使いたければ~/.config/user-dirs.dirsを作成し、
中身を記載してから、xdg-user-dirs-updateを実行する。
$ nano ~/.config/user-dirs.dirs …… XDG_DESKTOP_DIR="$HOME/Desktop" XDG_DOCUMENTS_DIR="$HOME/Documents" XDG_DOWNLOAD_DIR="$HOME/Downloads" XDG_MUSIC_DIR="$HOME/Music" XDG_PICTURES_DIR="$HOME/Pictures" XDG_PUBLICSHARE_DIR="$HOME/Public" XDG_TEMPLATES_DIR="$HOME/.Templates" XDG_VIDEOS_DIR="$HOME/Videos"
gvfsマウントルールの追加
ファイルマネージャでディスクをマウントする際、認証を求められることがある。
それを回避するために以下の設定を行う。
storageグループにユーザを追加
$ usermod -aG storage [user-name]
10-enable-mount.rulesの作成
/etc/polkit-1/rules.d/10-enable-mount.rules
$ nano /etc/polkit-1/rules.d/10-enable-mount.rules # 下記を追加 polkit.addRule(function(action, subject) { if (action.id == "org.freedesktop.udisks2.filesystem-mount-system" && subject.isInGroup("storage")) { return polkit.Result.YES; } });
Congraturations!
日本語が入力できるようになれば、おめっとさん。
あとは自由にカスタマイズできるでしょう。
……って、ここで終わられても、まだAURを使ってない。
というわけで、その4へ続く。
Arch Linuxのインストール手順のこと その2
Install Mate Desktop on Arch Linux
その1の続き。
私はヘタレLinuxユーザーなのでGUIが無いと何もできません。
というわけで、GUI導入までの手順を残す。
LinuxデスクトップではダントツのMate推しなので、
Mate Desktopの導入となります。
CUI環境の整備
コンソールの文字化け対策
前回のインストール時にロケールをja_JP.UTF-8としたので、
今のコンソールではメッセージが化けまくっている。
そこで、tty環境(alt+ctrl+F1〜F6)ではLANG=Cとなるように、Bashの定義を追加する。
追加後、再度ログインすれば、メッセージは英語で表示される。
$ nano /etc/bash.bashrc …… #下記内容を末端に追加 # tty force LANG=C (tty|fgrep -q 'tty') && export LANG="C" ……
ちなみに、コンソールに日本語を表示する方法として、
fbtermとかKMSCONとかを導入するって方法があったけど、
どっちも試した結果、どちらもしっくり来なかった。
解像度とか、描画の美麗さ、反応速度とか色々。
で、結局、文字化けしなければ英語で十分、という判断になった。
タブ補完の強化
$ pacman -S bash-completion
multilibリポジトリの有効化
64bitOSなので32bitのライブラリは不要だけれど、
wineを使いたいので32bitライブラリもインストールできるように
multilibリポジトリを有効化しておく。
/etc/pacman.confの[multilib]の項目とパスを有効化
$ nano /etc/pacman.conf $ pacman -Syu
ユーザ追加
$ useradd -m -G wheel -s /bin/bash [username] $ passwd [username]
sudo設定の追加
sudoで権限委譲できるuserを追加する。
$ visudo …… # User privillege specificationの項に下記を追加((グループ全体を適用する方法もある。)) [username] ALL=(ALL) ALL ……
日本語フォントのインストール
これはお好みで。
$ pacman -S noto-fonts noto-fonts-cjk
GUI環境の構築
X Window Systemのインストール
$ pacman -S xorg-server xorg-apps xorg-server-xephyr
グラフィックドライバのインストール
$ lspci | grep -e VGA -e 3D
確認できたグラフィクカード(or チップ)に合わせてドライバをインストールする。
wikiのXorgの項目にインストールべきドライバについて記載がある。*1
うちのPCはnVidia GeForce GTS 250なのでnvidiaのレガシードライバをインストールした。
$ pacman -S nvidia-340xx nvidia-340xx-utils lib32-nvidia-340xx-utils
nvidia-settingsというツールでグラッフィクボードの状態を見たり、Xorgの設定が行えるのだが、
GUI表示させた場合、下記のパッケージが無いとエラーがでるので、
気になる場合はインストールしておく。
$ pacman -S gtk2 gtk-engines
nvidiaドライバが更新された時、initramfsのアップデートが必要となる。
ドライバ更新時のinitramfsの再作成を自動化するため、
/etc/pacman.d/hooks/nvidia.hookファイルを作成しておく。
$ nano /etc/pacman.d/hooks/nvidia-340xx.hook [Trigger] Operation=Install Operation=Upgrade Operation=Remove Type=Package Target=nvidia-340xx [Action] Depends=mkinitcpio When=PostTransaction Exec=/usr/bin/mkinitcpio -p linux
ディスプレイマネージャのインストール
ディスプレイマネージャにも色々あり、何を選ぶかは自由となっているが、
Ubuntu Mate 16.04で採用されていたLightDMを選んだ。
$ pacman -S lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings
あとで気づいたことだけど、Mate導入後にjournalログを見たらこんなエラーが出てた。
6月 20 11:04:19 catharina lightdm[479]: Error getting user list from org.freedesktop.Accounts: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Accounts was not provided by any .service files
ここに少しやり取りがあり、accountsserviceパッケージが無いと発生するらしいが、
動作には問題が無い模様。*2
でも、気になるのでインストールをしておく。
$ pacman -S accountsservice
MATEデスクトップのインストール
$ pacman -S mate mate-extra
ディスプレイマネージャの自動起動On
$ systemctl enable lightdm
コンポジットマネージャのインストール
ウィンドウ装飾のことらしいんだけど、
Mateで採用されているウィンドウマネージャのMarcoには、
ソフトウェアコンポジットの機能があるので、なにもしなくてもウィンドウの装飾は行われる。
とはいえ、これはLinux。
実はこの装飾を行うプログラムであるコンポジットマネージャも好きに選べる。
ということで、comptonというコンポジットマネージャも入れてみた。
$ packman -S compton
起動するには自動起動するアプリケーションに下記のように追加するだけ。
ただし、起動する際はMarcoのコンポジット機能をOFFにしておく必要がある。
$ compton -b
起動時NumLock On
ディスプレイマネージャ起動時にNumLockをOnにする方法。
デフォルトOffでも構わないのだけれど、
NumLockがOnのままログオフするとNumLockのランプがついているけれど、
内部ではNumLockがOFFという奇妙な状態になるので、
デフォルトOnとなるようにしておいた。
当然、ディスプレイマネージャによってやり方は異なる。
LightDMの場合は、numlockxパッケージをインストール後、
/etc/lightdm/lightdm.confを編集する。
$ pacman -S numlockx $ nano /etc/lightdm/lightdm.conf …… # greeter-setup-scriptの行を有効にしてnumlockxのコマンドを記述する [Seat:*] greeter-setup-script=/usr/bin/numlockx on ……
ネットワークマネージャのインストール
dhcpcdが動いているので今のままGUIを起動してもネットワークには繫がる。
ただ、Mateの通知パネルに通知が上がってこないのでわかりにくい。
そこで、ネットワーク設定をNetworkManagerにやらせることにする。
インストール
$ pacman -S networkmanager network-manager-applet gnome-keyring
NetworkManagerの自動起動On
$ systemctl enable NetworkManager
dhcpcdの自動起動Off
# systemctl disable dhcpcd
Windows Network 共有
ファイルマネージャ(caja)で共有サーバを覗くだけなら
gvfs-smbパッケージをインストールするだけでOK。
だめだったらsamba smbclient cifs-utilパッケージもインストールする。
$ pacman -S gvfs-smb # だめだったら後からこれもインストール。 $ pacman -S samba smbclient cifs-util
再起動
$ reboot
Congraturations!
再起動後、ログイン画面が出たらおめっとさん。
新しく作ったユーザでログインできたらおつかれさん。
……って、ここで投げ出されても、まだツラい。
というわけで、その3へ続く。