Quantcast
Channel: mattintosh note
Viewing all articles
Browse latest Browse all 880

Raspberry Pi でワイヤレスディスプレイを作る

$
0
0

先日、ジャンクで良いディスプレイが手に入ったので長年使っていた Princeton PTFBHF-19W をメインPCから取り外した。デスクトップをメインに使っていた頃にデュアルディスプレイ環境用として2台同時購入して、ノートPCに切り替えてから1台余っていたが、これで2台とも余ってしまうことになった。

手放すのもなんとなくもったいないので Raspberry Pi 1 Model B+ を使って X Window System用のワイヤレスディスプレイとして使うことにした。

(「ワイヤレスディスプレイ」と言うかどうかは怪しい)

環境

HWOSInterface
メイン汎用機KubuntuWired (1000Mbps)
APRaspberry Pi 2 Model B+Arch Linux ARMWireless
Logitec LAN-WH300NU2 (RTL8192CU / 300Mbps)
X Window ServerRaspberry Pi 1 Model BArch Linux ARMWireless
Planex GW-USNANO2A (RTL8188CUS / 150Mbps)

その前に、以前設定した hostapd の導入手順が若干間違っていたのでやり直した。

802.11b/g/n 系の無線LANアダプタで使われている Realtek RTL8192CU は純正の hostapd に対応していない。RealtekLinux用ドライバのソースを公開しているので自前でコンパイルすればいいのだが、手を抜いてバイナリだけ拾ってきてしまった。そのため、純正の hostapd.conf の設定が RTL8192CU に適した状態になっていなかった。

Raspberry Pi 2 Model B 上で RTL8192CU 用のドライバをコンパイルする。ドライバは Realtekのページからダウンロードしてくる。

http://www.realtek.com.tw/downloads/downloadsView.aspx?Langid=4&PNid=48&PFid=48&Level=5&Conn=4&DownTypeID=3&GetDown=false&Downloads=true#2772

ダウンロードしたファイルを解凍する。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.confwpa_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@.serviceExecStart行に -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を動かしたりも出来たり…(何でもアリやないか)。

Windows XP on #RaspberryPi ssh -X example.local vboxmanage startvm WinXP ╭( ・ㅂ・)و ̑̑

Makoto Yoshidaさん(@mattintosh4)が投稿した写真 -


何かの監視用モニターとして使いたいのだけど作業机が狭いのでいまのところはキッチンに…。壁掛けにしたいなぁ。


Viewing all articles
Browse latest Browse all 880

Trending Articles