Lubuntuで自動的にWi-Fiに再接続するPythonプログラムを作った
祖母の家にLubuntuのPCを置いておいて,自動応答機能をつけたSkypeでいつでも通話できるようにしようとしていました.祖母はPCを全く触れないので,管理は全て私がやる必要がありますし,全く触れずともPCが動き続けるようにしなければなりません.
しかし,LubuntuにはWi-Fiが一度切れると自動的に再接続しないという問題があります.従って,一度Wi-Fiが切れてしまうと,手動操作しない限りWi-Fiに再接続されません.そして,祖母の家では何故かよくWi-Fiが切れるので,全然Skypeできませーん😫😫😫
このような事情から,Wi-Fiが切れたら,自動的に再接続するプログラムが必要となりました.ここではそのPythonコードをメモしておきます.
以下のコードのうち,CHECKER_URLとSSIDは定数です.それぞれ,インターネットに繋がっているかを確認する用のWebページのURL,接続すべきWi-FiのSSIDを書いてください.
import urllib.request
import subprocess
import time
from datetime import datetime
from pathlib import Path
from click import echo, style
CHECKER_URL = ""
SSID = ""
def is_connected()->bool:
request = urllib.request.Request(CHECKER_URL)
try:
with urllib.request.urlopen(request) as response:
return response.code == 200
except:
return False
return False
def connect()->bool:
try:
subprocess.run(
("nmcli device wifi connect "+SSID).split(),
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
return True
except:
return False
return False
def get_datetime_string()->str:
return datetime.now().strftime("%Y.%m.%d %H.%M.%S")
root:Path = Path(__file__).parent
logfile_path = root/"WifiCheckerLog.txt"
def append_to_logfile(text:str)->bool:
try:
echo(style(text, fg="green"))
with open(str(logfile_path), "a") as logfile:
logfile.write("\n"+text)
except:
return False
append_to_logfile(get_datetime_string()+" connect start")
connect()
append_to_logfile(get_datetime_string()+" connect finished")
while True:
time.sleep(60.0)
if not is_connected():
append_to_logfile(
get_datetime_string()+" is_connected=False"
)
connect()
append_to_logfile(
get_datetime_string()+" connect finished"
)
1分に1回,インターネットに繋がっているかを確認します(is_connectedメソッド).もし繋がっていない場合,Wi-Fiが切れていると判断し,Wi-Fiへ接続するconnectメソッドを実行します.この際,時刻とともにそのログをテキストファイルへ出力します.
LinuxでWi-Fi接続するコマンド
特定のSSIDへWi-Fiへ接続するコマンドは以下の通りです.
nmcli device wifi connect SSID
nmcilというのは,ネットワーク関連の色々な設定を簡単にできるやつです.Lubuntuに限らず,様々なLinuxに備わっているようです.
運用結果
祖母のPCに同プログラムを実行し,5日間様子を見てみました.
すると,Skypeに繋がらなくなることがなくなりました.PCはずっとインターネットに繋がっているのです!!
祖母の家に行った時にPCに記録されたログを見てみました.ログは以下のようになっていました.何度もWi-Fiが切れて,その都度再接続している様子が分かります.また,Wi-Fiが特に頻繁に切れる時間帯がありました(この時に何が起きていたのかはよく分かりませんけど).
2024.01.23 18.02.27 connect start
2024.01.23 18.02.30 connect finished
2024.01.23 22.41.04 is_connected=False
2024.01.23 22.41.55 connect finished
2024.01.23 22.42.55 is_connected=False
2024.01.23 22.43.44 connect finished
2024.01.23 22.44.44 is_connected=False
2024.01.23 22.46.15 connect finished
2024.01.23 22.47.15 is_connected=False
2024.01.23 22.48.31 connect finished
2024.01.23 22.49.31 is_connected=False
2024.01.23 22.50.46 connect finished
2024.01.23 22.51.46 is_connected=False
2024.01.23 22.53.01 connect finished
2024.01.23 22.54.01 is_connected=False
2024.01.23 22.55.16 connect finished
2024.01.23 22.56.16 is_connected=False
2024.01.23 22.57.31 connect finished
2024.01.23 22.58.31 is_connected=False
2024.01.23 22.59.46 connect finished
2024.01.23 23.00.46 is_connected=False
2024.01.23 23.01.34 connect finished
2024.01.24 08.56.39 is_connected=False
2024.01.24 08.57.31 connect finished
2024.01.24 08.58.31 is_connected=False
2024.01.24 08.58.57 connect finished
2024.01.24 08.59.57 is_connected=False
2024.01.24 09.01.13 connect finished
2024.01.24 09.02.13 is_connected=False
2024.01.24 09.03.28 connect finished
2024.01.24 09.04.28 is_connected=False
2024.01.24 09.04.53 connect finished
2024.01.24 09.05.54 is_connected=False
2024.01.24 09.07.09 connect finished
2024.01.24 09.08.09 is_connected=False
2024.01.24 09.09.40 connect finished
2024.01.24 09.10.40 is_connected=False
2024.01.24 09.11.31 connect finished
2024.01.24 09.12.31 is_connected=False
2024.01.24 09.13.47 connect finished
2024.01.24 09.14.47 is_connected=False
2024.01.24 09.16.02 connect finished
2024.01.24 09.17.02 is_connected=False
2024.01.24 09.17.04 connect finished
2024.01.24 09.22.26 is_connected=False
2024.01.24 09.22.29 connect finished
2024.01.24 18.57.47 is_connected=False
2024.01.24 18.57.50 connect finished
2024.01.25 15.01.36 is_connected=False
2024.01.25 15.01.36 connect finished
2024.01.26 09.41.33 is_connected=False
2024.01.26 09.42.14 connect finished
2024.01.26 09.43.44 is_connected=False
2024.01.26 09.44.59 connect finished
2024.01.26 09.46.29 is_connected=False
2024.01.26 09.48.00 connect finished
2024.01.26 09.49.30 is_connected=False
2024.01.26 09.50.10 connect finished
2024.01.26 09.51.40 is_connected=False
2024.01.26 09.52.56 connect finished
2024.01.26 09.54.26 is_connected=False
2024.01.26 09.55.41 connect finished
2024.01.26 09.57.11 is_connected=False
2024.01.26 09.58.27 connect finished
2024.01.26 09.59.57 is_connected=False
2024.01.26 10.00.01 connect finished
おわりに
安定してSkypeできるようになってよかった!!これで祖母といつでもお話ができる.
そういえば,スマホやWindows,Mac等のPCでは,祖母の家でWi-Fiが切れて困ったことはありませんでした.このようなOSでは裏で上手いことやってくれていたのでしょう.