GNU/Linux で XRDP とローカル GUI を同時に使う

Debian 系の GNU/Linux 環境で GUI を使うとき、手元の画面だけでなく、別の端末からも入りたいという要求は自然である。普段は local の画面で作業しつつ、別室のノート PC から状態確認をしたい、あるいは別端末から保守だけ行いたい、という場面は珍しくない。そのとき候補になるのが xrdp である。xrdp は Linux 側で RDP 接続を受けるための実装であり、Windows の「リモートデスクトップ接続」や各種 RDP クライアントから GUI で接続する入口になる [1]

しかし、xrdp を導入した環境で local の GUI と remote の GUI を併用しようとすると、認証には成功しているように見えるのに黒画面になる、ログイン直後に切断される、ある条件では動くのに別の条件では再現しない、といった不安定さに遭遇することがある。ここで単に「設定が悪い」「DE が重い」「GPU が古い」といった説明だけで片づけると、同じ問題に何度でも戻ってくる。本稿では、この現象を個別の失敗談としてではなく、複数の層が重なって成立している Linux の GUI セッションの構造として整理し、その上で設計判断を行う。

この話がややこしくなる理由は、Linux の GUI が Windows や macOS のように一枚岩ではないからである。表示サーバー、ウィンドウマネージャー、デスクトップ環境、セッション管理、プロセス間通信、認証情報管理といった部品が重なって初めて一つの GUI 体験になる。そのため、「黒画面になった」「ログイン直後に戻された」「local では動くのに remote では壊れる」といった現象を、単純に「重いから」「不安定だから」で片づけると必ず見誤る。必要なのは、観測された現象を並べ、その背後にある構造を理解し、その上でどこを分離単位に選ぶかを判断することである。

結論を先に要約すると次のとおりである。第一に、xrdp は既存の local 画面をそのまま共有する仕組みではなく、通常は新しい GUI セッションを生成する仕組みである [1][2]。第二に、同一ユーザーで local GUI と xrdp GUI を同時に使うと、D-Bus、systemd の user session、Xauthority、DE のセッション保存や自動起動といったユーザー空間の state が競合しうる [3][4][5][6][7]。第三に、複数の DE を導入しても、その競合の本体は消えないため、同時利用を安定させたいなら分離単位は DE ではなくユーザーになる。

結論 要点
xrdp の本質 xrdp は通常、新しい GUI セッションを生成して RDP 越しに表示する仕組みである
不安定化の本体 同一ユーザーで複数の GUI セッションが並ぶと、ユーザー空間の shared state が競合しうる
設計判断 同時利用を安定化したいなら、DE の切り替えよりもユーザー分離の方が本質に効く

1. まず用語をそろえる

この問題は、用語を曖昧にしたまま議論するとすぐ混乱する。そこで最初に最低限の語彙をそろえる。GUI は Graphical User Interface の略であり、文字だけで操作する CLI と対になる、画面、ウィンドウ、メニュー、ポインター操作を中心にした利用形態を指す。DE は Desktop Environment の略であり、日本語ではデスクトップ環境と訳される。これは単一のプログラム名ではなく、パネル、ファイルマネージャー、設定ツール、セッション管理などをまとめた GUI 操作環境の一式を意味する。Xfce や GNOME Flashback は DE の一種である [8][9][10][11]

さらに表示サーバーは、画面描画と入力イベントの受け渡しを担う基盤であり、X11 系では Xorg が代表である。ウィンドウマネージャーは、ウィンドウの枠、移動、最大化、最小化、重なり順などを管理する部品であり、DE の一部として含まれることもあれば単独で使われることもある。セッションという語も重要であり、ここでは単に「ログインしている状態」ではなく、あるユーザーが認証され、環境変数、プロセス群、セッションバス、設定の復元状態などを含む一連の実行文脈を指す。xrdp を理解するとは、単に RDP でつながることではなく、これらの部品がどのように重なって一つのセッションを成立させているかを理解することに等しい。

用語 意味
GUI 画面やウィンドウやマウスを使う視覚的操作方式
CLI 文字コマンドを入力する操作方式
DE デスクトップ環境。パネルや設定ツールやセッション管理を含む GUI 一式
表示サーバー 画面描画と入力イベント管理の基盤。Xorg や Wayland が該当する
ウィンドウマネージャー ウィンドウ配置や装飾や操作を管理する部品
セッション ユーザーが認証されて開始した一連の GUI または CLI の実行文脈
xrdp Linux で RDP 接続を受けるためのサーバー実装

2. 今回の問いは「どの DE が軽いか」ではない

