コグノスケ


2025年4月4日

xrdpに接続しても画面がなかなか表示されない

目次: Linux

ネットワークが不安定な環境でLinux PCのxrdpサーバーに接続していると、下記のようなログが出てネットワーク要因で切断されることがあります。

クライアント(freerdp)のエラーメッセージ
[INFO][com.freerdp.client.common] - [client_auto_reconnect_ex]: Network disconnect!

切断後に再接続できますが、ときおり画面が真っ黒なまま表示されなくなる、もしくは表示に長い時間が掛かることがあります。xrdpのコードを追ったわけではないので断定はできませんが、

  • xrdp接続を受け付けるxrdpサービスの下にxrdpプロセスが複数溜まっている
  • xrdpプロセスの接続相手がネットワーク的に不通

だとこの症状が発生するようです。このとき接続先サーバー(Ubuntu 24.04 LTSを使用)のプロセス一覧を見るとxrdpのセッションを維持していると思われるプロセスが残っています。

サーバー(xrdp)マシンのプロセス一覧
  |-xrdp,1812,xrdp   ★★サービス
      `-xrdp,1187497 ★★配下にxrdpが残っている
  `-xrdp-sesman,1756
      `-xrdp-sesman,2791
          |-Xorg,2809,katsuhiro :10 -auth .Xauthority -config xrdp/xorg.conf -noreset -nolisten tcp -logfile .xorgxrdp.%s.log

この状態にハマってfreerdpなどクライアント側の画面が出ない状態になったら、接続先のサーバーマシンのプロセス一覧を調べ、xrdpサービス配下に溜まっているxrdpサーバープロセスをkillコマンドで強制的に終了させると画面がすぐ表示されるはずです。

終了対象のxrdpプロセス
  |-xrdp,1812,xrdp   ★★サービスは終了させてはだめ
      `-xrdp,1187497 ★★配下にxrdpが残っていたら終了させる
  `-xrdp-sesman,1756
      `-xrdp-sesman,2791
          |-Xorg,2809,katsuhiro :10 -auth .Xauthority -config xrdp/xorg.conf -noreset -nolisten tcp -logfile .xorgxrdp.%s.log

注意点はなんだろな?強いて言えば、xrdpサービスやxrdp-sesmanサービスを終了させないようにするくらいでしょうか。間違ってxrdpサービスを止めてしまうと、サーバー側のリモートデスクトップ環境で起動していたアプリケーションも終了してしまい、場合によっては変な状態で残って動かなくなったりします。

編集者:すずき(2025/04/15 22:48)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2025年4月7日

udevルールのマイナーな方

目次: Linux

最近udevを少しいじっていたので忘れないうちにメモします。DebianやUbuntuですとudevの設定ルールファイル(*.rules)の配置は、

  • /usr/lib/udev/rules.d
  • /etc/udev/rules.d

です。後者は有名なので知っていましたけど、前者を知ったのは最近でした。きっかけは/etc/udev/rules.dに一切記述がないのに、udevがパーミッションを設定しているデバイスファイルを見かけたことです。誰がどこで設定しているのか?を探して、前者の/usr/lib/udev/rules.dの存在に気づきました。

存在に気づいてからinfo udevを読んでみると、当り前ですけどちゃんとルールファイルの置き場が書いてあり、先ほどの2つだけでなく、

  • /usr/lib/udev/rules.d
  • /usr/local/lib/udev/rules.d
  • /etc/udev/rules.d
  • /run/udev/rules.d: 一時的な設定ファイルを置く場所

この4つのディレクトリだよと書いてありました。知らなんだ。

udevのイベントの確認方法

あまりudevの設定をデバッグする人は居なさそうですけど、udev設定のデバッグ時はudevが何のイベントとデバイス属性を検知したか?を知る必要があります。知る方法は簡単で、

udevのイベント、デバイス属性の確認コマンド
# udevadm monitor -p

を実行するだけです。例えば私のマシンでttyS0のイベントを見ると、こんな表示になります。

udevadm monitorの表示例
KERNEL[3314156.538635] change   /devices/pnp0/00:04/00:04:0/00:04:0.0/tty/ttyS0 (tty)
ACTION=change
DEVPATH=/devices/pnp0/00:04/00:04:0/00:04:0.0/tty/ttyS0
SUBSYSTEM=tty
SYNTH_UUID=0
DEVNAME=/dev/ttyS0
SEQNUM=8729
MAJOR=4
MINOR=64

ACTION=の部分がイベントの種類です。udevを使う人に用があるイベントはaddかchangeでしょう。

続きはまた後日。

編集者:すずき(2025/04/16 00:14)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 2025年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報