我目前正在研究在 Docker 容器中运行桌面环境(XFCE4)的可能性。目的是为 VHDL 创建一个独立的开发环境,便于学生安装和设置。
我的 XFCE4 映像基于 X11docker dockerfiles,到目前为止它在单窗口模式下工作。我想要实现的是能够使用这个具有多个由 vcxsrv 创建的屏幕的容器。X 服务器的运行可以由用户完成,因为它取决于个人偏好和屏幕数量。我想知道如何启动 XFCE4 并让它自动生成一个跨越所有屏幕的虚拟桌面并将其划分。
我的猜测是使用 xrandr 和 Arandr 来实现这一点,但不知何故,我的容器无法识别 X 显示器上的多个屏幕。尽管我在容器中所做的一切实际上都镜像到了所有屏幕。
我正在使用以下命令启动 X 服务器:
.\vcxsrv.exe -wgl -keyhook +xinerama -ac -screen 0 @1 -screen 1 @2 -screen 2 @3 -screen 3 @4
这是我从 xrandr 得到的输出:
root@docker-desktop:/# xrandr --listactivemonitors
Monitors: 1
0: +*default 1920/503x1017/264+0+0 default
root@docker-desktop:/# xrandr --listmonitors
Monitors: 1
0: +*default 1920/503x1017/264+0+0 default
root@docker-desktop:/# xrandr --prop
Screen 0: minimum 0 x 0, current 1920 x 1017, maximum 32767 x 32767
default connected primary 1920x1017+0+0 503mm x 264mm
non-desktop: 0
supported: 0, 1
1920x1017 0.00*
我的 Dockerfile:
FROM debian:buster
RUN apt-get update && apt-mark hold iptables && \
env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
dbus-x11 \
xdg-utils \
x11-utils \
&& env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
gtk2-engines-xfce \
gtk3-engines-xfce \
libxfce4ui-utils \
thunar \
xfce4-session \
xfce4-settings \
xfdesktop4 \
xfwm4 \
xfce4-terminal \
arandr \
&& env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
libgtk-3-bin \
mousepad \
&& env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
libxv1 \
&& sed -i 's%<property name="ThemeName" type="string" value="Xfce"/>%<property name="ThemeName" type="string" value="Raleigh"/>%' /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml \
&& env DEBIAN_FRONTEND=noninteractive apt-get remove -y --no-install-recommends xdg-utils
CMD ["startxfce4"]
据我了解,vcxsrv 创建了一个 X 显示。X 显示器可以包含多个屏幕。为什么我的 Docker 容器中的软件无法识别显示中的其他屏幕?我错过了什么?