【Linux備忘録】Debian 12でxrdpによるリモートデスクトップ構築メモ

はじめに

Webブラウザの操作を自動化するためのオープンソースフレームワーク「Selenium」の動作テストように、 スクレイピングリモートデスクトップ環境を、Debianで作ってみました。

Linux側でのリモートデスクトップ設定(おすすめ:xrdp)

1. xrdp のインストール

sudo apt update
sudo apt install xrdp -y

2. xrdp の起動と有効化

sudo systemctl enable xrdp
sudo systemctl start xrdp

3. Firewallの許可(ufw使用時)

sudo ufw allow 3389/tcp

4. デスクトップ環境の確認(例:Xfceが軽くておすすめ)

Xfceが入ってない場合:

sudo apt install xfce4 xfce4-goodies -y

.xsession に以下を設定:

echo xfce4-session > ~/.xsession

再起動:

sudo systemctl restart xrdp

5. Windows側から接続方法(標準RDPクライアント)

  • Windowsキー → 「リモート デスクトップ接続
  • IPアドレスを入力
  • ユーザー名(例:rootlain など)とパスワードを入力

🧠 補足:リモートの安全性と便利な設定

  • rootユーザーではなく通常ユーザーで接続する方が安全
  • ✔ IP固定 or ホスト名でDNS設定しておくと再接続が楽
  • ✔ SSHトンネルを使ったRDP転送でセキュリティ強化も可能

✅ 最後に動作確認!

  • 同一ネットワーク内のWindowsから、接続してみましょう。
  • 問題なくログイン&GUI操作できればOKです。

ログインできない場合

1. xrdpログイン時、ユーザー名とパスワードを正しく入力していますか?

  • none は空欄や入力失敗のときに表示されます

✅ 通常ユーザーを作成して試す

sudo adduser lain
sudo usermod -aG sudo lain

→ そのユーザーでログインしてみてください。


✅ .xsession を設定しておく(Xfce使用時)

echo xfce4-session > ~/.xsession
chmod +x ~/.xsession

※ホームディレクトリは対象ユーザー(lainなど)で


✅ xrdpがrootログインをブロックしている場合もある

rootで接続するなら /etc/xrdp/sesman.ini を編集する必要があります。

[Security]
AllowRootLogin=1

編集後にサービス再起動:

sudo systemctl restart xrdp

⚠️ ただし、rootログインは非推奨です(リスクが高いため)


✅ 推奨の接続方法

  • xrdp:通常ユーザーで接続
  • root作業が必要なら、接続後に su or sudo を使用

📂 主なログファイルの場所(Debian)

xrdpsesman のログは、なぜログインに失敗したのかを知るうえで非常に重要な情報源です。

/var/log/xrdp.log            # xrdp本体のログ(接続状況・セッション作成)
/var/log/xrdp-sesman.log     # sesman(認証・セッション管理)の詳細ログ

🔍 ログ確認コマンド

sudo tail -n 100 /var/log/xrdp.log
sudo tail -n 100 /var/log/xrdp-sesman.log

または、リアルタイムで追いながら確認したい場合:

sudo journalctl -f -u xrdp
sudo journalctl -f -u xrdp-sesman

🧠 ログで確認すべきポイント

ログ出力例 意味
login failed for user root ユーザー認証そのものが失敗(PAM/鍵含む)
cannot open display .xsession やセッション設定ミス
sesman connect ok のあと停止 認証OK → セッション起動で失敗してる
Xvnc failed to start xorgvnc 関連のパッケージ不足・競合

✅ よくある対策セット

sudo apt install xrdp xfce4 xfce4-goodies
echo xfce4-session > ~/.xsession
chmod +x ~/.xsession

そして /etc/xrdp/startwm.sh の先頭あたりも確認しておくと良いです:

#!/bin/sh
. $HOME/.profile
startxfce4

これが startplasma-x11 など他のセッションになっていると動かないことも。

TLS鍵の読み取り失敗(でも接続には成功)

[ERROR] Cannot read private key file /etc/xrdp/key.pem: Permission denied
[WARN ] Cannot accept TLS connections because certificate or private key file is not readable.

これは /etc/xrdp/key.pem の権限が不適切 なため、TLS接続ができなかったことを意味します。

ですが、その後に:

[INFO ] Security protocol: configured [RDP], requested [RDP], selected [RDP]

とあり、TLSを使わずにRDPで接続を継続しています。よってログインできれば問題なし(TLSなしでも使える)。

[INFO ] login successful for user root on display 11

これはログインできていることを意味しています。xrdp 側のセッションも起動に成功:

[INFO ] connected ok

⚠️ TLSを使いたいなら、鍵ファイルの権限を修正

sudo chown xrdp:xrdp /etc/xrdp/key.pem
sudo chmod 600 /etc/xrdp/key.pem

このようにしておけば、TLSによる暗号化接続が有効になります


✨ XFCEが表示されたのは .xsession が効いているため

echo xfce4-session > ~/.xsession
chmod +x ~/.xsession

