
WindowsのHyper-V上でUbuntuデスクトップ環境を構築し、いざGoogleドライブなどと連携しようとした際にトラブルに遭遇していないでしょうか。 「設定」から「オンラインアカウント」を開いても、「オンラインアカウントに接続できません」というエラーメッセージが表示され、アカウントの追加ができないケースがあります。
ブラウザを開けば普通にインターネットには繋がっているのに、なぜか設定画面からだけオフライン扱いされてしまう。物理マシンのUbuntuでは問題なく利用できるのに、Hyper-V環境特有のこの問題に悩まされているITエンジニアやLinuxユーザーの方は多いと思います。
この記事では、具体的な原因の技術的な解説と、そのままターミナルにコピペして実行できる解決手順をステップバイステップでご紹介します。
事象と根本原因
物理PCでは繋がるのに、なぜHyper-Vだと繋がらないのでしょうか。
結論から言うと、ネットワークを管理するデーモン(NetworkManagerとsystemd-networkd)の競合と、Ubuntuのデスクトップ環境(GNOME)の仕様が根本的な原因です。
Ubuntuのデスクトップ環境(GNOME)が提供するオンラインアカウント機能は、ネットワークがオンラインかどうかを「NetworkManager」の接続性チェック(connectivity check)のステータスに完全依存しています。
通常、デスクトップ版のUbuntuではネットワークインターフェースの管理は「NetworkManager」が行います。しかし、Hyper-VのUbuntu環境では、ネットワークインターフェース(eth0など)の管理が、サーバー用途で標準的に使われる「systemd-networkd」に割り当てられている場合があります。
その結果、ブラウザ等でインターネット通信自体はできていても、GNOME側からは「NetworkManagerの管理外(managed=false)になっている=ネットワークに接続されていない(オフライン環境)」と誤認されてしまいます。これにより、オンラインアカウントの機能がロックされ、「オンラインアカウントに接続できません」というメッセージが表示されるのです。
解決するためのアプローチとしては、ネットワークの管理を「systemd-networkd」から「NetworkManager」へ完全に移行し、NetworkManagerに接続性チェックを正しく行わせる設定を実施します。
解決手順
それでは、具体的な対処手順を解説します。 以下のコマンドを順にターミナルへコピー&ペーストして実行してください。
【作業時の注意点:SSH接続について】 途中でネットワークの管理デーモンを切り替えるため、一時的にネットワーク通信が切断されます。 もしWindowsのコマンドプロンプトやTeraTermなどからSSH経由で作業していると、ターミナルがフリーズし操作不能になる可能性があります。トラブルを防ぐため、必ずHyper-Vマネージャーの「仮想マシン接続」のコンソール画面から直接操作を行ってください。
手順1:NetworkManager.confを編集し接続性チェックを有効化
まず、NetworkManagerの設定ファイルを開き、ネットワークインターフェースを管理下に置くための修正と、接続性チェックの設定を追記します。
sudo nano /etc/NetworkManager/NetworkManager.conf
ファイルが開いたら、以下の内容になるように編集・追記して保存します。 変更ポイントは、managed=false を managed=true に変更することと、末尾に [connectivity] セクションを追加することです。 (※nanoエディタの操作に不慣れな方は、キーボードの Ctrl+O を押して Enter で上書き保存し、Ctrl+X で終了してください)
[main]
plugins=ifupdown,keyfile
[ifupdown]
managed=true
[device]
wifi.scan-rand-mac-address=no
[connectivity]
uri=http://connectivity-check.ubuntu.com/
interval=300
手順2:systemd-networkdの関連サービスを停止・無効化
既存のネットワーク管理デーモンである systemd-networkd が競合しないように、関連するサービスやソケットを含めて完全に停止し、自動起動も無効化します。
sudo systemctl stop systemd-networkd.socket systemd-networkd-varlink.socket systemd-networkd-resolve-hook.socket
sudo systemctl stop systemd-networkd
sudo systemctl disable systemd-networkd
sudo systemctl disable systemd-networkd.socket systemd-networkd-varlink.socket systemd-networkd-resolve-hook.socket
手順3:NetworkManagerサービスを有効化・再起動
NetworkManagerの自動起動を有効化し、先ほど変更した設定を反映させるためにサービスを再起動します。
sudo systemctl enable NetworkManager
sudo systemctl restart NetworkManager
手順4:ネットワークインターフェース(eth0)をNetworkManagerの管理下に変更
Hyper-V上のネットワークインターフェース(通常は eth0)を、NetworkManagerの管理対象として明示的に設定します。
sudo nmcli device set eth0 managed yes
手順5:NetworkManagerの接続プロファイルを作成・有効化
eth0 に対する接続プロファイルを作成し、有効化して通信を確立します。
sudo nmcli connection add type ethernet ifname eth0 con-name eth0-nm
sudo nmcli connection up eth0-nm
手順6:nmcliコマンドで接続状態のステータスを確認
NetworkManager の全体的なステータスを確認し、正しくオンラインと認識されているかチェックします。
nmcli general status
実行結果の表示で、STATEが「接続済み」、CONNECTIVITYが「完全」と表示されていれば、NetworkManagerが正常にインターネット接続を認識できています。
手順7:システムの再起動と設定の永続化確認
最後にシステムを再起動し、設定が永続化されていることを確認します。
sudo reboot
再起動後、デスクトップ環境が立ち上がったら「設定」→「オンラインアカウント」を開いてください。 エラーメッセージが消え、Googleなどのアカウントに正常に接続・ログインできるようになっていれば作業完了です。
コラム:Netplanを使用した設定について
最近のUbuntuでは、ネットワークの基本設定ツールとして「Netplan」が採用されています。 今回の手順では、トラブルを迅速に解決するためにnmcliコマンドで直接NetworkManagerの管理を上書きする確実なアプローチをご紹介しました。 環境や運用方針によっては、/etc/netplan/ 配下の yaml ファイルを編集し、renderer: NetworkManager を指定してから sudo netplan apply を実行するアプローチが適している場合もあります。今後のサーバー運用などでネットワーク設定を触る機会があれば、Netplanの仕様についても併せて確認してみてください。
まとめ
Hyper-V上のUbuntuで「オンラインアカウントに接続できません」と表示される問題について、その原因と解決策を解説しました。
GUIの設定画面で起きるトラブルですが、裏側では「NetworkManager」と「systemd-networkd」というネットワーク管理デーモンの競合が原因となっていました。Linux特有のデーモンの役割や、デスクトップ環境(GNOME)が何に依存して動作しているのかを理解すると、このような一見不可解なトラブルも論理的に解決することができます。
同じ事象でお困りの方の参考になれば幸いです。
