Як автоматично підключити Wi-Fi?


74

Я використовую pi для моніторингу лічильників електроенергії. Дані передаються на ПК через WiFi-з'єднання за допомогою USB-адаптера Edimax EW-7811UN. Коли з’єднання Wi-Fi припиняється (вимкнено протягом ночі або хитке з'єднання), USB-адаптер залишається відключеним.

Чи є спосіб перезапустити підключення WiFi автоматично, не повторно підключаючи адаптер WiFi?

Відповіді:


31

Я вважаю за краще вимкнути більшу частину демональної конфігурації мережі та керування з’єднаннями і вирішувати її самостійно. Ось (bash) скрипт, який підтримуватиме зв’язок до тих пір, поки мережа є, і у вас не буде проблем з драйвером Wi-Fi або проблемами з живленням; ідея полягає в тому, щоб пінг-маршрутизатор кожні N секунд, і якщо це не вдалося, знову підключіть:

#!/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

Це все передбачає відкриту незашифровану мережу (якщо інше, вам доведеться додати відповідні команди). Я використовував цей підхід на різних машинах Linux, включаючи pi, і він працює бездоганно; вона буде тримати систему в Інтернеті нескінченно, навіть якщо вона періодично переходить у сплячий режим (що пі все одно не може).

Пристойний інтервал перевірки - 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 dongle буде підключений до pi, модуль 8192cu буде завантажений ядром в цей момент, тому Wi-Fi повинен запуститися. Якщо ні, то передбачається, що Ethernet підключений до мережі та його слід використовувати (якщо його немає, dhclient просто вийде з ладу і немає доступу до мережі).

Для цього вам, мабуть, доведеться працювати

Таким чином, це отримує безголовий пі в мережу під час завантаження і зберігає його там. Якщо ви хочете, щоб під час запуску без входу в систему, як перейти на eth, ви можете зробити щось із правилами udev для витягування ключа wifi.


Звучить варто тестування. Якщо я не є Linux-програмою - як би я встановив сценарій для запуску, поставлений у cron? Чи можна було б / потрібно також додати обертання журналу?
andig

1
@andig: Я додав кілька абзаців про стартап через rc.local. Обертання журналу WRT - це окреме питання, яке стосується файлів журналу взагалі (але див. man logrotate). Зараз цей скрипт перекриє (замінить) будь-який попередній журнал, якщо він існує з тим самим шляхом, а не додасть. Для налагодження я іноді використовував wifi.$$.logу файлі wifi.conf, так що останній журнал (навряд чи) стає клоброваним, і я можу порівнювати один сеанс з іншим після того, як я щось переробив. $$є прикметою процесу "wifi".
золотинки

Я хвилююся, що іноді сценарії оболонки можуть бути крихкими і не вдається розібратися, коли є оновлення або встановлено інше мережеве програмне забезпечення. Лише нота обережності щодо такого підходу.
єремія

3
@jeremiah: Це гарний страх. Я написав сценарій, переробив його протягом багатьох років, і відчуваю, що розумію загальний контекст, в якому він працює, і тому те, на що мені потрібно стежити. Однак, мабуть, важче передати розуміння, ніж фрагменти коду. Для мене це просто альтернативний підхід до спроби працювати з NetworkManager, зменшуючи ситуацію до деяких дуже основних елементів. Це є що запропонувати людям з такою ж перспективою, як "це те, що працює для мене" в усьому спектрі дистрибуції linux за обставин простої автономної системи.
goldilocks

Отже: Мені відомо про цю посаду і я маю намір постійно її оновлювати, якщо один із основних потоків дистрибуції (debia і fedora та похідні) введе щось із цим. Я також додам деякі акценти на пункти про те, що потрібно відключити та як.
goldilocks

68

Що ж, є дуже просте рішення:

  1. Перейдіть до /etc/ifplugd/action.d/і перейменуйте ifupdownфайл уifupdown.original
  2. Потім зробіть: cp /etc/wpa_supplicant/ifupdown.sh ./ifupdown
  3. Нарешті: sudo reboot

Це все. Перевірте це, вимкнувши / увімкніть AP; ви повинні бачити, що ваш Raspberry Pi належним чином під’єднується.


2
Це найпростіша та найефективніша відповідь. Тестується на 2 Rpi, і це працює. Знайдено це посилання з: raspberrypi.org/phpBB3 / ...
Mauvis Ледфорд

12
Вибачте за спрощене запитання - чому це працює?
Jeff Meatball Ян Ян

@JeffMeatballYang, почніть нову тему для свого питання.
AndaluZ

6
Для мене там не було жодного файлу ifupdown, а лише посилання action_wpa -> ../../wpa_supplicant/action_wpa.sh, тож, можливо, це зараз за замовчуванням?
Zitrax

2
Так, як кажуть інші: це не працює на dhcpcdбазі дистрибутивів, для того, щоб запустити цей RPI3, вам потрібно apt-get install rcconfперейти dhcpcdдоnetworking
test30

21

Нещодавно я наткнувся на консольний додаток, який розбирає всю бездротову конфігурацію. Ви також можете використовувати цей інструмент для налаштування інтерфейсу LAN.

sudo apt-get install wicd-curses

Він встановить досить багато інших пакетів і запустить свій власний демон у фоновому режимі, але це впевнено полегшує налаштування всього. Запустіть його

sudo wicd-curses

введіть тут опис зображення

Якщо ви отримаєте повідомлення про те, що не виявлено мереж, натисніть кнопку P(має бути велика літера, тому використовуйте [SHIFT] p) і введіть wlan0 у полі бездротового інтерфейсу та натисніть F10, щоб зберегти.

  1. R щоб оновити список.
  2. Використовуйте курсори на клавіатурі для навігації по списку вгору та вниз
  3. Натисніть праворуч, щоб налаштувати бездротове з'єднання
  4. Натисніть кілька разів і поставте прапорець "Автоматично підключитися до цієї мережі"
  5. Знову натисніть кілька разів і введіть свій пароль у ключовому полі
  6. Натисніть F10, щоб зберегти

