はじめに (対象読者・この記事でわかること)

本記事は、XServer(または同様の VPS)上で Linux デスクトップ環境を利用しているエンジニア・システム管理者を対象としています。
特に、以下のような状況に直面したことがある方におすすめです。

  • localhost.localdomain Xorg[8254]: XDM: too many retransmissions, declaring session dead というエラーメッセージが頻発し、GUI が立ち上がらない
  • X11 ディスプレイマネージャ(XDM/LightDM/GDM 等)のログを見ても原因が分からない

この記事を読むと、エラーの根本原因(ネットワーク・認証・設定不備)を把握でき、実際のサーバ上で取るべき対処手順が明確になります。さらに、再発防止のためのベストプラクティスも併せて学べますので、今後同様の障害に対処する際の時間と労力を大幅に削減できます。


前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。

  • 基本的な Linux コマンド操作(systemctl, journalctl, grep など)
  • X Window System(Xorg)とディスプレイマネージャ(XDM/LightDM/GDM 等)の概念
  • VPS のネットワーク設定(IP アドレス、ホスト名解決)に関する基礎知識

エラー概要と背景

1. エラーメッセージの意味

XDM: too many retransmissions, declaring session dead は、XDM が X サーバー(Xorg)との通信で一定回数以上再送(retransmission)を試みても応答が得られず、セッションを破棄したことを示すログです。XDM はディスプレイマネージャとして、Xorg が起動したあとにクライアント(ユーザー)に認証画面を表示する役割を担います。このエラーが出ると、GUI がまったく表示されず、SSH などのテキストベースの接続しか残らなくなります。

2. 発生しやすいシチュエーション

XServer のような共有 VPS では、以下の要因が組み合わさるとエラーが頻発します。

要因 具体例
ホスト名解決の不整合 /etc/hosts127.0.0.1 localhost.localdomain が設定されているが、実際のホスト名が異なる
Xauth ファイルの権限エラー .Xauthority の所有者が root になっていて、一般ユーザーがアクセスできない
ファイアウォール/iptables の制限 localhost へのループバックがブロックされ、XDM が Xorg と通信できない
Xorg の起動オプションミス -nolisten tcp で TCP 接続を禁止しているが、XDM が TCP 経由で接続しようとしている
リソース不足 メモリや CPU が逼迫し、Xorg の起動が遅延・タイムアウトする

このように、単に XDM のバグというよりは「環境設定の食い違い」や「リソース競合」が根本原因であることが多いです。


具体的な手順と実装方法

本章では、エラーを再現しながら、原因の切り分けと解決手順をステップごとに解説します。実際に XServer の VPS にログインし、以下の流れで作業してください。

ステップ 1:ログの確認と基本情報の取得

  1. システムジャーナルの確認
    bash sudo journalctl -u xdm.service -b | tail -n 30 ここで XDM: too many retransmissions の直前に出ているエラーや警告を抜き出します。

  2. Xorg のログ取得
    bash cat /var/log/Xorg.0.log | grep -iE "error|fail|warning" Fatal server error が無いかチェック。

  3. ホスト名と /etc/hosts の整合性確認
    bash hostname cat /etc/hosts 出力例: hostname → example.xserver.jp /etc/hosts: 127.0.0.1 localhost 127.0.1.1 example.xserver.jp example

ポイントlocalhost.localdomain が記載されている場合は削除、または 127.0.0.1 localhost.localdomain localhost の形に統一します。

ステップ 2:Xauth と権限の修正

  1. .Xauthority の所有者と権限を確認
    bash ls -l ~/.Xauthority 正常であれば所有者は該当ユーザー、権限は 600

  2. 誤った権限がある場合はリセット
    bash sudo chown $(whoami):$(whoami) ~/.Xauthority chmod 600 ~/.Xauthority

  3. XDM が使用する Xauth ファイルを再生成
    bash xauth list $DISPLAY # 例: xauth add :0 . trusted

ステップ 3:ファイアウォールとループバック設定の検証

  1. iptables のルール確認
    bash sudo iptables -L -n | grep -i loopback ACCEPT が設定されていない場合は追加します。

  2. ループバックインタフェースが有効か
    bash ip a show lo state UP でなければ以下で有効化
    bash sudo ip link set lo up

  3. SELinux/AppArmor が有効なら一時的に無効化(テスト目的)
    bash sudo setenforce 0 # SELinux sudo aa-complain /etc/apparmor.d/* # AppArmor

ステップ 4:Xorg の起動オプション修正

XDM が TCP 経由で Xorg に接続できるように、/etc/X11/xinit/xserverrc もしくは /etc/X11/xorg.conf を確認します。

  1. Xorg 起動オプションの確認
    bash ps -ef | grep Xorg オプションに -nolisten tcp が含まれている場合は削除。

  2. 設定ファイルの修正例 (/etc/X11/xorg.conf.d/10-server.conf)
    conf Section "ServerFlags" Option "ListenTCP" "true" EndSection

  3. XDM の再起動
    bash sudo systemctl restart xdm

ステップ 5:リソースの確認とチューニング

  1. メモリ・CPU 使用率のモニタリング
    bash top -b -n 1 | head -n 15 free -h

  2. 不要なサービスの停止(例: apache2, mysql 等)
    bash sudo systemctl stop apache2 sudo systemctl disable apache2

  3. swap の増設(VPS のプランに余裕があれば)
    bash sudo fallocate -l 1G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile

ハマった点やエラー解決

発生した問題 原因 解決策
XDM: too many retransmissions が依然として出る /etc/hostslocalhost.localdomain が残存 127.0.0.1 localhost localhost.localdomain のように統一し、hostname -f が同一になるよう修正
.Xauthorityroot に所有されていた sudo startx で root が Xorg を起動 chown $USER:$USER ~/.Xauthoritychmod 600 を適用
iptables で loopback が DROP されていた デフォルトポリシーが DROP のため iptables -A INPUT -i lo -j ACCEPT を追加
-nolisten tcp が残っていた XDM が TCP 接続を要求したが拒否された -nolisten tcp を除去し、Option "ListenTCP" "true" を明示的に設定

解決策まとめ

  1. ホスト名と /etc/hosts の不整合を解消
  2. .Xauthority の権限・所有者を正しく設定
  3. loopback インタフェースとファイアウォールを許可
  4. Xorg の TCP リスニングを有効化
  5. リソース不足が疑われる場合は不要サービスの停止・swap の増設

上記手順を順に実施すれば、エラーは解消し、XServer 上の GUI が安定して起動するようになります。

まとめ

本記事では、XServer で頻発する「XDM: too many retransmissions, declaring session dead」エラーの原因と、実際にサーバ上で行うべき具体的な対処手順を詳細に解説しました。

  • 原因の切り分け:ホスト名解決、Xauth 権限、ファイアウォール、Xorg のオプション、リソース不足の四大要因
  • 実装手順:ログ確認 → 権限修正 → ネットワーク設定 → Xorg 設定 → リソースチューニング
  • ハマりポイントlocalhost.localdomain の残存、.Xauthority の所有者誤設定、loopback のブロック

これらを実践することで、同様のエラーに遭遇した際に素早く復旧でき、サーバ運用の信頼性を向上させることができます。次回は、XServer 上での自動バックアップと障害復旧シナリオの構築について取り上げる予定です。

参考資料