Як зберегти з'єднання через wifi після відключення?


9

У мене є машина Ubuntu під управлінням програмного забезпечення, яке вимагає Інтернету. Однак іноді Wi-Fi виходить з ладу (наприклад, перезавантаження маршрутизатора) і знову не знаходить мережу, доки я вручну не перезавантажую мережевий менеджер або не вимикаю його та перейду на Wi-Fi.

Чи можливий спосіб запустити роботу cron або завдання нагляду для контролю за підключенням, і якщо в мережі не вдасться знайти перезапустити службу керування мережею та підключитися до конкретного SSID?


Я думаю, це може бути пов’язано з новою помилкою мережевого менеджера, оскільки я також почав відчувати цю проблему зовсім недавно, я думаю, після переходу на Ubuntu 15.04.
Саді

1
Існує ряд повідомлень про помилки, які дозволяють припустити, що може виникнути проблема. Чи можете ви опублікувати деталі вашої версії ядра (не-а) -й версії мережевого менеджера, а також деталі вашої WiFi-картки.
DaveM

Відповіді:


7

Я думаю, це може бути пов’язано з новою помилкою мережевого менеджера, оскільки я також почав відчувати цю проблему зовсім недавно - я думаю, що після оновлення до Ubuntu 15.04.

Здається, мені вдалося вирішити цю проблему тимчасово як вирішення цих двох файлів:

  1. У мене є файл сценарію, щоб спостерігати за підключенням Wi-Fi та вимикати та вмикати WiFi при відключенні, наприклад ~/.bin/WiFi-Keep-Connected, із цим вмістом:


#!/bin/bash
while true; do
    LC_ALL=C nmcli -t -f TYPE,STATE dev | grep "^wifi:disconnected$"
    if [ $? -eq 0 ]; then
        rfkill block wifi && rfkill unblock wifi
        sleep 10
    fi
    sleep 10
done

  1. У мене також є .desktop-файл, щоб підтримувати цей сценарій кожного разу під час входу, наприклад ~/.config/autostart/KeepWifiConnected.desktop, із цим вмістом:


[Desktop Entry]
Type=Application
Exec=/home/"username"/.bin/WiFi-Keep-Connected
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Keep WiFi Connected
Icon=networkmanager

Примітка. Вам потрібно буде ввести своє ім’я користувача у вказаному Exec=вище шляху .

Примітка: Іноді перезавантаження Wi-Fi таким способом недостатньо; в такому випадку мені доведеться перезапустити Менеджер мережі , ввівши цю команду один раз або навіть два рази з терміналу:sudo service network-manager restart

Тому може бути кращою ідеєю змінити вищезазначений сценарій (про всяк випадок) так:


#!/bin/bash
while true; do
    LC_ALL=C nmcli -t -f TYPE,STATE dev | grep "^wifi:disconnected$"
    if [ $? -eq 0 ]; then
        rfkill block wifi && rfkill unblock wifi
        sleep 10
    fi
    LC_ALL=C nmcli -t -f TYPE,STATE dev | grep "^wifi:disconnected$"
    if [ $? -eq 0 ]; then
        gksudo service network-manager restart
        sleep 10
    fi
    sleep 10
done


1

Я не знаю чому, але, як ви зазначаєте, іноді, коли Wi-Fi виходить з ладу, мережевий менеджер знову не знаходить мережу.

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

Коли менеджер мережі втрачає моє провідне з'єднання, і він знову не знаходить мій wifi (і я знав, що wifi працює), я виконую команду:

sudo iwlist wlan0 scan

Він виконує сканування Wi-Fi на інтерфейсі wlan0 (wlan0 - назва бездротового інтерфейсу на моєму ноутбуці), і він показує доступні бездротові мережі, але як побічний ефект мережевий менеджер автоматично оновлює його список і знаходить втрачену мережу.

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

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

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

Щось на зразок:

#!/bin/bash
if ! ping -c 1 -W 1 your_router_ip &> /dev/null
then
    iwlist wlan0 scan
fi

Але пам’ятайте, що цей сценарій повинен бути застосований або виконаний з привілеями root. Він надсилає лише 1 пінг з таймаутом 1 секунди.


Вищезгадане рішення чудово, але як зафіксувати сповіщення від менеджера мережі (нм) про те, що з'єднання впало. Це повинно бути можливим зсередини nm, швидкий огляд джерела, здається, може запропонувати функціональність. Повідомлення взято з dbus та оновлення піктограми nm, тож можливо це помилка, чи, можливо, інша частина системи перехоплює падіння з'єднання та була змінена, і повідомлення більше не проходить через спробу відновити з'єднання?
DaveM

0

Я думаю, що проблема полягає в тому, що з'єднання втрачається через проблеми з підключенням маршрутизатора. Перезапуск мережевого менеджера не міг допомогти, коли у самого маршрутизатора виникли проблеми. Швидше за все, ви можете створити сценарій, щоб змусити процес запуску програмного забезпечення призупиняти використання SIGSTOP, коли з'єднання втрачається, і знову запустити процес продовження використання SIGCONT, коли мережа стане доступною. І додайте скрипт до своїх завдань з cron, плануючи його запускати щохвилини.

Довідково: http://hints.macworld.com/article.php?story=20030915193440334

Сподіваюсь, це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.