回答:
私は、ネットワークの自動構成と接続管理デーモンの大部分を無効にして、自分で対処することを好みます。以下は、ネットワークが存在し、wifiドライバーの不具合や電源の問題がない限り、接続を維持する(bash)スクリプトです。考えは、ルーターをN秒ごとにpingし、それが失敗した場合、再接続することです。
#!/bin/bash
# make sure we aren't running already
what=`basename $0`
for p in `ps h -o pid -C $what`; do
if [ $p != $$ ]; then
exit 0
fi
done
# source configuration
. /etc/wifi.conf
exec 1> /dev/null
exec 2>> $log
echo $(date) > $log
# without check_interval set, we risk a 0 sleep = busy loop
if [ ! "$check_interval" ]; then
echo "No check interval set!" >> $log
exit 1
fi
startWifi () {
dhclient -v -r
# make really sure
killall dhclient
iwconfig $wlan essid $essid
dhclient -v $wlan
}
ifconfig $eth down
ifconfig $wlan up
startWifi
while [ 1 ]; do
ping -c 1 $router_ip & wait $!
if [ $? != 0 ]; then
echo $(date)" attempting restart..." >> $log
startWifi
sleep 1
else sleep $check_interval
fi
done
したがって、/etc/wifi.conf
この場合には次のものが含まれます。
router_ip=192.168.0.1
log=/var/log/wifi.log
wlan=wlan0
eth=eth0
essid=someNetwork
check_interval=5
これはすべて、オープンな暗号化されていないネットワークを前提としています(そうでない場合は、適切なコマンドを追加する必要があります)。piを含むさまざまなLinuxマシンでこのアプローチを使用しましたが、問題なく動作します。定期的にスリープ状態になったとしても、システムを無期限にオンラインに保ちます(パイはとにかくできません)。
適切なチェック間隔は3〜5秒です。このアクティビティは、システムリソースに大きな影響を与えることはありません。
最初にネットワークの自動構成を無効にする必要があります。ifplugd
その他のネットワークデーモンを含めるか、これが作業の妨げになります。
Raspbianで自動構成されたネットワークを無効にするにはどうすればよいですか?
私は実際に使用しましたapt-get remove ifplugd
。
起動時にネットワークを開始するには(私はpiヘッドレスを使用しているため)、これをraspbianで実行するように設定します/etc/rc.local
:
wifi_mod=`lsmod | grep 8192cu`
if [ "$wifi_mod" ]; then
echo "Starting wifi..."
/usr/bin/nice -n -10 /usr/local/bin/wifi &
else
echo "Starting ethernet..."
/sbin/ifconfig eth0 up
/sbin/dhclient eth0
fi
/usr/local/bin/wifi
スクリプトです。nice
目的がわからない場合は、をお読みくださいman nice
。
そのポイントは、if
wifiドングルをpiに接続すると、この時点で8192cuモジュールがカーネルによってロードされるため、wifiが起動するはずです。そうでない場合は、イーサネットが接続されており、使用する必要があると想定されます(使用されていない場合、dhclientはただクラッカーを使用し、ネットワークアクセスはありません)。
これが機能するには、おそらくする必要があります
そのため、これは起動時にヘッドレスpiをネットワークに取得し、そこに保持します。ログインせずに実行中にethに切り替える方法が必要な場合は、wifiドングルを引き出すためのudevルールで何かを行うことができます。
rc.local
。WRTログローテーション。これは、一般的なログファイルに関連する別の質問です(ただし、をご覧くださいman logrotate
)。今そのスクリプトがします壊し、それは同じパスに存在する場合、以前のログを(上書き)、追加しません。デバッグのためwifi.$$.log
に、wifi.confファイルで時々使用しました。そのため、最後のログが(おそらく)破壊され、何かを微調整した後、あるセッションを別のセッションと比較できます。$$
「wifi」プロセスのpidです。
さて、非常に簡単な解決策があります。
/etc/ifplugd/action.d/
て名前を変更しifupdown
ますifupdown.original
cp /etc/wpa_supplicant/ifupdown.sh ./ifupdown
sudo reboot
それで全部です。これをテストするには、APのオン/オフを切り替えます。Raspberry Piが正しく再接続されていることがわかります。
action_wpa -> ../../wpa_supplicant/action_wpa.sh
ので、これが今のデフォルトでしょうか?
dhcpcd
、ベースのディストリビューションを、これはあなたがする必要がRPI3上で実行されている得るためにapt-get install rcconf
から切り替えるdhcpcd
にnetworking
私は最近、すべてのワイヤレス設定を完全に整理するコンソールアプリケーションに出会いました。このツールを使用して、LANインターフェイスを構成することもできます。
sudo apt-get install wicd-curses
他のかなりの数のパッケージをインストールし、バックグラウンドで独自のデーモンを実行しますが、すべての設定が非常に簡単になります。で実行する
sudo wicd-curses
ネットワークが検出されないというメッセージが表示されたらP
(大文字である必要があるため、[SHIFT] pを使用)、ワイヤレスインターフェースフィールドにwlan0と入力し、F10を押して保存します。
R
リストを更新します。C
アクセスポイントに接続するために押す必要がある場合があります。有線接続されている場合、LANインターフェイスが強制終了され、ワイヤレスが起動します。
また、接続を管理するため、何らかの理由でドロップアウトした場合、設定済みのワイヤレスアクセスポイントに再接続します。
WiFiアダプターのプラグを抜き差ししてテストしました。約60〜90秒かかりますが、WiFiに接続し直します(ただし、LANのプラグを抜く必要があると思います)
それが役に立てば幸い!
wicd
wicd-curses
、RPi 3がランダムにフリーズし始めました。以前は決して凍結せず、アンインストールするとすぐに凍結が消えました。気をつけて!
これは、余分なスクリプトなしで解決できます。
/ etc / network / interfacesに以下を配置します。
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
ローミングにより、インターフェイスは自己修復できます。
試してくださいnetcfg
。使用しているディストリビューションに関する詳細がなければ、これ以上詳細を提供することはできませんが、必要なことを行う必要があります。
別の解決策、から抽出されたとして、この1。
まず、wifi設定を構成します。次のsudo vi /etc/wpa_supplicant/wpa_supplicant.conf
ようなセクションを追加します 。
network={
ssid="MyNetworkName"
psk="MyPaz0rdz"
key_mgmt=WPA-PSK
}
次に、ネットワーク設定sudo vi /etc/dhcpcd.conf
:
interface wlan0
inform 192.168.1.200 # the static ip for the wifi card
static routers=192.168.1.254 # your router's ip
static domain_name_servers=192.168.1.254 # your dns, usually=your router
次に、このスクリプトファイルをどこかに、たとえばに作成し、実行可能に/home/pi/reconnect.sh
する+x
許可を与えます。
#!/bin/bash
router=`ip route | awk '/default/ {print $3}'`
/bin/ping -q -c1 $router > /dev/null
if [ $? -eq 0 ]
then
true
# echo "Network OK"
else
echo "Network down, fixing..."
# ifdown --force wlan0
# sleep 5
/bin/kill -9 `pidof wpa_supplicant`
/sbin/ifup --force wlan0
/sbin/ip route add default via $router dev wlan0
/bin/mount -a
echo "wlan0 reconnected at `date`"
fi
次に、でrootとしてログインしsudo su
、でrootのcrontabを編集しcrontab -e
ます。
このファイルの最後に次の行を追加します。
10 * * * * /home/pi/reconnect.sh
つまり、「そのスクリプトを(ルートとして)10分ごとに実行する」という意味です。
接続があれば、スクリプトは終了し、何も起こりません。ルーターにpingできない場合、スクリプトはwpa_supplicantを使用してルーターに再接続しようとします。
cronスクリプトからエコーされるすべてのもの(この場合は切断されている場合のみ)がルートに電子メールで送信されることに注意してください。そのため、メールエイリアスとポストスクリプトを設定している場合、piのwifi接続がダウンしたときに電子メールを受信し、スクリプトのおかげで再び正常に戻ります。
これは、2017年3月30日にRaspian Jessieを使用して機能しました。
http://alexba.in/blog/2015/01/14/automatically-reconnecting-wifi-on-a-raspberrypi/