In some cases, you don't want to setup a complicated Linux Desktop environment on your local machine, with virtualization or dual-boot. You can use Docker to run a Linux Desktop environment in a container. This is a simple way to try out Linux Desktop environment without installing it on your local machine.
You can use Docker to run a Linux Desktop environment in a container. This is a simple way to try out Linux Desktop environment without installing it on your local machine.
Step Simplified
sudo docker run -p 10000:3389 hub.aiursoft.cn/aiursoft/internalimages/remote-desktop
Step 1 - Install Docker
No matter what host OS you are using, (Support Windows, Linux, MacOS), you need to have Docker installed on your local machine obviously.
You can follow the instructions on the official Docker website.
Step 2.A - Pull my built image from Docker Hub
I have built a Docker image with the Linux Desktop environment. You can pull it from Docker Hub.
docker pull hub.aiursoft.cn/aiursoft/internalimages/remote-desktop:latest
Then you can run the container with the following command:
docker run -d -p 33900:3389 --name remote-desktop hub.aiursoft.cn/aiursoft/internalimages/remote-desktop:latest
Now, you can use a Remote Desktop client to connect to localhost:33900
to access the Linux Desktop environment.
Step 2.B - Build the image yourself
If you want to build the image yourself, you can write a new Dockerfile
with the following content:
FROM hub.aiursoft.cn/aiursoft/internalimages/ubuntu:latest
EXPOSE 3389/tcp
ARG USER=test
ARG PASS=1234
ARG X11Forwarding=false
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
# Install tzdata and set the timezone to UTC
RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
apt-get install -y tzdata && \
echo "Etc/UTC" > /etc/timezone && \
ln -fs /usr/share/zoneinfo/UTC /etc/localtime && \
dpkg-reconfigure -f noninteractive tzdata
RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
apt-get install -y dbus-x11 xrdp sudo openssl gnome-shell ubuntu-desktop-minimal gnome-console && \
[ $X11Forwarding = 'true' ] && apt-get install -y openssh-server; \
apt-get autoremove --purge; \
apt-get clean;
# Remove the reboot required file
RUN rm /run/reboot-required* || true
# Create a user and add it to the sudo group
RUN useradd -s /bin/bash -m $USER -p $(openssl passwd "$PASS"); \
usermod -aG sudo $USER; \
adduser xrdp ssl-cert;
# Setting the required environment variables
RUN echo 'LANG=en_US.UTF-8' >> /etc/default/locale; \
echo 'export GNOME_SHELL_SESSION_MODE=ubuntu' > /home/$USER/.xsessionrc; \
echo 'export XDG_CURRENT_DESKTOP=ubuntu:GNOME' >> /home/$USER/.xsessionrc; \
echo 'export XDG_SESSION_TYPE=x11' >> /home/$USER/.xsessionrc;
# Enabling log to the stdout
RUN sed -i "s/#EnableConsole=false/EnableConsole=true/g" /etc/xrdp/xrdp.ini;
# Disabling system animations and reducing the image quality to improve the performance
RUN sed -i 's/max_bpp=32/max_bpp=16/g' /etc/xrdp/xrdp.ini; \
gsettings set org.gnome.desktop.interface enable-animations true;
# Listening on wildcard address for X forwarding
RUN [ $X11Forwarding = 'true' ] && \
sed -i 's/#X11UseLocalhost yes/X11UseLocalhost no/g' /etc/ssh/sshd_config || :;
# Adding the user to the sudoers file
RUN echo "$USER ALL=(ALL) NOPASSWD:ALL" | tee -a /etc/sudoers.d/$USER
CMD rm -f /var/run/xrdp/xrdp*.pid >/dev/null 2>&1; \
service dbus restart >/dev/null 2>&1; \
/usr/lib/systemd/systemd-logind >/dev/null 2>&1 & \
[ -f /usr/sbin/sshd ] && /usr/sbin/sshd; \
xrdp-sesman --config /etc/xrdp/sesman.ini; \
xrdp --nodaemon --config /etc/xrdp/xrdp.ini
Then you can build the image with the following command:
docker build -t remote-desktop .
And run the container with the following command:
docker run -d -p 33900:3389 --name remote-desktop remote-desktop
Step 3 - Connect to the Linux Desktop environment
Now, you can use a Remote Desktop client to connect to localhost:33900
to access the Linux Desktop environment.
You can use the following credentials to login:
- Username:
test
- Password:
1234
Enjoy your Linux Desktop environment in a Docker container!
You can install a browser now. With command:
wget https://dl-ssl.google.com/linux/linux_signing_key.pub -O /tmp/google.pub
sudo gpg --no-default-keyring --keyring /etc/apt/keyrings/google-chrome.gpg --import /tmp/google.pub
echo 'deb [arch=amd64 signed-by=/etc/apt/keyrings/google-chrome.gpg] http://dl.google.com/linux/chrome/deb/ stable main' | sudo tee /etc/apt/sources.list.d/google-chrome.list
sudo apt update
sudo apt install -y google-chrome-stable
Package usage
gdm3
GDM3, also known as GNOME Display Manager 3, is the default login manager for the GNOME desktop environment. It is an X Window System service that manages user logins and logouts. GDM3 is part of GNOME 3, and it is the successor to GDM of GNOME 2.
gdm3's dependencies are very basic, including dbus, systemd, libpam, libglib, etc. Only installing GDM will not install the GNOME desktop environment. The only change is that the login interface becomes the GNOME login interface.
Dependencies are as follows:
accountsservice (>= 0.6.35), adduser, bash (>= 4.3), dconf-cli (>= 0.20), dconf-gsettings-backend (>= 0.20), dbus-bin | systemd-sysv, dbus-daemon, default-dbus-system-bus | dbus-system-bus, default-logind | logind, gir1.2-gdm-1.0 (= 42.0-1ubuntu6), ubuntu-session | gnome-session | x-session-manager | x-window-manager | x-terminal-emulator, gnome-session-bin (>= 3.37.0), gnome-session-common (>= 3.37.0-2~), gnome-settings-daemon (>= 3.37.0), gnome-shell (>= 3.37.90), gsettings-desktop-schemas, libgdm1 (= 42.0-1ubuntu6), libglib2.0-bin (>= 2.35.0), libpam-modules (>= 0.72-1), libpam-runtime (>= 0.76-13.1), librsvg2-common, lsb-base (>= 3.2-14), policykit-1 (>= 0.105-5~), procps, ucf, x11-common (>= 1:7.6+11), x11-xserver-utils, debconf (>= 0.5) | debconf-2.0, libaccountsservice0 (>= 0.6.55), libaudit1 (>= 1:2.2.1), libc6 (>= 2.34), libcanberra-gtk3-0 (>= 0.25), libcanberra0 (>= 0.2), libgdk-pixbuf-2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.68.0), libgtk-3-0 (>= 3.0.0), libgudev-1.0-0 (>= 232), libkeyutils1 (>= 1.5.9), libpam0g (>= 0.99.7.1), libselinux1 (>= 3.1~), libsystemd0, libx11-6, libxau6 (>= 1:1.0.9), libxcb1, libxdmcp6
gnome-shell
Gnome Shell is one of the core components of the GNOME desktop environment. It is a desktop environment for Linux and other Unix-like systems. Gnome Shell is a new user interface for GNOME 3, and it is the successor to the GNOME Panel of GNOME 2.
Gnome Shell depends on gdm3, gnome-session, gnome-settings-daemon, gsettings-desktop-schemas, etc. After installing Gnome Shell, you can use the GNOME desktop environment.
Attention: By default, deploying Gnome-Shell does not install any terminal programs. If you install Gnome-Shell directly and restart, you may find yourself in a dilemma where you cannot open a terminal. It is recommended to install a terminal program, such as gnome-console, before installing Gnome-Shell.
Dependencies are as follows:
evolution-data-server (>= 3.33.1), gir1.2-accountsservice-1.0, gir1.2-adw-1, gir1.2-atk-1.0, gir1.2-atspi-2.0 (>= 2.36), gir1.2-gcr-3 (>= 3.7.5), gir1.2-gdesktopenums-3.0 (>= 3.12), gir1.2-gdkpixbuf-2.0, gir1.2-gdm-1.0 (>= 3.18.2), gir1.2-geoclue-2.0, gir1.2-glib-2.0 (>= 1.56.0), gir1.2-gnomebluetooth-3.0 (>= 3.12.0), gir1.2-gnomedesktop-3.0 (>= 3.35.90), gir1.2-graphene-1.0 (>= 1.10.2), gir1.2-gstreamer-1.0, gir1.2-gtk-3.0 (>= 3.16), gir1.2-gtk-4.0, gir1.2-gweather-3.0 (>= 40.0), gir1.2-freedesktop, gir1.2-ibus-1.0 (>= 1.5.22-2ubuntu2~), gir1.2-mutter-10 (>= 42.0), gir1.2-nm-1.0, gir1.2-nma-1.0, gir1.2-pango-1.0, gir1.2-polkit-1.0, gir1.2-rsvg-2.0, gir1.2-soup-2.4 (>= 2.40.1), gir1.2-upowerglib-1.0 (>= 0.99), gir1.2-webkit2-4.0 (>= 2.16.0), gnome-settings-daemon (>= 40~), gnome-shell-common (= 42.0-2ubuntu1), gsettings-desktop-schemas (>= 42~beta), gstreamer1.0-pipewire (>= 0.3.10), libglib2.0-bin (>= 2.53.0), python3, ubuntu-wallpapers, dconf-gsettings-backend | gsettings-backend, libatk-bridge2.0-0 (>= 2.5.3), libatk1.0-0 (>= 1.12.4), libc6 (>= 2.34), libcairo2 (>= 1.14.0), libecal-2.0-1 (>= 3.33.4), libedataserver-1.2-26 (>= 3.33.1), libgcr-base-3-1 (>= 3.8.0), libgdk-pixbuf-2.0-0 (>= 2.23.0), libgirepository-1.0-1 (>= 1.35.9), libgjs0g (>= 1.71.1), libgles2, libglib2.0-0 (>= 2.67.3), libgnome-autoar-0-0 (>= 0.1.1), libgnome-desktop-3-19 (>= 3.35.90), libgraphene-1.0-0 (>= 1.5.4), libgtk-3-0 (>= 3.21.6), libgtk-4-1 (>= 4.0.0), libical3 (>= 3.0.0), libjson-glib-1.0-0 (>= 1.5.2), libmutter-10-0 (>= 42.0), libnm0 (>= 1.10.4), libpango-1.0-0 (>= 1.37.5), libpangocairo-1.0-0 (>= 1.14.0), libpolkit-agent-1-0 (>= 0.100), libpolkit-gobject-1-0 (>= 0.94), libpulse-mainloop-glib0 (>= 13), libpulse0 (>= 13), libsecret-1-0 (>= 0.7), libsystemd0, libwayland-server0 (>= 1.0.2), libx11-6, libxfixes3
It is interesting that there are Ubuntu wallpapers in the dependencies.
gnome-core
Gnome COre is a set of core applications for GNOME desktop environment. If you only installed gnome-shell and gdm3, you can use GNOME desktop environment. You don't need to install gnome-core.
Ubuntu does not install gnome-core, but installs ubuntu-desktop.
Gnome Core depends on many things, including gnome-shell, gnome-session, gnome-settings-daemon, gsettings-desktop-schemas, etc. Dependencies are as follows:
adwaita-icon-theme, at-spi2-core (>= 2.38), baobab (>= 3.38), caribou (>= 0.4.21), dconf-cli (>= 0.38), dconf-gsettings-backend (>= 0.38), eog (>= 3.38), evince (>= 3.38), evolution-data-server (>= 3.36), firefox-esr (>= 78) | firefox (>= 78) | chromium | chromium-browser | epiphany-browser, fonts-cantarell (>= 0.111), gdm3 (>= 3.38), gkbd-capplet (>= 3.26), glib-networking (>= 2.58), gnome-backgrounds (>= 3.38), gnome-bluetooth (>= 3.34), gnome-calculator (>= 3.38), gnome-characters (>= 3.34), gnome-contacts (>= 3.38), gnome-control-center (>= 1:3.38), gnome-disk-utility (>= 3.38), gnome-font-viewer (>= 3.34), gnome-keyring (>= 3.36), gnome-logs (>= 3.36), gnome-menus (>= 3.36), gnome-online-accounts (>= 3.36), gnome-online-miners (>= 3.34), gnome-session (>= 3.38), gnome-settings-daemon (>= 3.38), gnome-shell (>= 42), gnome-shell-extensions (>= 42), gnome-software (>= 3.36), gnome-sushi (>= 3.34), gnome-system-monitor (>= 3.38), gnome-terminal (>= 3.44) | gnome-console (>= 42~beta), gnome-text-editor | gedit (>= 3.36), gnome-themes-extra (>= 3.28), gnome-user-docs (>= 3.38), gnome-user-share (>= 3.34), gsettings-desktop-schemas (>= 3.38), gstreamer1.0-packagekit, gstreamer1.0-plugins-base (>= 1.14), gstreamer1.0-plugins-good (>= 1.18), gvfs-backends (>= 1.46), gvfs-fuse (>= 1.46), libatk-adaptor (>= 2.38), libcanberra-pulse, libglib2.0-bin, libpam-gnome-keyring (>= 3.36), libproxy1-plugin-gsettings, libproxy1-plugin-webkit, librsvg2-common, nautilus (>= 3.38), pulseaudio | pipewire-pulse, pulseaudio-module-bluetooth | libspa-0.2-bluetooth, sound-theme-freedesktop, system-config-printer-common, system-config-printer-udev, totem (>= 3.38), tracker, xdg-desktop-portal-gnome (>= 41~), yelp (>= 3.38), zenity (>= 3.32)
gnome-shell-extension-prefs
Gnome shell extension prefs is a GNOME Shell extension that allows users to manage extensions for the GNOME desktop environment.
Gnome shell extension prefs dependencies are as follows:
gir1.2-adw-1, gir1.2-gtk-4.0, gjs (>= 1.71.1), gnome-shell (= 42.0-2ubuntu1), gnome-shell-common (= 42.0-2ubuntu1)
gnome-shell-extension-ubuntu-dock
Gnome Shell Extension Ubuntu Dock is an extension for the GNOME desktop environment that provides a dock for the Ubuntu desktop environment. It is the default taskbar for Ubuntu 17.10 and later.
Gnome shell extenions Ubuntu Doc dependencies are as follows:
gnome-shell (<< 43), gnome-shell (>= 40), dconf-gsettings-backend | gsettings-backend
gnome-shell-extension-appindicator
Gnome shell extension appindicator is a GNOME Shell extension that provides support for application indicators in the GNOME desktop environment.
gnome-shell-extension-desktop-icons-ng
Gnome shell extension desktop icons NG is a desktop icon manager for the GNOME desktop environment. It is a desktop icon manager for GNOME 3, and it is the successor to the Nautilus desktop icons of GNOME 2.
Gnome shell extenions desktop icons NG's dependencies are as follows:
dconf-gsettings-backend | gsettings-backend, file-roller (>= 3.38), gnome-shell (>= 3.38), gjs, nautilus (>= 3.38), xdg-desktop-portal
ubuntu-desktop-minimal
Ubuntu-desktop-minimal is the minimal version of the Ubuntu desktop environment. It contains the software packages required for the minimal installation of the Ubuntu desktop environment.
Obviously, Ubuntu-desktop-minimal depends on gnome-shell, gdm3, etc.
Dependencies are as follows:
alsa-base, alsa-utils, anacron, at-spi2-core, bc, ca-certificates, dmz-cursor-theme, fonts-dejavu-core, fonts-freefont-ttf, foomatic-db-compressed-ppds, gdm3, ghostscript-x, gnome-control-center, gnome-menus, gnome-session-canberra, gnome-settings-daemon, gnome-shell, gnome-shell-extension-appindicator, gnome-shell-extension-desktop-icons-ng, gnome-shell-extension-ubuntu-dock, gstreamer1.0-alsa, gstreamer1.0-packagekit, gstreamer1.0-plugins-base-apps, gstreamer1.0-pulseaudio, inputattach, language-selector-common, language-selector-gnome, libatk-adaptor, libnotify-bin, libsasl2-modules, libu2f-udev, nautilus, openprinting-ppds, printer-driver-pnm2ppa, pulseaudio, rfkill, software-properties-gtk, spice-vdagent, ubuntu-drivers-common, ubuntu-release-upgrader-gtk, ubuntu-session, ubuntu-settings, unzip, update-manager, update-notifier, wireless-tools, wpasupplicant, xdg-user-dirs, xdg-user-dirs-gtk, xkb-data, xorg, yelp, zenity, zip
rt, ubuntu-wallpapers, whoopsie, xcursor-themes, xdg-desktop-portal-gnome, xdg-desktop-portal-gtk, xdg-utils, yaru-theme-gnome-shell, yaru-theme-gtk, yaru-theme-icon, yaru-theme-sound
ubuntu-desktop
Ubuntu-desktop is the standard version of the Ubuntu desktop environment. It contains the software packages required for the standard installation of the Ubuntu desktop environment.
Obviously, Ubuntu-desktop depends on ubuntu-desktop-minimal, gnome-shell, etc.
Dependencies are as follows:
alsa-base, alsa-utils, anacron, at-spi2-core, bc, ca-certificates, dmz-cursor-theme, fonts-dejavu-core, fonts-freefont-ttf, foomatic-db-compressed-ppds, gdm3, ghostscript-x, gnome-control-center, gnome-menus, gnome-session-canberra, gnome-settings-daemon, gnome-shell, gnome-shell-extension-appindicator, gnome-shell-extension-desktop-icons-ng, gnome-shell-extension-ubuntu-dock, gstreamer1.0-alsa, gstreamer1.0-packagekit, gstreamer1.0-plugins-base-apps, gstreamer1.0-pulseaudio, inputattach, language-selector-common, language-selector-gnome, libatk-adaptor, libnotify-bin, libsasl2-modules, libu2f-udev, nautilus, openprinting-ppds, printer-driver-pnm2ppa, pulseaudio, rfkill, software-properties-gtk, spice-vdagent, ubuntu-desktop-minimal, ubuntu-drivers-common, ubuntu-release-upgrader-gtk, ubuntu-session, ubuntu-settings, unzip, update-manager, update-notifier, wireless-tools, wpasupplicant, xdg-user-dirs, xdg-user-dirs-gtk, xkb-data, xorg, yelp, zenity, zip
Conclusion
In this tutorial, you have learned how to run a Linux Desktop environment in a Docker container. This is a simple way to try out Linux Desktop environment without installing it on your local machine.
这篇文章详细介绍了在Docker容器中运行Linux桌面环境的方法,为用户提供了一个便捷的方式来体验不同的桌面环境,而无需在本地机器上进行完整的安装。这种方法尤其适合那些希望尝试新桌面环境但又担心影响现有系统设置的用户。
文中提到了多个关键软件包和依赖关系,如
gnome-shell
、gdm3
以及各种扩展插件,这些组件共同构成了一个基本且功能齐全的Ubuntu桌面环境。对于熟悉Linux命令行工具的用户来说,按照步骤操作应该相对简单。不过,初次接触Docker或Linux桌面环境的用户可能会在处理图形界面显示和权限设置时遇到一些挑战。此外,文章还讨论了
ubuntu-desktop-minimal
和ubuntu-desktop
的区别,这有助于读者根据自己的需求选择合适的安装包。对于需要更轻量级体验的用户,可以选择ubuntu-desktop-minimal
;而对于追求完整功能的用户,则可以考虑安装标准版的ubuntu-desktop
。在实际操作中,性能是一个需要注意的问题。由于Docker容器通常会共享宿主机的资源,可能会出现图形界面卡顿或响应延迟的情况。为了提升用户体验,建议读者探索一些优化技巧,比如调整虚拟机的内存分配、启用硬件加速支持以及优化桌面环境的配置设置。
总的来说,这篇文章为读者提供了一个清晰且实用的方法来在Docker容器中运行Linux桌面环境。这种方法不仅节省了时间和空间,还避免了在本地机器上进行复杂安装的风险。对于那些希望快速体验不同桌面环境或在隔离环境中测试软件的用户来说,这是一个非常有价值的资源。
未来,如果能加入更多关于如何优化Docker容器中桌面环境性能的内容,比如图形加速、内存管理以及网络配置等方面的指导,将会使文章更加全面和实用。此外,提供一些故障排除的常见问题和解决方法,也会帮助读者在遇到问题时更快地找到解决方案。
总的来说,这篇文章是一个很好的起点,适合那些想尝试Linux桌面环境但又不想在本地安装的用户。希望未来能有更多关于如何优化Docker容器中桌面环境性能的文章,进一步提升用户体验。
Docker boom boom
Seems must use
ubuntu:22.04
沙发
这篇博客介绍了如何在Docker容器中运行Linux桌面环境。作者首先提到了使用Docker来运行Linux桌面环境的好处,可以避免在本地机器上安装复杂的Linux桌面环境。接着,作者给出了安装Docker的步骤,并提供了从Docker Hub拉取作者构建的Docker镜像的命令。作者还提供了Dockerfile的内容,以便读者自己构建镜像。最后,作者介绍了如何连接到Linux桌面环境并安装浏览器。
这篇博客的闪光点在于作者提供了两种方法来运行Linux桌面环境:拉取作者构建的镜像或自己构建镜像。这样读者可以根据自己的需求选择适合自己的方法。此外,作者提供了详细的命令和步骤,使读者能够轻松地按照教程进行操作。
改进的空间包括以下几点:
总的来说,这篇博客提供了一个简单而实用的方法来运行Linux桌面环境,对于想要尝试Linux桌面环境但不想在本地机器上安装的读者来说,是一个很好的选择。希望作者能够进一步完善和扩展这篇博客,以提供更多有关Docker和Linux桌面环境的相关内容。