# hostapdとWifiClientの切り替え Hostapd起動中は別途USBのWifiアダプタなどを使用しない限りWifiクライアントとして利用できないため、それを簡単に切り替えれるように設定します。 `Hostapd`を利用するために設定したファイルのうち、以下のファイルを編集します。 - `/etc/dhcpcd.conf` - `/etc/sysctl.conf` - `/etc/network/interfaces` 今回はこれらのファイルに対し、AP化オン時オフ時それぞれのファイルを作成し、設定に対して上記のファイルを差し替えます。 なお、切り替え時は`~/.ap_mode`ファイルの中身が`1`ならAP化オン、`0`ならAP化オフにし、`sudo reboot`することで設定が反映されるようにします。 ### Hostapdオン時の設定ファイルの退避 新しく、`~/`以下に`.ap`ファイルを作成します。 ``` bash $ cd $ mkdir .ap/ ``` その後、`.ap/`ディレクトリに移動し、その中に`on_ap_configfiles/`, `on_wifi_configfiles/`を作成します ``` bash $ cd ~/.ap $ mkdir on_ap_configfiles/ $ mkdir on_wifi_configfiles/ ``` なお、`~/.ap/on_ap_configfiles/`内に **AP化オン時の設定ファイル**、`~/.ap/on_wifi_configfiles/`内に **AP化オフ時の設定ファイル**を保存します。 **Hostapdの設定を行ってあることが前提** で、次のコマンドを実行し、AP化オン時の設定ファイルをコピーします ``` bash $ cd ~/.ap/on_ap_configfiles/ $ cp /etc/network/interfaces ./ $ cp /etc/dhcpcd.conf ./ $ cp /etc/sysctl.conf ./ ``` - - - ### /etc/dhcpcd.conf ファイルの編集 以下のコマンドで、`dhcpcd.conf`ファイルを`~/.ap/on_wifi_configfiles/`にコピーします ``` bash $ cd ~/.ap/on_wifi_configfiles/ $ cp ../on_ap_configfiles/dhcpcd.conf ./ ``` このコピーしてきた(`~/.ap/on_ap_configfiles/`以下の)ファイルを編集します。 編集方法は簡単で、その他すべての設定ファイルについてもHostapd設定時に変更した点を戻せばいいだけです。 ファイルの末尾に記述した、 ``` ... interface wlan0 static ip_address=192.168.42.1/24 ``` 以上の記述を以下のようにコメントアウトします ``` ... #interface wlan0 #static ip_address=192.168.42.1/24 ``` - - - ### /etc/network/interfaces ファイルの編集 以下のコマンドで、`intefaces`ファイルを`~/.ap/on_wifi_configfiles/`にコピーします ``` bash $ cd ~/.ap/on_wifi_configfiles/ $ cp ../on_ap_configfiles/interfaces ./ ``` このコピーしてきた(`~/.ap/on_ap_configfiles/`以下の)ファイルを編集します。 ``` ... iface wlan0 inet manual # wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf ... ``` この記述を、 ``` ... iface wlan0 inet manual wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf ... ``` このように、`wpa_conf ...`という記述のある行のコメントアウトを外します - - - ### /etc/sysctl.conf ファイルの編集 以下のコマンドで、`sysctl.conf`ファイルを`~/.ap/on_wifi_configfiles/`にコピーします ``` bash $ cd ~/.ap/on_wifi_configfiles/ $ cp ../on_ap_configfiles/sysctl.conf ./ ``` このコピーしてきた(`~/.ap/on_ap_configfiles/`以下の)ファイルを編集します。 ``` ... net.ipv4.ip_forward=1 ... ``` この記述を、 ``` ... #net.ipv4.ip_forward=1 ... ``` コメントアウトします。 - - - ### 自動実行されるスクリプトファイルの作成 この設定を反映させるために、起動時に実行するスクリプトを書きます。 `~/.ap/`以下に`toggle_ap_wifi.sh`ファイルを作成し、ここに以下のスクリプトを記述します。 ``` bash #!/bin/bash flg=`cat /home/pi/.ap_mode` oldval=`sysctl net.ipv4.ip_forward | awk 'BEGIN{FS=" "}{print $3}'` if [ -e /home/pi/.ap_mode -a $flg = '1' ] ; then cp /home/pi/.ap/on_ap_configfiles/interfaces /etc/network/interfaces cp /home/pi/.ap/on_ap_configfiles/dhcpcd.conf /etc/dhcpcd.conf cp /home/pi/.ap/on_ap_configfiles/sysctl.conf /etc/sysctl.conf else cp /home/pi/.ap/on_wifi_configfiles/interfaces /etc/network/interfaces cp /home/pi/.ap/on_wifi_configfiles/dhcpcd.conf /etc/dhcpcd.conf cp /home/pi/.ap/on_wifi_configfiles/sysctl.conf /etc/sysctl.conf fi if [ $flg != $oldval ] ; then if [ $flg = '1' ] ; then systemctl enable hostapd systemctl enable isc-dhcp-server else systemctl disable hostapd systemctl disable isc-dhcp-server fi echo 1 reboot fi ``` - - - ### ここまでのディレクトリツリー ここまでのディレクトリツリーを確認します。 以下のようになっていなかったら、再度手順を見直してください ``` - ~/ - .ap_mode <- 設定用ファイル(中身は 1 or 0) - .ap/ - toggle_ap_wifi.sh <- 自動反映用のスクリプト - on_ap_configfiles/ - interfaces <- AP化オン時の設定のもの - sysctl.conf <- AP化オン時の設定のもの - dhcpcd.conf <- AP化オン時の設定のもの - on_wifi_configfiles/ - interfaces <- AP化オフ時の設定のもの - sysctl.conf <- AP化オフ時の設定のもの - dhcpcd.conf <- AP化オフ時の設定のもの ``` - - - ### 自動実行されるように設定 `/etc/rc.local`に以下の記述をします ``` bash ... ##### add this code bash /home/pi/.ap/toggle_ap_wifi.sh ##### exit 0 ``` **注意** : `exit 0`の直前に記述してください その後、実際に`~/.ap_mode`ファイルを作成し、 ``` 0 ``` ないしは ``` 1 ``` と記述して、`sudo reboot`し、動作が正しいことを確認してください - - - **注意** ) なお、この設定を施したあとに`/etc/network/interfaces`, `/etc/dhcpcd.conf`, `/etc/sysctl.conf`ファイルを変更する際は **`~/.ap/on_ap_configfiles/`,`~/.ap/on_wifi_configfiles/`内のファイルを両方変更してください**