วิธีการคงอยู่ในการเชื่อมต่อ wifi หลังจากตัดการเชื่อมต่อ?


9

ฉันมีเครื่อง Ubuntu ที่ใช้งานซอฟต์แวร์ที่ต้องใช้อินเทอร์เน็ต อย่างไรก็ตามบางครั้ง wifi ก็ล้มเหลว (เช่นรีบูตเราเตอร์) และไม่พบเครือข่ายอีกต่อไปจนกว่าฉันจะรีสตาร์ทด้วยตัวเองผู้จัดการเครือข่ายหรือฉันปิดและเปิด wifi เพื่อค้นหา

มีวิธีที่เป็นไปได้ในการรันงาน cron หรืองาน supervisord เพื่อตรวจสอบการเชื่อมต่อและหากไม่พบเครือข่ายเพื่อเริ่มบริการผู้จัดการเครือข่ายและเชื่อมต่อกับ SSID เฉพาะนั้น


ฉันคิดว่าอาจเป็นเพราะข้อผิดพลาดของผู้จัดการเครือข่ายใหม่เนื่องจากฉันเพิ่งเริ่มประสบปัญหานี้เมื่อเร็ว ๆ นี้ฉันคิดว่าหลังจากอัปเกรดเป็น Ubuntu 15.04
Sadi

1
มีรายงานข้อผิดพลาดจำนวนมากที่แนะนำว่าอาจมีปัญหา คุณสามารถโพสต์รายละเอียดของเคอร์เนลของคุณ (-a uname) ND รุ่นผู้จัดการเครือข่ายและยังมีรายละเอียดของบัตรไร้สายของคุณ
DaveM

คำตอบ:


7

ฉันคิดว่าอาจเป็นเพราะข้อผิดพลาดของผู้จัดการเครือข่ายใหม่เนื่องจากฉันเพิ่งเริ่มประสบปัญหานี้เมื่อไม่นานมานี้ - ฉันคิดว่าหลังจากอัปเกรดเป็น Ubuntu 15.04

ดูเหมือนว่าฉันสามารถแก้ไขปัญหานี้เป็นการชั่วคราวเพื่อแก้ปัญหาด้วยไฟล์สองไฟล์นี้:

  1. ฉันมีไฟล์สคริปต์เพื่อดูการเชื่อมต่อ WiFi และสลับเปิดและปิด 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ด้วยวิธีนี้ไม่เพียงพอซึ่งในกรณีนี้ฉันต้องรีสตาร์ท Network Managerด้วยการป้อนคำสั่งนี้หนึ่งครั้งหรือสองครั้งจากเทอร์มินัล: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

ฉันไม่รู้ว่าทำไม แต่อย่างที่คุณพูดถึงบางครั้งเมื่อ wifi ล้มเหลวผู้จัดการเครือข่ายไม่พบเครือข่ายอีกครั้ง

ฉันคิดว่าปัญหาคือตัวจัดการเครือข่ายหลังจากการเชื่อมต่อ wifi ล้มเหลวไม่รีเฟรชรายการ wifi (และดูเหมือนว่าผู้จัดการเครือข่ายซ่อนเครือข่ายที่มีปัญหา) ผู้จัดการเครือข่ายไม่มีตัวเลือกเมนูสแกนซ้ำอีกครั้งและการปิดใช้งานและเปิดใช้งานช่องทำเครื่องหมายไร้สายในเมนูผู้จัดการเครือข่ายไม่ได้บังคับให้มีการสแกน wifi ใหม่ (เมื่อเริ่มบริการใหม่)

เมื่อผู้จัดการเครือข่ายสูญเสียการเชื่อมต่อไร้สายของฉันและไม่พบ wifi ของฉันอีกครั้ง (และฉันรู้ว่า WiFi ใช้งานได้) ฉันใช้คำสั่ง:

sudo iwlist wlan0 scan

มันทำการสแกน wifi บนอินเทอร์เฟซ wlan0 (wlan0 เป็นชื่อของอินเตอร์เฟซไร้สายในแล็ปท็อปของฉัน) และมันแสดงให้คุณเห็นเครือข่ายไร้สายที่มีอยู่ แต่ในฐานะที่เป็นผลข้างเคียง

ฉันต้องการรันคำสั่งด้วยตนเองเมื่อเกิดปัญหานี้ (การเชื่อมต่อเครือข่ายไม่แน่ใจว่าการกลับมาทำงานร่วมกันอีกครั้งและบางโปรแกรมจะต้องเริ่มต้นใหม่)

แต่อย่างที่คุณพูดถึงคุณสามารถ cron มันและคุณสามารถทำได้โดยไม่ต้องทดสอบการเชื่อมต่อ (กระบวนการสแกนอัปเดตรายการ wifi ของคุณ แต่จะไม่ปิดการเชื่อมต่อไร้สายปัจจุบันของคุณหากคุณเชื่อมต่อ)

หากคุณต้องการคุณสามารถทดสอบ conectivity โดยใช้ ping หรือ iwconfig และหากคุณไม่ได้เชื่อมต่อให้เปิดการสแกน

สิ่งที่ต้องการ:

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

แต่จำไว้ว่าสคริปต์นี้จะต้อง sudoed หรือดำเนินการด้วยสิทธิ์พิเศษของรูท มันส่งเพียง 1 ping กับ 1 วินาทีหมดเวลา


วิธีการแก้ปัญหาข้างต้นนั้นใช้ได้ แต่จะจับการแจ้งเตือนจากผู้จัดการเครือข่าย (นาโนเมตร) ว่าการเชื่อมต่อลดลง สิ่งนี้น่าจะเป็นไปได้จากภายในตัวเองนาโนเมตรการมองผ่านแหล่งที่มาอย่างรวดเร็วดูเหมือนจะเสนอให้มีความเป็นอยู่ที่ดี ข้อความถูกนำมาจากการอัพเดตไอคอน dbus และ nm ดังนั้นจึงเป็นไปได้ว่านี่เป็นข้อผิดพลาดหรืออาจเป็นส่วนหนึ่งของระบบที่ทำให้การเชื่อมต่อหล่นลงและได้รับการแก้ไขและการแจ้งเตือนไม่ผ่านการเชื่อมต่ออีกต่อไป
DaveM

0

สิ่งที่ฉันคิดว่าเป็นปัญหาเช่นการเชื่อมต่อขาดหายไปเนื่องจากปัญหาการเชื่อมต่อของเราเตอร์ การรีสตาร์ทตัวจัดการเครือข่ายไม่สามารถช่วยได้เมื่อเราเตอร์มีปัญหา แต่คุณสามารถสร้างสคริปต์เพื่อให้กระบวนการเรียกใช้ซอฟต์แวร์เพื่อระงับการใช้SIGSTOPเมื่อการเชื่อมต่อขาดหายและเรียกใช้กระบวนการอีกครั้งเพื่อดำเนินการต่อโดยใช้SIGCONTเมื่อเครือข่ายพร้อมใช้งาน และเพิ่มสคริปต์ลงในงาน cron ของคุณกำหนดเวลาให้ทำงานทุกนาที

สำหรับการอ้างอิงของคุณ: http://hints.macworld.com/article.php?story=20030915193440334

หวังว่านี่จะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.