先日、ジャンクで良いディスプレイが手に入ったので長年使っていた 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
hostapd を使用した簡単な方法で WiFi に強力な暗号化を実装するによれば、平文パスワードは計算負荷が高くなるため wpa_passphrase
で暗号化鍵を生成し、そちらを使う方がよいそうだ。hostapd.conf
の wpa_passphrase
行をコメントアウトして wpa_psk
行を追加する。(以下は例)
$ wpa_passphrase rtwap 87654321 | printf 'wpa_%s\n' `grep '[^#]psk'` wpa_psk=65a918de53333a864d822976d8664f6661985c1cac62e1db628ea445233c5c73
さらに同じ階層にある 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" psk=65a918de53333a864d822976d8664f6661985c1cac62e1db628ea445233c5c73 }
んで、ようやく X Window Server の設定。
autologin にしておこうかなぁと思ったけど、X はとりあえず手動で立ち上げることにした。
普通に xinit
としてしまうと /etc/X11/xinit/xserverrc
によって -nolisten tcp
になってしまう。
#!/bin/shexec /usr/bin/X -nolisten tcp "$@"
なので ~/.xserverrc
としてコピーして TCPのリスニングを有効にしておく。
cp /etc/X11/xinit/xserverrc ~/.xserverrc
#!/bin/shexec /usr/bin/X -listen tcp "$@"
これで xinit
とすれば6000番が開いた状態になる(netstat
コマンドで確認する場合、--numeric-ports
オプションがない場合は :x11
表記になるので grep 6000
とかやっても出てこない)。
$ netstat -t4 --listen 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マシンで実行しているので普通にプレイできる(快適に、とは言えないが)。
あとは VirtualBoxとかも引っ張ってくれば Raspberry Pi で Windows XPやら Windows 7を動かしたりも出来たり…(何でもアリやないか)。
何かの監視用モニターとして使いたいのだけど作業机が狭いのでいまのところはキッチンに…。壁掛けにしたいなぁ。