You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Arch Linux的RDP远程桌面Docker配置故障求助

问题:Arch Linux Docker容器中XRDP无法加载XFCE桌面环境

需求

  • 基于轻量Arch Linux的远程桌面系统
  • 使用RDP协议,支持Windows设备登录
  • 可运行任意窗口管理器(当前优先尝试XFCE4)
  • 通过Dockerfile或docker-compose实现

遇到的问题

容器可正常启动,能通过XRDP登录指定用户,但无法加载桌面环境。已尝试谷歌搜索、Bing Chat及ChatGPT等方式,均未解决。

原Dockerfile

# Use the official Arch Linux base image
FROM archlinux:latest

# Update the package repository and install necessary packages
RUN pacman -Syu --noconfirm && pacman -S --noconfirm \
    xorg-server \
    xorg-xinit \
    xterm \
    sed \
    sudo

# Get Requirements for building xrdp
RUN pacman -S --noconfirm git base-devel nasm check fuse libfdk-aac ffmpeg imlib2

# Now make temp user to install - root won't be allowed to 
RUN useradd -m -p $(echo "installnow" | openssl passwd -1 -stdin) installer

# Switch to installer and change into installers home directory
USER installer
WORKDIR /home/installer

# Get yay change into yay dir and make package
RUN git clone https://aur.archlinux.org/xrdp.git
WORKDIR xrdp
RUN makepkg 

# Switch back to root for installation
USER root
WORKDIR /home/installer/xrdp

# have to install built package using pacman - because installation will fail without privileges (duh)
RUN pacman -U --noconfirm *.tar.zst

# Make sure xrdp uses 0.0.0.0 instead of default 127.0.0.1
RUN sed -i 's/127.0.0.1/0.0.0.0/g' /etc/xrdp/xrdp.ini /etc/xrdp/sesman.ini

# Generate a random 16-character alphanumeric password for root
RUN root_password=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16) && \
    echo "root:${root_password}" | chpasswd

# Add a dedicated user and set a password
RUN useradd -m rduser
RUN echo "rduser:secret12345" | chpasswd
RUN usermod -aG wheel rduser

# Create an Xinitrc file for starting the Xorg session
RUN echo "exec startxfce4" > /home/rduser/.xinitrc

# Set permissions for the rduser user
RUN chown rduser:rduser /home/rduser/.xinitrc

# Expose the RDP port (3389)
EXPOSE 3389

# Start xRDP and Xorg when the container runs
CMD ["xrdp", "-n"]

宿主机信息

Distributor ID: Ubuntu
Description:    Ubuntu 22.04.3 LTS
Release:        22.04                                                           
Codename:       jammy

5.15.0-83-generic x86_64

解决方案

针对无法加载桌面环境的问题,对原Dockerfile做以下关键修改:

  1. 安装XFCE4桌面环境
    原Dockerfile未安装XFCE4核心组件,需在pacman安装列表中添加xfce4及可选的xfce4-goodies(包含常用桌面工具)。

  2. 修复XRDP会话启动逻辑
    XRDP默认通过/etc/xrdp/startwm.sh启动桌面环境,而非用户的.xinitrc。需创建并配置该脚本,确保正确调用XFCE4。

  3. 改进XRDP编译流程
    给makepkg添加--noconfirm参数避免交互,同时清理编译文件减少镜像体积。

  4. 调整容器启动命令
    需同时启动xrdp-sesman(会话管理服务)和xrdp,确保会话正常建立。

修改后的Dockerfile

# Use the official Arch Linux base image
FROM archlinux:latest

# Update system and install core dependencies
RUN pacman -Syu --noconfirm && pacman -S --noconfirm \
    xorg-server \
    xorg-xinit \
    xterm \
    sed \
    sudo \
    xfce4 \
    xfce4-goodies

# Install build dependencies for xrdp
RUN pacman -S --noconfirm git base-devel nasm check fuse libfdk-aac ffmpeg imlib2

# Create temporary user for AUR builds
RUN useradd -m installer && echo "installer:installnow" | chpasswd && usermod -aG wheel installer
RUN echo "%wheel ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

# Build and install xrdp from AUR
USER installer
WORKDIR /home/installer
RUN git clone https://aur.archlinux.org/xrdp.git
WORKDIR xrdp
RUN makepkg --noconfirm --syncdeps

# Install the built package
USER root
RUN pacman -U --noconfirm /home/installer/xrdp/*.tar.zst

# Clean up build files to reduce image size
RUN rm -rf /home/installer/xrdp /home/installer/.cache

# Configure xrdp to listen on all interfaces
RUN sed -i 's/127.0.0.1/0.0.0.0/g' /etc/xrdp/xrdp.ini /etc/xrdp/sesman.ini

# Configure XRDP session to start XFCE4
RUN echo "#!/bin/bash" > /etc/xrdp/startwm.sh && \
    echo "startxfce4" >> /etc/xrdp/startwm.sh && \
    chmod +x /etc/xrdp/startwm.sh

# Create dedicated RDP user
RUN useradd -m rduser && echo "rduser:secret12345" | chpasswd && usermod -aG wheel rduser

# Expose RDP port
EXPOSE 3389

# Start xrdp-sesman and xrdp services
CMD ["bash", "-c", "xrdp-sesman & exec xrdp -n"]

运行命令

构建镜像并启动容器:

docker build -t arch-xrdp .
docker run -d -p 3389:3389 --name arch-rdp arch-xrdp

之后即可使用Windows远程桌面连接,输入宿主机IP、用户名rduser和密码secret12345登录,即可加载XFCE4桌面环境。

内容的提问来源于stack exchange,提问作者JoW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 03:00:04