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では裏で上手いことやってくれていたのでしょう.

この記事が気に入ったらサポートをしてみませんか?