1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Lubuntuで自動的にWi-Fiに再接続するPythonプログラム

Posted at

祖母の家にLubuntuのPCを置いておいて,自動応答機能をつけたSkypeでいつでも通話できるようにしようとしていました.祖母はPCを全く触れないので,管理は全て私がやる必要がありますし,全く触れずともPCが動き続けるようにしなければなりません.

しかし,LubuntuにはWi-Fiが一度切れると自動的に再接続しないという問題があります.従って,一度Wi-Fiが切れてしまうと,手動操作しない限りWi-Fiに再接続されません.そして,祖母の家では何故かよくWi-Fiが切れるので,全然Skypeできませーん😫😫😫

このような事情から,Wi-Fiが切れたら,自動的に再接続するプログラムが必要となりました.ここではそのPythonコードをメモしておきます.

以下のコードのうち,CHECKER_URLSSIDは定数です.それぞれ,インターネットに繋がっているかを確認する用の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では裏で上手いことやってくれていたのでしょう.

元記事(私のNoteです)
https://note.com/omiyayimo/n/n95e0307fe849

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?