Alpine with XFCE and VNC on a virtual machine

I was looking to create a light weight virtual machine with Graphical user interface for segmenting some of my internet browsing endeavors. I tested a couple of light weight Linux distros but ended up with just using Alpine Linux with XFCE as the Desktop Environment and VNC for remote access.  Once VNC access is configured, it can be used with Apache Guacamole.

You can watch the Video Walk through here :

Note: Other download options are available Here

  • Now Create a Virtual machine and select the ISO as the installation media. Select Linux, other 3.x kernel 64 bit as the options for the Virtual Machine.
  • We are going to perform a persistent installation. Once Alpine boots off the ISO, run setup.
setup-alpine

Note: Make sure to select sys for storage.

  • Follow the wizard and reboot when installation is complete.
  • Optionally, create sudo user, or add your existing user to Sudo group.
apk add sudo

export USER='yourUserName'

adduser -D $USER && echo "$USER ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/$USER && chmod 0440 /etc/sudoers.d/$USER

Install Desktop Environment (XFCE)

  • Uncomment the community repository from the file below:
vi /etc/apk/repositories
  • Install required packages.
apk update
setup-xorg-base xfce4 xfce4-terminal lightdm-gtk-greeter xfce4-screensaver dbus-x11 open-vm-tools-gtk faenza-icon-theme xf86-video-vmware xf86-input-mouse xf86-input-keyboard
  • Configure X-Window System
    Xorg -configure
    cp /root/xorg.conf.new /etc/X11/xorg.conf
  • Ensure Required services start on boot
    rc-service lightdm start
    rc-update add lightdm
    rc-update add open-vm-tools
  • Optional: Install Firefox and or Chrome
apk add firefox-esr
apk add chromium

Install and Configure VNC

  • Install pre-requisite packages and vnc
apk add --no-cache ca-certificates curl openssl sudo xvfb x11vnc xfce4 faenza-icon-theme bash

Ensure VNC starts at Boot

rc-update add local default
vi /etc/local.d/vnc.start
#!/bin/sh
nohup x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -loop -shared -forever -bg -auth /var/run/lightdm/root/:0 -rfbport 5900 -o /var/log/vnc.log > /dev/null 2>&1 &
    chmod +x /etc/local.d/vnc.start

Now you should be able to access Alpine Linux with any VNC Viewer.

Systemd startup script

[Unit]
After=display-manager.service
Description=x11vnc VNC Server for X11
Requires=display-manager.service

[Service]
# For GDM {
# ExecStart=x11vnc -auth /var/lib/gdm/:0.Xauth -bg -display :0 -forever
# or (replace gdm uid)
# ExecStart=x11vnc -auth /run/user/120/gdm/Xauthority -bg -display :0 -forever
# }
# For Lightdm {
# ExecStart=x11vnc -auth /var/run/lightdm/root/:0 -bg -display :0 -forever
# }
# For LXDM {
# ExecStart=x11vnc -auth /var/run/lxdm/lxdm-:0.auth -bg -display :0 -forever
# }
# For SDDM {
ExecStart=x11vnc -auth $SDDMXAUTH -bg -display :0 -forever
ExecStartPre=bash -c "systemctl set-environment SDDMXAUTH=$(find /var/run/sddm -type f)"
# }
# For SLIM {
# ExecStart=x11vnc -auth /var/run/slim.auth -bg -display :0 -forever
# }
ExecStop=pkill x11vnc
Restart=on-failure
RestartSec=2
Type=forking

[Install]
WantedBy=graphical.target