デフォルトで開くアプリケーションのリストにEmpathyを追加しました。開始時にMSNに自動接続するように設定されていますが、ラップトップにログインすると、wifi接続の準備が完了するまでに数秒かかります。ネットがアップする前に、Empathyはすでに起動していて、MSNにログインしようとして失敗しました。その後、接続できません。
これはEmpathyのバグのようですが、どうすれば修正できますか。それができない場合は、ネットワークが稼働するまで開始を遅らせるにはどうすればよいですか。
どうやらこれはEmpathyの既知のバグであるため、ネットワークが稼働しているかどうかを確認するスクリプトからEmpathyを起動することにしました( http://www.google.com に接続し、インターネットの真のハートビート:)ネットワークが機能していない場合、5秒間スリープし、30回試行するまで再試行します。
これはスクリプトです(waitfornet.pyという名前)
#!/usr/bin/python
from urllib2 import urlopen, URLError
from subprocess import Popen
from time import sleep
from sys import argv
MAX_TRIES = 30
DELAY = 5
if len (argv) < 2:
print ('Check for network connectivity and run a command once the net is up')
print ('Tries up to %d times waiting %d seconds between each try' % (MAX_TRIES, DELAY))
print ('\nUSAGE: python waitfornet.py <command to run>')
else:
while True:
MAX_TRIES -= 1
if MAX_TRIES < 0:
raise ValueError ('Reached the max iteration count and the net is still down')
try:
data = urlopen('http://www.google.com')
except URLError:
# if there's a problem connecting to google, that must mean
# that the net is still down, so sleep 5 seconds and try again
print ('Internet is down... retrying...')
sleep (DELAY)
continue
# if you got here it means that the urlopen succeded
pid = Popen([argv[1], ' '.join(argv[1:])]).pid
break
これは、[スタートアップアプリケーション]メニューから起動する方法です。
~/scripts/waitfornet.py empathy
Empathyがこの種のことを内部で行うにはパッチが必要なようです。しかし、ネットワークから切断して再接続することで、Empathyを突いて正しいことを実行できるはずです。
Empathyがさまざまなタイミングで多数のネットワークへの接続を拒否するバグがあったようです。ただし、「X秒後に再試行します」というカウントダウンが表示されます。
しかし、これにはコードが必要です。必要に応じて、バグレポートを作成する必要があります。
私は この問題を克服するためのスクリプト を書きました。このスクリプト(pythonおよびD-Busに基づく)は、ネットワークがオンラインになるたびに共感をネットワークに接続します。接続がダウンして再接続しても、スクリプトは自動的に再接続します再び共感。
お楽しみいただければ幸いです。改善が必要な場合はコメントを残してください。