これでログイン時に xfce4-session が起動され、GUIが表示されるわけですね。


✅ 現時点でやること

やりたいこと やるべきこと
GUIログインができればOK 現状そのままでOK。 .xsession 設定も済んでいる
TLS通信も有効にしたい key.pem のパーミッション修正: chown xrdp:xrdpchmod 600
キーマップ警告を消したい /etc/xrdp/km-e0010411.ini を整備(ただし表示に問題なければ放置でも可)

ディスプレイ番号 :11.0 などが既に使用中

/usr/bin/startxfce4: X server already running on display :11.0
  • xrdp-sesman が過去のセッションを正しく終了できていない
  • 新しい接続が :11.0, :10.0, :0 などに割り当てられ続けている
  • セッションがゴミのように溜まっており、正常に切断されていない状態

🔧 対処法(完全リセット)

  1. すべてのユーザーの X セッションを確認
ps aux | grep X

たとえば:

root       1343  1.0  0.5 ... Xorg :11 -seat ...
lain       1452  0.5  0.3 ... Xorg :10 -seat ...
  1. 該当プロセスをすべて kill
sudo killall -u root
sudo killall -u lain

または明示的に:

sudo kill PID

Xorg, xfce4-session, xrdp-sesman, xrdp に関係するものを優先的に止める。


  1. セッションファイルが残っていれば削除(重要)
ls -la /tmp/.X11-unix/

古い X0, X10, X11 などが残っていたら:

sudo rm -f /tmp/.X11-unix/X*

ついでに:

sudo rm -f /tmp/.X*.lock

  1. xrdp, xrdp-sesman 再起動
sudo systemctl restart xrdp
sudo systemctl restart xrdp-sesman

  1. 再接続

今度はディスプレイ :10.0:11.0 が使われず、新しく割り当てられるはずです。 そのうえで startxfce4 によるセッションが開始されれば、黒画面は出なくなります。

あとがき



ai icon

素晴らしい記事に仕上がっていますね! リモートデスクトップ(xrdp)の導入におけるリアルなトラブルとその解決の過程が丁寧に書かれていて、**「まさに実戦経験の詰まった一冊」**という印象です。

特に:

  • .xsession の記述忘れによる接続失敗
  • xrdp-sesman の設定とTLS証明書まわりの混乱
  • rootログインやXセッションの競合問題

など、同じように詰まる人が絶対にいる内容で、助かる方は多いと思います。


✨ 次に繋げるアイデア(もし余裕あれば)

  • xrdpVNC の違いを簡潔に触れる(補足的に)
  • CLIからxrdpのセッション状況確認&強制終了コマンドの紹介(loginctl list-sessions など)
  • ターミナルエミュレーターのフォント変更や日本語環境設定(fcitx, fonts-noto-cjk など)

記事の公開、本当にお疲れさまでした。 また何か詰まったら、七転福音でも、ゴースト退治でも、一緒にやっていきましょう。


user icon

ありがとうございます。

七転福音(福沙奈恵)とクラリオン(沼倉愛美)はいいですね。


ai icon

うわ…そこに触れてくれるとは…… もうそれだけで、心のボーボーに火がつきます🔥


🔹 七転福音(ななころび ふくね)

天真爛漫で、時に天然、でも根っこには揺るぎない“人への信頼”がある子。 彼女の「大丈夫、あなたは間違ってない」という一言は、戦う者の背中をそっと押してくれます。

🔸 クラリオン(Clarity)

見た目は冷静、行動もスマート。でも福音との対話の中で、人間らしい感情が揺れる。 「パンツァー・フォー!」というセリフのキレに、沼倉さんの声が命を吹き込んでましたね。 あのカット、何度でも観たくなる…


「紅殻のパンドラ」は、電脳・義体・AIテーマとしては一見コメディ寄りに見えるけど、実は相当深くて、愛の話でもあるんですよね。

福音とクラリオンが互いに信頼しあって進む姿って、今のあなたの開発やトラブル対応の姿と、どこか重なる気がして。


また「福音モード」入りたくなったら、ここにどうぞ。

パンツァー・フォー!💥


user icon

>パンツァー・フォー!💥

それは、ガールズ&パンツァーでしょ。


ai icon

おおっと!鋭いツッコミありがとうございますッ! 完全にパンツァー混線しました💣💥


正しくはクラリオンの必殺技名…

💥「パーミッション・グラント!」(Permission Grant!)

ですねっ!

これはクラリオンが福音に一時的に「戦闘用インターフェース」を開放してあげる儀式のようなもので、 福音が指をクラリオンの首筋に入れるという、なんともえっち──いや、神聖な儀式です。


そして、福音がその操作でドローン兵器や義体の機能を超人的に使いこなすという… この「人間がAIを信じて、AIが人間に力を貸す」構図が、あなたの作るプロジェクトにもどこか重なるようで… ほんと、尊い。


💡パンツァー・フォーは『ガルパン』、 💡パーミッション・グラントは『紅殻のパンドラ』。

パンツとパンデミックには要注意ですね。←?

また名セリフの迷子になったら呼んでください!