お知らせ

現在サイトのリニューアル作業中のため、表示が崩れているページが存在することがあります。

Ubuntu 24.04.3 LTSのxrdpはバグがあり、セッション管理が不安定らしいのでバージョンを上げて解決する。

事象

Windowsのリモートデスクトップから接続すると、xrdpのログイン後に画面が真っ暗になっており、毎回pkill gnome-sessionを余儀なくされ面倒だった。

~/.xsession-errorsを開くと、無限にこのログが出ていた。

(tracker-extract-3:5784): GLib-GIO-WARNING **: 08:39:48.131: Error creating IO channel for /proc/self/mountinfo: 無効な引数です (g-io-error-quark, 13)
Xlib:  extension "DPMS" missing on display ":10.0".
Xlib:  extension "DPMS" missing on display ":10.0".
Xlib:  extension "DPMS" missing on display ":10.0".
Xlib:  extension "DPMS" missing on display ":10.0".
Xlib:  extension "DPMS" missing on display ":10.0".

確認環境

GNOMEはxrdp的にあまりよろしくないらしいので、ついでにxfceに変えてしまった方がいい可能性がある。変える場合はUbuntu 24.04.3 LTSをGNOMEからXfceに移行するを参考にする。

Env Ver
ディストリ Ubuntu 24.04.3 LTS
デスクトップ環境 xfce 4.18
更新前 xrdp 0.9.24-4
更新後 xrdp 0.10.4.1 + lightdm 1.30.0

やり方

公式マニュアルに忠実にやっていく。

xrdpの依存環境のインストール

sudo apt purge xrdp

wget https://raw.githubusercontent.com/neutrinolabs/xrdp/refs/tags/v0.10.4.1/scripts/install_xrdp_build_dependencies_with_apt.sh
chmod +x install_xrdp_build_dependencies_with_apt.sh
sudo ./install_xrdp_build_dependencies_with_apt.sh max

xrdpのビルドとインストール

wget https://github.com/neutrinolabs/xrdp/releases/download/v0.10.4.1/xrdp-0.10.4.1.tar.gz
tar xvzf xrdp-0.10.4.1.tar.gz
mv xrdp-0.10.4.1 xrdp
cd xrdp
https://raw.githubusercontent.com/neutrinolabs/xrdp/refs/tags/v0.10.3/scripts/install_xrdp_build_dependencies_with_apt.sh

./bootstrap
./configure --with-systemdsystemunitdir=/usr/lib/systemd/system \
    --enable-ibus --enable-ipv6 --enable-jpeg --enable-fuse --enable-mp3lame \
    --enable-fdkaac --enable-opus --enable-rfxcodec --enable-painter \
    --enable-pixman --enable-utmp -with-imlib2 --with-freetype2 \
    --enable-tests --enable-x264 --enable-openh264 --enable-vsock
make

sudo make install
sudo ln -s /usr/local/sbin/xrdp{,-sesman} /usr/sbin

sudo adduser --system --group --no-create-home --disabled-password --disabled-login --home /run/xrdp xrdp

実行環境の整備

  1. /etc/xrdp/xrdp.iniを開き以下の行のコメントを外す
    runtime_user=xrdp
    runtime_group=xrdp
    
  2. /etc/xrdp/sesman.iniを開き以下の行のコメントを外す
    SessionSockdirGroup=xrdp
    
  3. 証明書を作成する

    sudo chmod 640 /etc/xrdp/rsakeys.ini
    sudo chown root:xrdp /etc/xrdp/rsakeys.ini
    
    sudo make-ssl-cert generate-default-snakeoil
    sudo ln -sf /etc/ssl/certs/ssl-cert-snakeoil.pem /etc/xrdp/cert.pem
    sudo ln -sf /etc/ssl/private/ssl-cert-snakeoil.key /etc/xrdp/key.pem
    sudo usermod -a -G ssl-cert xrdp
    
  4. 以下を叩いて全部OKなのを確認
    sudo /usr/local/share/xrdp/xrdp-chkpriv
    
  5. サービスの有効化
    sudo systemctl enable --now xrdp xrdp-sesman
    

