ウェイクアップ時に、USB WiFi ドングルが接続された PCIe USB カードは、USB インターフェイスより先にネットワークが起動するため失敗します。

ウェイクアップ時に、USB WiFi ドングルが接続された PCIe USB カードは、USB インターフェイスより先にネットワークが起動するため失敗します。

PCIe USB 3.0 カードを搭載した古いマザーボードを使用しています。そこに、ネットワーク接続を提供する WiFi アダプターを接続しています。マシンがスリープ/サスペンド状態になるまではすべて正常に動作します。ウェイクアップすると、マシンが USB カードが復帰する前にネットワークを起動しようとするため、ネットワークが起動しません。その後、ネットワークを再起動するだけで、USB インターフェイスが起動するので機能しますが、ネットワークをオンにする前に、OS が USB インターフェイスが起動するまで待機するようにすると便利です。USB の起動を優先したり、意図したとおりに動作するようにするためにできることはありますか?

編集: WiFi ドライバーは MediaTek ドライバーです。WiFi アダプターは、サポートが充実した MT7612U チップを使用しています。マザーボードに内蔵されている USB 2.0 ポートを使用しているときは、この問題は発生しません。また、カードの USB 3.0 チップは Renesas/NEC のものですが、現時点では実際のモデルを思い出せません。重要なのは、これらはすべて Linux でサポートが充実したハードウェアであるため、なぜこのようなことが起こるのかがわからないということです。

答え1

私の理解が正しければ、このコマンドで sudo systemctl restart network-manager.service 問題は解決します。

解決策としては、それをウェイク スクリプトとして追加することです。

から systemd でサスペンド前後にスクリプトを実行する:

最初の引数が pre (システムがサスペンドする前) か post (システムがサスペンドから復帰した後) かをチェックする任意の名前の実行可能スクリプトを /usr/lib/systemd/system-sleep/ の下に置くだけです。

であればpre、一時停止する前にやりたいことを実行し、 であれば、 post再開後にやりたいことを実行します。簡単です!

役に立たない例を次に示します。

#!/bin/sh
if [ "${1}" == "pre" ]; then
  # Do the thing you want before suspend here, e.g.:
  echo "we are suspending at $(date)..." > /tmp/systemd_suspend_test
elif [ "${1}" == "post" ]; then
  # Do the thing you want after resume here, e.g.:
  echo "...and we are back from $(date)" >> /tmp/systemd_suspend_test
fi

関連情報