Mencoba memahami metode koneksi ulang otomatis WIFI

9

Saya menemukan metode menghubungkan kembali dongle WIFI dari posting ini . Tapi, saya ingin menjadi jelas tentang cara kerjanya, sebelum saya mencoba dan mengimplementasikannya.

  1. Pergi ke /etc/ifplugd/action.d/dan ganti nama ifupdownfile menjadi ifupdown.original.
  2. Kemudian lakukan: cp /etc/wpa_supplicant/ifupdown.sh ./ifupdown.
  3. Akhirnya: sudo reboot
  1. Kapan /etc/ifplugd/action.d/ifupdowndipanggil?
  2. Apa yang skrip /etc/wpa_supplicant/ifupdown.shlakukan pada dasarnya dalam istilah awam, kelihatannya cukup rumit bagi saya; dan kapan itu disebut juga.
  3. Bisakah melakukan langkah 1 hingga 3 menyebabkan masalah lain yang tidak terduga yang akan mencegah WIFI saya bekerja? Saya mencoba menerapkan ini pada Raspberry PI, melalui SSH, tanpa keyboard dan monitor di lokasi yang sulit dijangkau.

Saya mencoba Google berbagai bit, tetapi hilang sedikit!

reggie
sumber

Jawaban:

0

ifplugd dimaksudkan untuk mendeteksi penghapusan atau penyambungan kembali konektor ethernet. Direktori terkait /etc/ifplugd/action.d/ host skrip yang dipanggil ketika, misalnya, konektor dicolokkan (atau dihapus).

Langkah 2 dalam proses Anda akan menyebabkan koneksi wpa menjadi (kembali) dinegosiasikan ketika konektor dimasukkan (atau dihapus), dan itu mengasumsikan koneksi WPA. Proses rename / copy yang Anda gambarkan akan menonaktifkan pemrosesan yang sudah ada sebelumnya yang dilakukan dalam skrip ifupdown yang sudah ada sebelumnya, yang mungkin dapat diabaikan atau tidak. Anda dapat mempertimbangkan untuk memanggil /etc/wpa_supplicant/ifupdown.sh dengan menambahkannya ke skrip ifupdown yang ada (pada akhirnya, misalnya), tetapi tergantung pada memahami apa yang sudah ada dalam skrip yang ada (yang seringkali sederhana).

Jika Anda hanya ingin menegosiasikan ulang koneksi wifi jika atau ketika jatuh, alih-alih menangani pemutusan konektor secara fisik, Anda dapat mempertimbangkan untuk menggunakan ini:

https://raw.githubusercontent.com/dweeber/WiFi_Check/master/WiFi_Check

Skrip itu kuat, sebagian besar tidak berbahaya, dan harus melakukan trik dengan kuat.

GregD
sumber
0

Versi pendek

  1. Dijawab oleh dudek; direktori itu digunakan untuk skrip yang memberi tahu sistem Anda cara menangani hal-hal yang dicolokkan atau dicabut dari situ.

  2. Lihat "Versi panjang" untuk upaya menjelaskan bagaimana saya memahami skrip yang dimaksud. Pada dasarnya setelah menjalankan beberapa pemeriksaan dan memuat beberapa fungsi eksternal memeriksa apakah itu harus menjalankan starturutan perintah, atau stop, atau kesalahan keluar dan keluar.

  3. Oh ya, itu sangat baik bisa mengunci Anda dari akses jarak jauh jika Anda menyentuh konfigurasi jaringan dengan cara yang tidak disukai oleh RPi. Saya telah menyentuh konfigurasi jaringan saya secara kasar di masa lalu pada RPi saya sehingga lebih mudah untuk memulai dari instalasi baru. Menjadi cairful dan pertimbangkan untuk memindahkan RPi temperaroly ke lokasi yang mudah untuk login ke lokal.

Versi panjang

Melihat melalui file ini pada RPi saya, sepertinya dikomentari dengan baik dan tidak digunakan untuk banyak panggilan fungsi eksternal. Tapi Anda sudah meminta persyaratan awam jadi saya akan melakukan yang terbaik untuk menjelaskan bagaimana saya bisa memahami skrip semacam ini, meskipun, sepertinya Anda adalah pengguna RPi seperti saya (pengaturan server jarak jauh tanpa kepala) ya mungkin akan memeriksa apa yang telah saya tulis pada RPi StackExchange untuk auto -ectionection ke jaringan WiFi tersembunyi karena mungkin ada trik lain yang berguna untuk kebutuhan server Anda.

Untuk membantu membantu menjawab pertanyaan Anda, berikut ini sedikit perluasan sintaksis skrip shell;

Dalam ~.shskrip shell , adalah umum untuk menemukan fungsi yang didefinisikan seperti itu;

function_name () {
    echo "doing stuff for function_name"
}

dan kemudian dipanggil function_nameterakhir dalam skrip, terkadang dalam fungsi lain. Fungsi, file skrip dan jika statments hanyalah daftar perintah yang harus dijalankan. Dalam hal fungsi hal-hal antara {dan }dijalankan dan dalam kasus ifstatments hal-hal antara thendan fidijalankan dan dalam kasus di mana elseatau elifdigunakan dalam ifstatments bersyarat.

