# 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/`内のファイルを両方変更してください**
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.