введіть тут опис зображення

Можливо, вам доведеться натиснути, Cщоб підключитися до точки доступу. Якщо ви були провідними, це, швидше за все, знищить інтерфейс локальної мережі та забезпечить бездротовий зв'язок.

Він також управляє з’єднанням, тому він підключиться до будь-яких налаштованих бездротових точок доступу, якщо він випаде з будь-якої причини.

Я перевірив підключення Wi-Fi адаптера і підключення його назад. Це займає близько 60 ~ 90 секунд, але він підключиться назад до WiFi (я думаю, що LAN повинна бути відключена)

Сподіваюся, це допомагає!


1
Не впевнений, як це піклується про повторне підключення - початкове підключення тут не було питання!
andig

Я оновив відповідь, оскільки є крок, коли потрібно перевірити підключення автоматично. Також у налаштуваннях слід прокручувати всю дорогу вниз. Останній варіант вимкнено на екрані. Він також говорить про автоматичне спробу підключитися до мереж для Wi-Fi (він за замовчуванням увімкнено). Я навіть можу вийняти штепсельну вилку адаптера WiFi, і вона знову підключиться протягом 2 хвилин (я це зробив без підключення до локальної мережі) Це дійсно найкращий спосіб, який я знайшов для налаштування та керування бездротовим зв’язком. Ви також отримуєте щойно названу версію GUIwicd
Piotr Kula

є друкарська помилка в команді "sudo wicd-cruses" "u" та "r" обмінюються
Gawcio

Після установки wicd-cursesмій RPi 3 почав мерзнути безладно. Ніколи раніше не замерзав і заморожування зникало відразу, як тільки я його видалив. Остерігайся!
ахмед

1
Після встановлення wicd-прокльонів, мій RPi 3 з управлінням Jessie Lite не застиг і не залишається на зв’язку. Але сьогодні я спробував підключитися до одного через порт Ethernet, і виявив, що інтерфейс буде втрачено через кілька секунд після завантаження. Мені вдалося добре підключитися перед налаштуванням wicd-curses для підключення до wifi.
Кріс Дженкс

14

Це можна вирішити без зайвих сценаріїв.

В / etc / network / interfaces:

allow-hotplug wlan0 iface wlan0 inet manual wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf iface default inet dhcp

Роумінг дозволяє інтерфейсу самолікуватися.


Останній рядок, схоже, додає другу IP-адресу до інтерфейсу wlan0; це навмисно?
fche

Я закінчую лише одну призначену DHCP адресу. Мене це не здивувало б, якби сценарії завантаження змінили поведінку, хоча цей конфігураційний файл є непотрібним таємничим ...
David Sainty

2
У моєму вікні raspbian pi2, якщо wlan опуститься досить довго протягом трьох циклів спроб аутентифікації не вдалося, навіть при "wpa-roam" він не намагатиметься знову.
fche

Це єдина відповідь, яка працювала на мене на RPi 3. Дякую!
ахмед

1

netcfg

Спробуйте netcfg. Без додаткових подробиць про те, який дистрибутив ви використовуєте, я не можу надати ще багато деталей, але він повинен робити все, що ви хочете.


4
Я використовую поточний дистрибутив raspbian: pi @ raspberrypi ~ $ man netcfg Немає вручну запису для netcfg pi @ raspberrypi ~ $ netcfg -bash: netcfg: команда не знайдена pi @ raspberrypi ~ $ apt-кеш пошуку netcfg pi @ raspberrypi ~ $
andig

0

Ще одне рішення, як витягнуте з цього .
Спочатку налаштуйте налаштування Wi-Fi: 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і відредагуйте crontab кореня за допомогою crontab -e.
В кінці цього файлу додайте цей рядок:

10 * * * * /home/pi/reconnect.sh

Це означає: "виконувати цей скрипт кожні 10 хвилин (як root)"

Тепер, якщо у вас є з'єднання, сценарій завершиться, і нічого не відбудеться. Якщо ви не можете пінг-маршрутизатора, сценарій спробує знову підключитися до нього за допомогою wpa_supplicant.

Зауважте, що все, що відлучиться від сценарію cron (у цьому випадку лише при відключенні), буде відправлене електронною поштою. Отже, якщо ви налаштували псевдоніми пошти та постскрипт, то ви будете отримувати електронне повідомлення щоразу, коли підключення Wi-Fi до вашого пізнього каналу перерветься, а потім успішно повернеться знову завдяки сценарію.


0

Це працювало для мене, використовуючи Raspian Jessie 30.March.2017:

http://alexba.in/blog/2015/01/14/automatically-reconnecting-wifi-on-a-raspberrypi/


1
Будь ласка, узагальнюйте рішення у своєму дописі, якщо посилання перерветься
tlhIngan

CMB, ласкаво просимо в куточок StackExchange з ароматом RPi. Політика веб-сайту відбиває посилання лише на відповіді, оскільки вони підлягають гниттю посилання. Вам не потрібно дублювати вміст посилання, але хороша відповідь повинна принаймні розширюватися на основні моменти, що містяться в посиланні.
Jacobm001

На додаток до коментаря Jacobm001, наведеного вище, відповідно до нашої політики щодо безвідповідальних відповідей лише на посилання, якщо ця публікація не буде відредагована, щоб містити інформацію, яка може відповідати, хоча й мінімально, через 48 годин вона буде перетворена на Wiki Wiki для спрощення роботи це виправлено громадою.
goobering
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.