Untuk file yang kita potong ada beberapa fungsi bernama do_start, do_stopdan beberapa fungsi didefinisikan dalam file lain ... "File apa yang fungsi-fungsi lain ini tolak?" atau "Bagaimana saya menemukan jika skrip a memuat fungsi dari file b?" dua pertanyaan yang harus kami jawab terlebih dahulu.

Sekitar garis 48di /etc/wpa_supplicant/ifdown.shada garis berkomentar (yaitu jalur beguining dengan #simble; ini diabaikan oleh skrip intrupriter ... kebanyakan) dengan source functionscoventently labbling beberapa baris berikutnya dimaksudkan perpos ~

# source functions
if [ -f /etc/wpa_supplicant/functions.sh ]; then
    . /etc/wpa_supplicant/functions.sh
else
    exit
fi

Perhatikan ini adalah contoh yang baik dari perilaku scripting; memeriksa apakah ada file di sana sebelum berasumsi itu ada.

Bit pertama if [ -fmemeriksa file di bawah jalur file yang ditentukan. Dan jika ada thenmemuat isi file melalui source(tangan pendek sourceperintah .tapi saya menghindari menggunakannya dalam skrip saya karena dapat diintegrasikan oleh cpdan dengan perintah lain tetapi ngelantur saya miliki) file yang didefinisikan oleh path. Selanjutnya adalah elsepengecekan bahwa jika file itu tidak ditemukan exit 0keluar dengan status 0skrip. Kemudian ifstetment berakhir dengan fiuntuk menutup tindakan yang harus diambil jika statment pertama tidak lulus. Atau dengan kata lain jika /etc/wpa_supplicant/functions.sh tidakada kemudian keluar, jika tidak memuat fungsi-fungsi tersebut dan melanjutkan pemrosesan. Pemeriksaan jenis ini jika ada nilai atau file yang akan Anda lihat berulang di seluruh skrip yang dipertanyakan serta skrip lainnya, -fpemeriksaan untuk file, -nmemeriksa panjang string, -xmemeriksa tidak hanya jika ada file di sana tetapi juga jika pengguna yang menjalankan skrip memiliki izin yang dapat dieksekusi untuk file yang ditentukan, -s memeriksa apakah file kosong, -nmemeriksa apakah string tidak kosong atau nullbernilai, dan =membandingkan string (atau nilai) dalam ifstatments. Sesuatu yang lain akan Anda lihat di skrip shell dan bash di Linux dengan ifstatments eliftapi itu untuk hari lain. Di dalam skrip ini ada trik lain yang digunakan selainifstatments seperti ||"atau", &&"dan", dan !"tidak" operator, seperti on line 55~

# quit if executables are not installed
if [ ! -x "$WPA_SUP_BIN" ] || [ ! -x "$WPA_CLI_BIN" ]; then
    exit 0
fi

~ Yang hanya menempatkan negara, jika file didefinisikan oleh $WPA_SUP_BINadalah tidak dieksekusi atau file didefinisikan oleh $WPA_CLI_BINadalah tidak dieksekusi keluar maka status 0tanpa pengolahan lebih lanjut. Ini mungkin terlihat rumit pada awalnya tetapi membacanya dengan keras dalam sintaksis yang lebih manusiawi dapat membantu ketika pertama kali belajar, untuk yang sederhana, dan menambahkan komentar #untuk yang kompleks sangat membantu ketika belajar atau kembali ke topik yang terakhir.

File yang bersumber secara internal juga harus diperiksa jika tidak yakin apa sesuatu yang disebut dalam ifupdown.shfile. Saya akan menyarankan nano /etc/wpa_supplicant/functions.shdan kemudian menggunakan ^watau Ctrl+wuntuk mencari-cari nama fungsi yang ingin Anda ketahui lebih lanjut. Karena antara apa pun tugas yang menyebut skrip ini dan kontensi dari functions.shsebagian besar berkas puzzel akan ditemukan.

Sekarang hal-hal menjadi agak berbeda di sekitar garis bulat di 135mana casestatment dimulai, statments semacam ini memiliki struktur tertentu yang dapat kita gunakan untuk membantu memecahkan kode operasi.

case $some_variable in
    start)
         echo "The word [start] was detected in \$some_variable"
    ;;
    stop)
         echo "The word [stop] was detected in \$some_variable"
    ;;
    *)
         echo "The word [$some_variable] was detected in \$some_variable but not understood"
    ;;
esac

Dalam contoh di atas seperti pada casestatments lain, kita pada dasarnya mencari konten $some_variableuntuk kata-kata kunci yang didefinisikan, yaitu startatau stopjika kata kunci ditemukan maka jalankan perintah yang ditemukan antara trailling )dan preseading ;;yang bertindak untuk memisahkan tindakan yang berbeda untuk mengambil berbagai kunci kata-kata ditemukan. Catatan dalam beberapa skrip Anda mungkin menemukan casestatments ini dalam forloop tetapi itu juga untuk hari lain.

Dalam kasus casepernyataan dalam ifupdown.shskrip, pertama-tama kita mencocokkan status startatau stopdalam $MODEvariabel dan menggunakan $PHASEnilai untuk mencocokkan jika pre-upatau post-upurutan perintah harus dipanggil atau jika pre-downatau post-downurutan perintah yang harus dipanggil. Jika niether startatau stoptempat terdeteksi maka kesalahan dicatat, dicetak dan skrip keluar dengan status 1kesalahan.

S0AndS0
sumber