Làm thế nào để duy trì kết nối wifi sau khi ngắt kết nối?


9

Tôi đã có một máy Ubuntu chạy một phần mềm yêu cầu internet. Tuy nhiên, đôi khi wifi bị lỗi (ví dụ khởi động lại bộ định tuyến) và không tìm thấy lại mạng, cho đến khi tôi tự phục vụ khởi động lại trình quản lý mạng hoặc tôi tắt và bật wifi để tìm nó.

Có cách nào khả thi để chạy một công việc định kỳ hoặc công việc giám sát để giám sát kết nối và nếu mạng không thể được tìm thấy để khởi động lại dịch vụ quản lý mạng và kết nối với SSID cụ thể đó?


Tôi nghĩ rằng điều này có thể là do lỗi trình quản lý mạng mới, vì tôi cũng mới bắt đầu gặp sự cố này chỉ gần đây, tôi nghĩ sau khi nâng cấp lên Ubuntu 15.04.
Sadi

1
Có một số báo cáo lỗi cho thấy có thể có một vấn đề. Bạn có thể đăng chi tiết về phiên bản trình quản lý mạng kernel (uname -a) của bạn không, và cả thông tin chi tiết về thẻ WiFi của bạn.
DaveM

Câu trả lời:


7

Tôi nghĩ rằng điều này có thể là do lỗi trình quản lý mạng mới, vì tôi cũng mới bắt đầu gặp sự cố này chỉ gần đây - tôi nghĩ sau khi nâng cấp lên Ubuntu 15.04.

Có vẻ như tôi đã cố gắng giải quyết vấn đề này tạm thời như một cách giải quyết với hai tệp này:

  1. Tôi có tệp tập lệnh để xem kết nối WiFi và tắt và bật WiFi khi bị ngắt kết nối, ví dụ: ~/.bin/WiFi-Keep-Connectedvới nội dung này:


#!/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. Tôi cũng có tệp .desktop để giữ tập lệnh này chạy mỗi khi tôi đăng nhập, ví dụ: ~/.config/autostart/KeepWifiConnected.desktopvới nội dung này:


[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

Lưu ý: Bạn sẽ cần nhập tên người dùng của mình vào đường dẫn được cung cấp Exec=ở trên.

Lưu ý: Đôi khi khởi động lại Wi-Fi theo cách này là không đủ, trong trường hợp đó tôi phải khởi động lại Trình quản lý mạng bằng cách nhập lệnh này một hoặc thậm chí hai lần từ thiết bị đầu cuối:sudo service network-manager restart

Do đó, có thể là một ý tưởng tốt hơn để sửa đổi tập lệnh ở trên (chỉ trong trường hợp) như thế này:


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

Tôi không biết tại sao, nhưng như bạn đã đề cập, đôi khi khi wifi bị lỗi, người quản lý mạng không tìm thấy mạng nữa.

Tôi nghĩ rằng vấn đề là trình quản lý mạng, sau khi bị lỗi kết nối wifi, không làm mới danh sách wifi (và có vẻ như trình quản lý mạng đã che giấu mạng có vấn đề). Trình quản lý mạng không có tùy chọn menu quét lại và việc tắt và bật hộp kiểm không dây trên menu trình quản lý mạng sẽ không bắt buộc quét wifi mới (như khởi động lại dịch vụ).

Khi người quản lý mạng mất kết nối wirele của tôi và nó không tìm thấy wifi của tôi nữa (và tôi biết rằng wifi đang hoạt động), tôi thực hiện lệnh:

sudo iwlist wlan0 scan

Nó thực hiện quét wifi trên giao diện wlan0 (wlan0 là tên của giao diện không dây trong máy tính xách tay của tôi) và nó hiển thị cho bạn các mạng không dây có sẵn, nhưng như một trình quản lý mạng hiệu ứng phụ sẽ tự động làm mới danh sách của nó và tìm thấy mạng bị mất.

Tôi thích thực hiện lệnh thủ công khi sự cố này xảy ra (kết nối lại mạng không đảm bảo khôi phục lại kết nối và một số chương trình sẽ cần phải được khởi động lại).

Nhưng, như bạn đã đề cập, bạn có thể ghi lại nó và bạn có thể làm điều đó mà không cần kiểm tra kết nối (quá trình quét cập nhật danh sách wifi của bạn nhưng nó không đóng kết nối không dây hiện tại của bạn, nếu bạn được kết nối).

Nếu bạn thích, bạn có thể kiểm tra khả năng kết hợp bằng ping hoặc iwconfig và nếu bạn không được kết nối thì khởi chạy quét.

Cái gì đó như:

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

Nhưng hãy nhớ rằng tập lệnh này phải được sudo hoặc thực thi với quyền root. Nó chỉ gửi 1 ping với thời gian chờ 1 giây.


Giải pháp trên là ổn nhưng làm thế nào để bắt được thông báo từ người quản lý mạng (nm) rằng kết nối bị ngắt. Điều này nên có thể từ bên trong chính nó, một cái nhìn nhanh qua nguồn dường như đề xuất chức năng là có. Thông báo được lấy từ dbus và cập nhật biểu tượng nm, vì vậy có thể đây là một lỗi hoặc có thể một phần khác của hệ thống bị mất kết nối và đã được sửa đổi và thông báo không còn thông qua để cố gắng kết nối lại?
DaveM

0

Những gì tôi nghĩ rằng vấn đề giống như kết nối bị mất vì các vấn đề kết nối của bộ định tuyến. Khởi động lại trình quản lý mạng không thể giúp đỡ khi bộ định tuyến gặp sự cố. Thay vào đó, bạn có thể tạo một tập lệnh để đưa quy trình chạy phần mềm tạm dừng sử dụng SIGSTOP khi kết nối bị mất và một lần nữa kích hoạt để xử lý để tiếp tục sử dụng SIGCONT khi mạng khả dụng. Và thêm tập lệnh vào công việc định kỳ của bạn, lên lịch để chạy mỗi phút.

Để bạn tham khảo: http://hints.macworld.com/article.php?story=20030915193440334

Hi vọng điêu nay co ich.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.