今回の問いを雑にまとめてしまうと、「xrdp なら Xfce が軽いのか」「GNOME Flashback の方が扱いやすいのか」といった DE 比較の話に見える。しかし本当に解くべき問いはそこではない。解こうとしているのは、Debian 系 Linux で GUI を使い、xrdp でも GUI に入りたいが、local 側の GUI も使いたく、しかも可能なら local GUI と remote GUI を同時に使いたい、という条件が与えられたときに、どの構成が最も整合的かという問題である。

ここで重要なのは、「xrdp は local 画面をそのまま見せるだけだ」という前提に立つと、その後の推論が全部ずれる点である。もし local 画面共有だと考えるなら、問題は帯域や描画負荷の話にしか見えない。だが実際には、xrdp は通常、新しい GUI セッションを確立する。したがって local と remote の関係は、「同じ画面を別経路から見ている」ではなく、「同じユーザーに対して二本目の GUI セッションが立ちうる」という構造になる。ここを固定しないと、その後に出てくる黒画面やログインループを説明できない。

論点 重要度 理由
どの DE が一番軽いか xrdp 用 DE の選定には効くが、問題の本体はそれだけでは決まらない
xrdp が local 画面共有か新規セッション生成か 最重要 ここを誤ると、同時利用時の競合構造を理解できない
同一ユーザーで local と remote に入るか 最重要 共有される state の範囲を決めるためである
local と remote で別の DE を使うか 二次的 UI 層の違いであって、ユーザー空間の共有を消すものではない

3. 観測される現象はなぜ「条件依存で揺れる」のか

実際の運用で最初に目につくのは、local GUI にログインしたまま同じマシンへ xrdp 接続すると、認証後に黒画面になる、ログイン直後に切断される、あるときは入れるのに再起動後は失敗する、といった現象である。ここで重要なのは、この症状が CPU やメモリが十分ある環境でも起こりうる点である。したがって、単純に「重い DE だからだ」「GPU が古いからだ」と断定するのは早い。xrdp の利用実務では、黒画面やセッション生成失敗が起動処理やセッション初期化の不整合と結び付くことが広く知られている [3]

また、この種の問題は「一度動いたことがある」では評価できない。ある日は正常に入り、別の日は失敗するという振る舞いは、設定ファイルの明白な誤記よりも、起動順序や残存 state に依存する shared state の問題を疑わせる。つまり、不安定さの本体は描画性能よりも、セッションがどの順序で立ち上がり、何を共有し、何を引き継ぐかにある。これが分かると、問題の見え方は「xrdp は不安定なソフトだ」から、「同一ユーザーで複数 GUI 文脈を走らせると条件依存の揺れが出やすい」に変わる。

観測された現象 表面的な見え方 より妥当な読み方
認証後に黒画面になる 描画が重い、または GPU が弱い GUI セッションの初期化が最後まで通っていない可能性が高い
ログイン直後に切断される パスワードや権限が誤っている xrdp 側でセッション生成に失敗して終了している可能性が高い
同じ設定でも入れるときと入れないときがある たまたま不安定である 起動順や残存状態に依存する shared state の問題である可能性が高い

4. xrdp は「現在の画面共有」ではなく「新しい GUI セッション生成」である

この問題を理解する第一の鍵は、xrdp を VNC 型の「いま見えている画面の共有」と同一視しないことである。xrdp は通常、接続要求を受けると sesman を介して新しいセッションを確立し、そのために Xorg 系のバックエンドを起動し、RDP クライアントへその画面を渡す [1][2]。xorgxrdp も、既存の X.Org 環境と組み合わせて X server 側を xrdp 用に動かす追加モジュールであることを明示している [2]。つまり、remote 側は local 側の既存画面をそのまま覗いているのではなく、別文脈の GUI セッションである。

この一点を誤ると、その後の議論はすべてずれる。local で見えている同じデスクトップをそのまま remote に流しているだけだと思えば、問題はネットワーク帯域か描画性能に還元される。しかし実際には、同一ユーザーで local にログインした状態で xrdp 接続を行うと、そのユーザーに対して二本目の GUI セッションが立ちうる。ここで初めて、「なぜ同一ユーザーでの同時利用が揺れやすいのか」という問いが技術的な形を持つ。

項目 xrdp の実際 誤解しやすい理解
接続の意味 新しい GUI セッションを生成して RDP 越しに表示する local で見えている同じ画面をそのまま転送する
local との関係 別セッションとして並立しうる 一つのセッションを別経路から見ているだけである
問題の出発点 同じユーザーに複数 GUI セッションが存在しうる 描画負荷だけの問題である

