はじめに
xrdpを使ったリモートデスクトップ環境をセットアップしたので、そのメモ。
環境
- Manjaro Linux Mate (17.0)
- テスト用のためFW設定は省略
ソフトウェアバージョン
- xrdp 0.9.2-1 (AUR)
- AURで提供されているので、yaourtなどで入れる。
- xorgxrdp 0.2.1
- まだAURには登録されていなかったので、 xorgxrdpからインストール。
WMを起動できないとき、xrdpはxtermを起動する設定になっているので、xtermも入れておくと問題の解決に役立つかもしれない。
インストール直後の状態
xrdp.service
と xrdp-sesman.service
は実行できる状態だが、実際に接続してもデスクトップ画面は現れない。順をおって解決していく。
Xorg.Wrapを動くようにする
デスクトップ画面が出ない状態でプロセス一覧を見ると、Xorg.wrap
が止まったままになっている。どうも正しい権限で実行できていないようにみえるので、以下のような設定ファイルを作成してやる。
allowed_users=anybody
needs_root_rights=auto
pam.dの修正
接続してみると、今度はDBus関連のエラーが表示されてしまう。startwm.sh
のタイミングですでにDBus関連の環境変数が落ちてしまっているので、xrdpのIssue情報を元に修正をする。
auth include system-remote-login
account include system-remote-login
password include system-remote-login
session include system-remote-login
これでstartwm.sh
にいくつかの環境変数が渡るようになる。
.xinitrcの修正
上記修正をしても、まだDBusのエラーが表示されてしまう。実際には、Manjaro Linux MATE版は.xinitrc
でdbus-launch
が走るようになっているのだが、これが正しく動いていない様子。調べたところ、--exit-with-session
がなければ動作するようであった。
get_session(){
- local dbus_args=(--sh-syntax --exit-with-session)
+ local dbus_args=(--sh-syntax)
case $1 in
awesome) dbus_args+=(awesome) ;;
bspwm) dbus_args+=(bspwm-session) ;;
budgie) dbus_args+=(budgie-desktop) ;;
cinnamon) dbus_args+=(cinnamon-session) ;;
deepin) dbus_args+=(startdde) ;;
enlightenment) dbus_args+=(enlightenment_start) ;;
fluxbox) dbus_args+=(startfluxbox) ;;
gnome) dbus_args+=(gnome-session) ;;
i3|i3wm) dbus_args+=(i3 --shmlog-size 0) ;;
jwm) dbus_args+=(jwm) ;;
kde) dbus_args+=(startkde) ;;
lxde) dbus_args+=(startlxde) ;;
lxqt) dbus_args+=(lxqt-session) ;;
mate) dbus_args+=(mate-session) ;;
xfce) dbus_args+=(xfce4-session) ;;
openbox) dbus_args+=(openbox-session) ;;
*) dbus_args+=($DEFAULT_SESSION) ;;
esac
echo "dbus-launch ${dbus_args[*]}"
}
exec $(get_session)
番外編: NVIDIA GPUでxorgxrdpが読まれるようにする
video-nvidia を使っている場合、mhwdのxorg.conf(/etc/X11/xorg.conf.d/90-mhwd.conf)が読まれてしまい、xorgxrdpが読まれないことがある。幸い、sesman.iniからXorgへオプションを渡すことができるので、/etc/xrdp/sesman.iniを以下のように修正することで回避する。
[Xorg]
param=Xorg
param=-config
param=xrdp/xorg.conf
param=-noreset
param=-nolisten
param=tcp
param=-logfile
param=.xorgxrdp.%s.log
+param=-layout
+param=X11 Server