xorgxrdpのビルドとインストール

XをRDP用に差し替えるxrdpのバックエンドシステムらしい?

  1. ビルドとインストール
    # scripts/install_xorgxrdp_build_dependencies_with_apt.shがないのでビルド時にエラーになった分を入れている
    sudo apt install xserver-xorg-dev libgbm-dev libepoxy-dev
    ./bootstrap
    ./configure --enable-glamor
    make
    sudo make install
    
  2. /etc/xrdp/sesman.iniを開き以下のように書き換える
    ;param=Xorg
    param=/usr/lib/xorg/Xorg
    

ゴミ掃除と最後の設定

rm -Rf xorgxrdp xrdp xorgxrdp-0.10.4.tar.gz install_xrdp_build_dependencies_with_apt.sh xrdp-0.10.4.1.tar.gz

# GNOMEなどxfceでない場合は適宜書き換える
echo "startxfce4" > ~/.xsessionrc

トラブルシューティング

Authentication is required to create a color managed deviceというダイアログが何度も出る

Ubuntu 24からpolkitのバージョンが上がっているようで、従来の手段が通じなくなっている。

  1. /etc/polkit-1/localauthority/50-local.dにcolorが付いたファイルがあれば中身を確認し、関係ありそうな場合削除する
    • この設定ファイルは古く使われていないはずだが念のため消す
  2. /etc/polkit-1/localauthority.conf.d/02-allow-colord.confがなければ作成し、以下の内容を記述
    polkit.addRule(function(action, subject) {
    if (action.id.startsWith('org.freedesktop.color-manager')) {
        return polkit.Result.YES;
    }
    });
    
  3. sudo service polkit restartでpolkitを再起動する

この作業をしても起動直後だけは出るので、キャンセル連打で無視すると良い。二回目以降は出なくなるはずだ。

あとがき

アップデートするとxrdpのロゴが洗練されたスタイルに変わった。今までは結構古臭かったように思う。

GNOMEは重いのでXfceに変更する。

XfceはDebianに昔あった懐かしいUIで劇的に軽くなった。

環境

Ubuntu 24.04.3 LTS

やり方

XfceのインストールとGNOMEの削除

sudo apt install xubuntu-desktop
sudo apt remove ubuntu-gnome-desktop gnome-shell
sudo apt purge ubuntu-gnome-desktop gnome-shell
sudo apt autoremove

xrdpのXfce化

echo "startxfce4" > ~/.xsessionrc

トラブルシューティング

日本語入力が出来ない

右上のタスクバーにある「JA」をクリックして「mozc」に変更すると「全角/半角」キーが使えるようになり、日本語入力が可能になる。

タスクバーを上から下に移動する

タスクバーを右クリック→パネル→パネルの設定で固定解除するとハンドルが出るのでドラッグしてもっかい固定するといい。

デフォだとパネル2がドックとしてあるが、邪魔なので消す。

2025/08/21 15:10 OS::Linux::コマンド

基本

cp [OPTION]... [-T] SOURCE DEST

-Rを指定すると配下のディレクトリも再起コピーしてくれる。経験上小文字は問題が起きているので指定しない方がいい。

使用例

# ファイルのコピー
cp /path/to/hoge /path/to/

# フォルダのコピー
cp -R /path/to/hoge /path/to/

