先日、ジャンクで良いディスプレイが手に入ったので長年使っていた Princeton PTFBHF-19W をメインPCから取り外した。デスクトップをメインに使っていた頃にデュアルディスプレイ環境用として2台同時購入して、ノートPCに切り替えてから1台余っていたが、これで2台とも余ってしまうことになった。
手放すのもなんとなくもったいないので Raspberry Pi 1 Model B+ を使って X Window System 用のワイヤレスディスプレイとして使うことにした。
環境
| HW | OS | Interface | |
|---|---|---|---|
| メイン | 汎用機 | Kubuntu | Wired (1000Mbps) |
| AP | Raspberry Pi 2 Model B+ | Arch Linux ARM | Wireless Logitec LAN-WH300NU2 (RTL8192CU / 300Mbps) |
| X Window Server | Raspberry Pi 1 Model B | Arch Linux ARM | Wireless Planex GW-USNANO2A (RTL8188CUS / 150Mbps) |
その前に、以前設定した hostapd の導入手順が若干間違っていたのでやり直した。
802.11b/g/n 系の無線LANアダプタで使われている Realtek RTL8192CU は純正の hostapd に対応していない。Realtek が Linux 用ドライバのソースを公開しているので自前でコンパイルすればいいのだが、手を抜いてバイナリだけ拾ってきてしまった。そのため、純正の hostapd.conf の設定が RTL8192CU に適した状態になっていなかった。
Raspberry Pi 2 Model B 上で RTL8192CU 用のドライバをコンパイルする。ドライバは Realtek のページからダウンロードしてくる。
ダウンロードしたファイルを解凍する。ZIP なのが解せない。
unzip 0001-RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip
なんか色々入っているが、とりあえず関連するのはこのあたりか。
RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911
└── wpa_supplicant_hostapd
├── rtl_hostapd_2G.conf
├── wpa_supplicant_hostapd-0.8_rtw_r7475.20130812
│ └── hostapd
│ ├── Android.mk
│ ├── bsd_hostapd.conf
│ ├── ChangeLog
│ ├── config_file.c
│ ├── config_file.h
│ ├── ctrl_iface.c
│ ├── ctrl_iface.h
│ ├── defconfig
│ ├── dump_state.c
│ ├── dump_state.h
│ ├── eap_register.c
│ ├── eap_register.h
│ ├── eap_testing.txt
│ ├── hlr_auc_gw.c
│ ├── hlr_auc_gw.milenage_db
│ ├── hostapd.8
│ ├── hostapd.accept
│ ├── hostapd_cli.1
│ ├── hostapd_cli.c
│ ├── hostapd.conf
│ ├── hostapd.deny
│ ├── hostapd.eap_user
│ ├── hostapd.radius_clients
│ ├── hostapd.sim_db
│ ├── hostapd.vlan
│ ├── hostapd.wpa_psk
│ ├── logwatch
│ ├── main.c
│ ├── Makefile
│ ├── nt_password_hash.c
│ ├── README
│ ├── README-WPS
│ ├── src -> ../src
│ └── wired.conf
└── wpa_supplicant_hostapd-0.8_rtw_r7475.20130812.tar.gz
階層を降りていく途中で RTL8192CU 用の hostapd.conf を拾う。もともとある hostapd.conf はバックアップ。パスがかなり長くなるので PS1 にフルパスを表示するようにしている場合は変更しておいた方が楽かもしれない。
mv /etc/hostapd/hostapd.conf{,.orig} cd RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd cp rtl_hostapd_2G.conf /etc/hostapd/hostapd.conf
デフォルトだと設定は以下のようになっているので使う環境に合わせて変更しておく。
- SSID: rtwap
- channel: 6
- wpa_passphrase 87654321
さらに同じ階層にある TAR を解凍し、hostapd/ まで降りて make。Raspberry Pi 2 Model B でだいたい30秒くらい。
tar xf wpa_supplicant_hostapd-0.8_rtw_r7475.20130812.tar.gz cd wpa_supplicant_hostapd-0.8_rtw_r7475.20130812 cd hostapd make
もともとあったものをバックアップして出来上がったバイナリをインストールする。
mv /usr/bin/hostapd{,.orig} mv /usr/bin/hostapd_cli{,.orig} cp hostapd hostapd_cli /usr/bin
これで hostapd は最適な状態(?)になった。
wpa_supplicant は純正のバイナリで使用することができるが、そのままのドライバでは動作しないため /usr/lib/systemd/system/wpa_supplicant@.service の ExecStart 行に -Dwext を追加する。
[Unit]
Description=WPA supplicant daemon (interface-specific version)
Requires=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device
Before=network.target
Wants=network.target
# NetworkManager users will probably want the dbus version instead.
[Service]
Type=simple
ExecStart=/usr/bin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -i%I -Dwext
[Install]
Alias=multi-user.target.wants/wpa_supplicant@%i.service
あとは /etc/wpa_supplicant/wpa_supplicant-wlan0.conf を作成しておいて systemctl enable wpa_supplicant@wlan0 としておく。
network={
ssid="rtwap"
psk=87654321
}
んで、ようやく X Window Server の設定。
autologin にしておこうかなぁと思ったけど、X はとりあえず手動で立ち上げることにした。
普通に xinit としてしまうと /etc/X11/xinit/xserverrc によって -nolisten tcp になってしまう。
#!/bin/sh exec /usr/bin/X -nolisten tcp "$@"
なので ~/.xserverrc としてコピーして TCP のリスニングを有効にしておく。
cp /etc/X11/xinit/xserverrc ~/.xserverrc
#!/bin/sh exec /usr/bin/X -listen tcp "$@"
これで xinit とすれば6000番が開いた状態になる(netstat コマンドで確認する場合、--numeric-ports オプションがない場合は :x11 表記になるので grep 6000 とかやっても出てこない)。
$ netstat -t4 --listen --numeric-ports Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:x11 *:* LISTEN
~/.xinitrc は最小限に DPMS の無効化と dwm のみ。ワイヤレスモニター的な感じで使う予定なので電源は手動で切るほうが都合がいい。
xset -dpms xset s off exec /usr/bin/dwm
ぼちぼち出来上がったので無線強度の確認。ディスプレイと Raspberry Pi 1 Model B を持って玄関へ。PC用の3ピンケーブル(?)って根本の部分から電源分岐とか出来たりしないですかねぇ。そうなると Raspberry Pi の電源確保が非常に楽なのだけど。使い道がなかったタッチパッド付きワイヤレスキーボードの使い道が出来たのはよかったかも。
Raspberry Pi 1 Model B 用の Google Chrome / Chromium は提供されていない(わけではない)けど、メインマシンから呼び出しているので YouTube なんかも見れる。ただ、Google Chrome / Chromium は母艦で起動していると多重起動しないようになっているのでダミーのプロファイルディレクトリを --user-data-dir=/path/to/dir で適当に作成してあげる必要がある。
なんとなくキッチンのラックに置いてみた。艦これも Raspberry Pi では少々厳しいけど X86 マシンで実行しているので普通にプレイできる(快適に、とは言えないが)。
何かの監視用モニターとして使いたいのだけど作業机が狭いのでいまのところはキッチンに…。IKEA で天板買ってこよーっと。