Bagaimana cara bertahan pada koneksi wifi setelah pemutusan?

9

Saya memiliki mesin Ubuntu yang menjalankan perangkat lunak yang membutuhkan internet. Namun, kadang-kadang wifi gagal (router reboot misalnya) dan tidak menemukan jaringan lagi, sampai saya secara manual service-manager jaringan restart atau saya matikan dan pada wifi untuk menemukannya.

Apakah ada cara yang mungkin untuk menjalankan pekerjaan cron atau pekerjaan pengawasan untuk memantau konektivitas dan jika jaringan tidak dapat ditemukan untuk memulai kembali layanan manajer jaringan dan terhubung ke SSID spesifik itu?

Blue Genie
sumber
Saya pikir ini mungkin disebabkan oleh bug manajer jaringan baru, karena saya juga mulai mengalami masalah ini baru-baru ini, saya pikir setelah memutakhirkan ke Ubuntu 15.04.
Sadi
1
Ada sejumlah laporan bug yang menunjukkan mungkin ada masalah. Bisakah Anda memposting rincian kernel (tidak sama-a) dan versi manajer jaringan, dan juga rincian kartu WiFi Anda.
DaveM

Jawaban:

7

Saya pikir ini mungkin disebabkan oleh bug manajer jaringan baru, karena saya juga mulai mengalami masalah ini baru-baru ini - saya pikir setelah memutakhirkan ke Ubuntu 15.04.

Tampaknya saya berhasil menyelesaikan masalah ini untuk sementara sebagai solusi dengan dua file ini:

  1. Saya memiliki file skrip untuk menonton koneksi WiFi dan mengaktifkan dan menonaktifkan WiFi ketika terputus, misalnya ~/.bin/WiFi-Keep-Connected, dengan konten ini:


#!/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. Saya juga memiliki file .desktop untuk membuat skrip ini berjalan setiap kali saya masuk, misalnya ~/.config/autostart/KeepWifiConnected.desktop, dengan konten ini:


[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

Catatan: Anda harus memasukkan nama pengguna Anda di jalur yang diberikan untuk di Exec=atas.

NB: Kadang-kadang restart Wi-Fi dengan cara ini tidak cukup, dalam hal ini saya harus me - restart Network Manager dengan memasukkan perintah ini sekali atau bahkan dua kali dari terminal:sudo service network-manager restart

Oleh karena itu, mungkin ide yang lebih baik untuk memodifikasi skrip di atas (untuk berjaga-jaga) seperti ini:


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

Sadi
sumber
1

Saya tidak tahu mengapa, tetapi seperti yang Anda sebutkan, kadang-kadang ketika wifi gagal, manajer jaringan tidak menemukan jaringan lagi.

Saya pikir masalahnya adalah network-manager, setelah kegagalan koneksi wifi, tidak me-refresh daftar wifi (dan sepertinya network-manager menyembunyikan jaringan yang bermasalah). Network-manager tidak memiliki opsi menu pemindaian ulang, dan menonaktifkan dan mengaktifkan kotak centang nirkabel pada menu network-manager tidak memaksa pemindaian wifi baru (seperti me-restart layanan tidak).

Ketika network-manager kehilangan koneksi wireles saya dan tidak menemukan wifi saya lagi (dan saya tahu wifi itu berfungsi), saya menjalankan perintah:

sudo iwlist wlan0 scan

Ia melakukan pemindaian wifi pada antarmuka wlan0 (wlan0 adalah nama antarmuka nirkabel di laptop saya) dan ini menunjukkan kepada Anda jaringan nirkabel yang tersedia, tetapi sebagai efek samping, manajer jaringan secara otomatis memperbarui daftar dan menemukan jaringan yang hilang.

Saya lebih suka mengeksekusi perintah secara manual ketika masalah ini terjadi (koneksi ulang jaringan tidak memastikan komunikasi kembali, dan beberapa program perlu di-restart).

Tetapi, seperti yang Anda sebutkan, Anda dapat menyalinnya, dan Anda dapat melakukannya tanpa menguji konektivitas (proses pemindaian memperbarui daftar wifi Anda tetapi tidak menutup koneksi nirkabel Anda saat ini, jika Anda terhubung).

Jika Anda mau, Anda dapat menguji konektifitas menggunakan ping atau iwconfig dan jika Anda tidak terhubung maka luncurkan pemindaian.

Sesuatu seperti:

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

Tetapi ingat bahwa skrip ini harus sudoed atau dieksekusi dengan hak akses root. Ia hanya mengirim 1 ping dengan batas waktu 1 detik.

acesargl
sumber
Solusi di atas baik-baik saja tetapi bagaimana menangkap pemberitahuan dari manajer jaringan (nm) bahwa koneksi telah jatuh. Ini harus dimungkinkan dari dalam nm itu sendiri, pandangan cepat melalui sumber tampaknya akan mengusulkan fungsi yang ada. Pesan diambil dari dbus dan ikon nm diperbarui, jadi ada kemungkinan ini adalah bug, atau mungkin bagian lain dari sistem menangkap setetes koneksi dan telah dimodifikasi dan pemberitahuan tidak lagi melewati untuk mencoba menyambung kembali?
DaveM
0

Apa yang saya pikir masalahnya adalah koneksi hilang karena masalah konektivitas router. Restart manajer jaringan tidak bisa membantu ketika router itu sendiri mengalami masalah. Alih-alih, Anda dapat membuat skrip untuk menempatkan proses yang menjalankan perangkat lunak untuk menangguhkan menggunakan SIGSTOP ketika koneksi terputus , dan kembali memicu proses untuk melanjutkan menggunakan SIGCONT ketika jaringan menjadi tersedia. Dan tambahkan skrip ke pekerjaan cron Anda, jadwalkan untuk berjalan setiap menit.

Untuk referensi Anda: http://hints.macworld.com/article.php?story=20030915193440334

Semoga ini membantu.

Perjalanan Virtual
sumber