5. GUI セッションは何でできているのか

次に必要なのは、「GUI セッション」とは何かを分解して見ることである。GUI セッションは単にウィンドウを描いているだけではない。少なくとも、表示先を提供する Xorg、デスクトップ部品やアプリケーションのやり取りを支える D-Bus、ログイン文脈とユーザーサービス空間を管理する systemd-logind と pam_systemd、X サーバー接続の認証情報を扱う xauth、そして DE が持つセッション保存や自動起動の仕組みが絡んでいる [4][5][6][7][12]

D-Bus は単なる補助機能ではない。freedesktop.org の文書が示すとおり、D-Bus はアプリケーション同士の通信だけでなく、プロセスやサービスの協調にも使われる基盤である [4]。systemd-logind はユーザーとセッションを追跡し、各ユーザーに対して user@.service を起動しうる。pam_systemd はログイン時に systemd-logind と連携してセッションを登録する [5][6][7]。xauth は X サーバーへの接続で使う認証情報を扱う [13]。さらに Xfce のセッションマネージャーは、前回の状態保存や復元、自動起動を担うことを公式に説明している [9][10]

つまり GUI セッションとは、単一のプロセスではなく、複数の層が互いの前提を仮定しながら同時に成立している実行文脈である。したがって、同一ユーザーの下に二本の GUI セッションが並ぶとき、どの層が共有され、どの層が分離されるかが安定性を決める。

役割 なぜ今回重要か
Xorg アプリケーションの描画先を提供する remote 側では新しい display 文脈が必要になる
D-Bus デスクトップ部品やアプリの通信を仲介する GUI 初期化や各種サービスの連携に関わる
systemd-logind / pam_systemd ユーザーごとのログイン文脈と user service 空間を管理する 同一ユーザー二重 GUI で shared state になりやすい
xauth X サーバー接続の認証情報を持つ display の整合が崩れると GUI 起動が不安定になる
DE のセッション管理 前回状態の保存と復元、自動起動を行う 二つの GUI セッションで前提が衝突しやすい

6. shared state の本体は DE ではなくユーザー空間にある

ここまでの観測をまとめると、競合の中心は UI の見た目や描画パイプラインそのものではなく、ユーザーにひもづく session bus、user service 空間、認証情報、セッション復元状態にあることが見えてくる。言い換えれば、問題の本体は「どの DE を使うか」よりも、「どのユーザー空間を共有しているか」にある。

たとえば同一ユーザーで local と remote の両方に入ると、remote 側の DE が必要な D-Bus 文脈を正しく捕まえられない、一方のセッションで保存された復元状態が他方の前提と衝突する、display 認証の整合が崩れる、ユーザーサービスの起動順が意図せず共有される、といったことが起こりうる。もちろん実際の失敗様式は環境により異なるが、いずれにせよ問題の芯が「ユーザー単位で共有される state の競合」にある、という理解は揺らがない。

この理解は非常に重要である。なぜなら、後で「複数 DE を入れればよいのではないか」という案を評価するとき、その有効性を判定する基準になるからである。もし問題の本体が UI の見た目にあるなら、DE の切り替えで解決する可能性がある。しかし本体がユーザー空間の shared state にあるなら、DE を変えても根本原因には届かない。

共有されやすいもの 内容 競合の出方
D-Bus の文脈 デスクトップ部品やアプリのメッセージ交換基盤 起動失敗、初期化不全、黒画面の一因になりうる
user service 空間 systemd が管理するユーザー単位のサービス群 どのセッションが主導権を持つかが曖昧になりやすい
X 認証情報 display ごとの接続認証 誤った display や認証整合崩れで起動が不安定になる
セッション保存情報 前回状態の保存、自動起動、復元設定 二重セッション時に前提の食い違いが表面化しやすい

7. Xfce は有力だが、同一ユーザー同時利用の完全解ではない

Xfce が xrdp 用 DE の候補として何度も挙がるのは妥当である。公式文書でも Xfce は startxfce4 により起動され、セッションマネージャーがアプリケーションの起動やセッション保存を扱うことが説明されている [8][9][10]。一般に Xfce は構成が比較的単純で、xrdp と組み合わせた実例も多く、remote 側の DE として採用しやすい。GNOME Shell のように合成前提が強い環境より、Xfce の方が扱いやすい場面が多いのは確かである。