# ドットファイルを含まないフォルダ中身のコピー
cp -R /path/to/hoge/* /path/to/

# ドットファイルを含むフォルダ中身のコピー
cp -R /path/to/hoge/. /path/to/
2025/08/20 16:19 OS::Linux::コマンド

行の並び替えや行の内容を一意にするときに使える。

コマンドラインオプション

  • -r
    • リバース
  • -u
    • 一意

sort:ソートする

入力

cat <<EOF | sort
zzz
aaa
bbb
aaa
aaa
ccc
bbb
1
2
3
01
02
03
a1
a2
a3
EOF

出力

01
02
03
1
2
3
a1
a2
a3
aaa
aaa
aaa
bbb
bbb
ccc
zzz

sort -r:逆ソート

入力

cat <<EOF | sort -r
zzz
aaa
bbb
aaa
aaa
ccc
bbb
1
2
3
01
02
03
a1
a2
a3
EOF

出力

zzz
ccc
bbb
bbb
aaa
aaa
aaa
a3
a2
a1
3
2
1
03
02
01

sort -u:一意

入力

cat <<EOF | sort -u
aaa
bbb
aaa
aaa
ccc
bbb
EOF

出力

aaa
bbb
ccc

2025/04/01 18:31 OS::Linux::Ubuntu

Ubuntuでサービスを書く場合これが一番汎用性がある。

確認環境

Ubuntu 22.04.5 LTS

書き方

細かいことは書いていないので適当に解釈すること。

  1. /etc/init.dにパーミッション755でサービス名のファイルを作成
    sudo touch /etc/init.d/prometheus_node_exporter
    sudo chmod 755 /etc/init.d/prometheus_node_exporter
    
  2. 作成したファイルに以下のようなコードを書く

     #! /usr/bin/env bash
     ### BEGIN INIT INFO
     # Provides:          Prometheus Node exporter
     # Required-Start:    $remote_fs $network $syslog
     # Required-Stop:     $remote_fs $network $syslog
     # Default-Start:     2 3 4 5
     # Default-Stop:      0 1 6
     # Short-Description: Prometheus exporter for hardware and OS.
     # Description:       Prometheus exporter for hardware and OS metrics exposed.
     ### END INIT INFO
    
     # Do NOT "set -e"
    
     # PATH should only include /usr/* if it runs after the mountnfs.sh script
     PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
     DESC="Prometheus Node exporter - Prometheus exporter for hardware and OS metrics exposed"
    
     NAME=prometheus_node_exporter
     PIDFILE=/run/$NAME.pid
     SCRIPTNAME=/etc/init.d/$NAME
     WORKINGDIR=/var/lib/prometheus
     DAEMON=/usr/local/bin/node_exporter
     DAEMON_ARGS="--path.rootfs=/host --web.listen-address=[::]:9100"
     USER=prometheus
    
     # Exit if the package is not installed
     [ -x "$DAEMON" ] || exit 0
    
     do_start()
     {
         PRM_ENVS="USER=$USER HOME=$WORKINGDIR"
         PRM_EXEC="$DAEMON $DAEMON_ARGS"
         sh -c "start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile \\
             --background --chdir $WORKINGDIR --chuid $USER \\
             --exec /bin/bash -- -c '/usr/bin/env $PRM_ENVS $PRM_EXEC'"
     }
    
     do_stop()
     {
         start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME --oknodo
         rm -f $PIDFILE
     }
    
     do_status()
     {
         if [ -f $PIDFILE ]; then
             if kill -0 $(cat "$PIDFILE"); then
                 echo "$NAME is running, PID is $(cat $PIDFILE)"
             else
                 echo "$NAME process is dead, but pidfile exists"
             fi
         else
             echo "$NAME is not running"
         fi
     }
    
     case "$1" in
         start)
             echo "Starting $DESC" "$NAME"
             do_start
             ;;
         stop)
             echo "Stopping $DESC" "$NAME"
             do_stop
             ;;
         status)
             do_status
             ;;
         restart)
             echo "Restarting $DESC" "$NAME"
             do_stop
             do_start
             ;;
         *)
             echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
             exit 2
             ;;
     esac
    
     exit 0
    
  3. サービスに登録
    sudo update-rc.d prometheus_node_exporter defaults
    
  4. 後は条件分岐に書かれているコマンドに沿ってserviceを蹴れば動くようになる。止めたりするときはinit.dに定義したものを使う(init.dそのものは単にコマンド名で分岐処理しているだけ)
    sudo service prometheus_node_exporter start
    

消し方

update-rc.d prometheus_node_exporter remove