しかし、ここで強調しなければならないのは、Xfce を選ぶことと、同一ユーザーの同時利用を原理的に保証することは別だという点である。たとえば D-Bus の初期化を明示する、セッション保存を切る、compositor を止める、といった調整で表面的な不安定さを減らすことはできる。だがそれは shared state を分離するのではなく、表面化しやすさを下げる方向の調整である。したがって、Xfce は有力候補ではあっても、「これを選べば同一ユーザーの同時利用が完全に安定する」とまでは言えない。

この点を誤ると、「Xfce ならいける」「Flashback ならいける」といった経験則の応酬になりやすい。しかし経験則は、たまたまその環境では shared state の衝突が目立たなかった、という事実以上のものではない。設計として採用すべきかを考えるなら、成功例の有無よりも、なぜ成功し、どこで失敗しうるかを説明できる構成を選ぶべきである。

評価項目 Xfce の位置づけ
xrdp との相性 比較的扱いやすい。有力候補である
構成の単純さ 高い。理解しやすく設定点も比較的少ない
同一ユーザー同時利用の完全保証 ない。shared state 競合は別問題として残る

8. GNOME Flashback を local 用にしても、本質解にはなりにくい

GNOME Flashback は GNOME Shell より軽く、X11 前提の比較的古典的な構成であるため、local 用の DE としては十分成立しうる [11][14]。そのため、「local は GNOME Flashback、remote は Xfce」と役割分担したくなるのは自然である。見た目も操作感も分けられるので、一見すると衝突回避に見える。

しかし、この構成で変わるのは主として UI 層であり、ユーザー空間ではない。D-Bus も user session も xauth も、同じユーザーのままである限り shared state は残る。したがって、複数 DE 構成は役割分担としては成立しても、今回の問題の本体に直接効くとは言いにくい。むしろ、設定ツール、依存ライブラリ、起動経路、操作体系といった変数が増え、どの設定が local 側に効き、どれが remote 側に効いているかが分かりにくくなる危険もある。

要するに、複数 DE を入れることは「違う見た目を与える」ことには役立つが、「shared state の競合を断ち切る」こととは別である。見かけの分業と構造的分離は同じではない。

構成 見かけ上の利点 技術的に残る問題
同一ユーザー + Xfce 単独 設定系統が一つで理解しやすい 同時利用時の shared state 競合は残る
同一ユーザー + Flashback / Xfce 併用 用途ごとに UI を分けられる shared state 競合は残り、変数だけが増えやすい

9. 評価軸は「構成の簡潔さ」と「shared state の分離」で分ける

議論がループしやすい理由の一つは、「構成が簡潔であること」と「競合を原理的に避けられること」が同じように見えやすいからである。しかし今回の問題では、この二つは別の軸である。同一ユーザー + 単一 DE の構成は、ホームディレクトリも設定ファイルも一つで済み、表面の構成は非常に簡潔である。これは事実である。一方で、その簡潔さは「一つの user space を local と remote が共有する」ことと裏表である。

逆に、別ユーザー方式ではホームディレクトリや設定ファイルは分かれるため、表面の構成要素は増える。しかしその代わり、D-Bus、user session、認証情報、セッション復元情報といった shared state はユーザー境界で自然に分離される。つまり、表面上の管理項目は増えるが、内部の競合構造は減る。今回の設計判断は、「どちらが好きか」ではなく、「どの層を分離単位として選ぶか」の問題である。

評価軸 同一ユーザー方式 別ユーザー方式
表面の簡潔さ 高い
ユーザー空間の分離 弱い 強い
同時利用時の説明可能性 低くなりやすい 高くなりやすい

10. 同時利用しないなら、同一ユーザー + 単一 DE は十分合理的である

ここで条件を一段緩めると結論は変わる。もし要件が「local GUI と remote GUI を同時には使わない」であれば、同一ユーザー + Xfce 単独は十分に合理的である。remote に入る前に local GUI セッションを終了させれば、同一ユーザー二重 GUI という競合条件そのものを作らないからである。この場合、最小構成と安定性がかなり一致する。

つまり、同一ユーザー + Xfce 単独が常に誤りなのではない。問題になるのは、「同時利用を強く要求しながら、その構成に完全保証まで求める場合」である。条件が変われば最適解も変わる。この点を明示しないと、「Xfce 単独でいい」「いや別ユーザーが必要だ」という議論が互いに噛み合わなくなる。

条件 最も整合的な構成 理由
同時利用しない 同一ユーザー + Xfce 単独 競合条件を作らず、構成も最小で済むためである
同時利用する 別の分離戦略が必要 shared state 競合を最小化する必要があるためである

11. 同時利用を本当に要求するなら、分離単位は DE ではなくユーザーになる

以上の観測と構造整理から、設計判断はかなり明瞭になる。条件が「local GUI と xrdp GUI を同時に使いたい」「VNC 型の既存画面共有方式は採らない」「しかもできるだけ高い再現性と安定性がほしい」であるなら、分離すべき単位は DE ではなくユーザーである。理由は単純で、競合している主要 state がいずれもユーザー空間に属しているからである。

この設計では、たとえば local 用の普段使いユーザーと、remote 用の xrdp ユーザーを分ける。DE は増やさず、両方とも Xfce のような比較的単純な環境に統一してもよい。そうすると、同一ユーザー二重 GUI という問題設定そのものが消える。設定ファイルやホームディレクトリは分かれるが、それは shared state の競合を避けるために意図的に分離された構造であり、挙動を説明しやすい。

別ユーザー方式の利点は、同時利用の安定化だけではない。remote 用ユーザーを別に用意しておくと、それ自体が非常用のログイン経路になる。普段使いのユーザーで GUI 設定を壊した、セッション保存や自動起動の設定でログイン直後に不安定になった、といった場合でも、別 user space から入り、対象ユーザーの設定を修正したり退避したりしやすくなる。これは単なる利便性ではなく、復旧性の設計である。

方式 分離単位 今回の問題への効き方 復旧経路
同一ユーザー + 単一 DE 分離しない 構成は簡潔だが、同時利用の完全保証には届かない 弱い
同一ユーザー + 複数 DE UI 層のみ分離 shared state 競合には本質的に効きにくい 弱い
別ユーザー + 単一 DE ユーザー空間を分離 今回の競合構造へ直接効く 強い

12. 最終整理

本稿の論点を最後にまとめる。xrdp は local 画面をそのまま共有する仕組みではなく、通常は新しい GUI セッションを生成する仕組みである [1][2]。したがって、同一ユーザーで local GUI と xrdp GUI を同時利用すると、D-Bus、systemd の user session、xauth、DE のセッション管理といったユーザー単位の state が競合しうる [4][5][6][7][13]。そのため、問題の本体は DE の見た目や描画負荷だけでは説明できない。

また、Xfce は xrdp 側 DE として有力であり、同時利用を要求しないなら Xfce 単独構成は十分に合理的である [8][9][10]。一方、local を GNOME Flashback、remote を Xfce にするといった複数 DE 構成は、UI 層の役割分担にはなっても、ユーザー空間の共有を消さないため、本質解にはなりにくい [11][14]。ゆえに、local GUI と xrdp GUI を同時に使いたい、既存画面共有方式は採らない、しかもできるだけ高い安定性がほしい、という条件では、別ユーザーを用意し、DE は増やしすぎず、比較的単純な環境で統一するのが最も整合的である。

構成 同時利用 安定性 構成の簡潔さ 非常時の復旧経路 総合評価
同一ユーザー + Xfce 単独 可能 高い 弱い 同時利用を強く要求しないなら実務的である
同一ユーザー + 複数 DE 可能 中以下 低い 弱い 変数が増える一方で本質的分離に届きにくい
別ユーザー + 単一 DE 可能 高い 強い 今回の条件では最も妥当である
同一ユーザー + 非同時運用 不可 高い 高い 同時利用を不要とできるなら最小構成として優れている

参考文献

  1. neutrinolabs/xrdp. https://github.com/neutrinolabs/xrdp
  2. neutrinolabs/xorgxrdp. https://github.com/neutrinolabs/xorgxrdp
  3. ArchWiki: xrdp. https://wiki.archlinux.org/title/Xrdp
  4. D-Bus Specification. https://dbus.freedesktop.org/doc/dbus-specification.html
  5. systemd-logind.service. https://www.freedesktop.org/software/systemd/man/systemd-logind.service.html
  6. pam_systemd(8). https://man7.org/linux/man-pages/man8/pam_systemd.8.html
  7. user@.service(5). https://man7.org/linux/man-pages/man5/user%40.service.5.html
  8. Getting Started with Xfce. https://docs.xfce.org/xfce/getting-started
  9. xfce4-session – Session Manager. https://docs.xfce.org/xfce/xfce4-session/start
  10. xfce4-session – Preferences. https://docs.xfce.org/xfce/xfce4-session/preferences
  11. GNOME Flashback. https://gitlab.gnome.org/GNOME/gnome-flashback
  12. dbus. https://dbus.freedesktop.org/
  13. XAUTH(1) manual page. https://www.x.org/archive/X11R7.5/doc/man/man1/xauth.1.html
  14. GNOME Flashback wiki archive. https://wiki.gnome.org/Projects/GnomeFlashback