1. intro

we will use VNC and ICEWM as the window manager.

2. installation

yum -y install tigervnc-server icewm liberation-mono-fonts

3. user special

vncuserid="kvm"
vncpasswd="xx"
homedir="/data1/homes/${vncuserid}"
getent passwd ${vncuserid} || adduser -d ${homedir} -g users -m -r ${vncuserid}
echo "${vncuserid}:${vncpasswd}" | chpasswd
mkdir -p ${homedir}/.vnc ${homedir}/.icewm ${homedir}/pic
wget -nv http://d01cid.ddns.net/sharel/pic/brushed-1280.jpg -O ${homedir}/pic/bground.jpg
echo "${vncpasswd}" | vncpasswd -f > ${homedir}/.vnc/passwd
chmod 600 ${homedir}/.vnc/passwd
cfgfile="${homedir}/.icewm/preferences"
echo '#' > ${cfgfile}
echo 'DateFormat="%H:%M:%S %e %B %Y"' >> ${cfgfile}
echo "DesktopBackgroundImage=\"${homedir}/pic/bground.jpg\"" >> ${cfgfile}
echo 'DesktopBackgroundScaled=1' >> ${cfgfile}
echo 'ShowProgramsMenu=1' >> ${cfgfile}
echo 'ShowThemesMenu=0' >> ${cfgfile}
echo 'ShowHelp=0' >> ${cfgfile}
echo 'TaskBarAtTop=1' >> ${cfgfile}
echo 'TaskBarShowMailboxStatus=0' >> ${cfgfile}
echo 'TaskBarShowCPUStatus=0' >> ${cfgfile}
echo 'TaskBarShowNetStatus=0' >> ${cfgfile}
echo 'WorkspaceNames=" 1 ", " 2 ", " 3 ", " 4 "' >> ${cfgfile}
cfgfile="${homedir}/.icewm/theme"
echo 'Theme="win95/default.theme"' > ${cfgfile}
chown ${vncuserid}: -R ${homedir}/

4. configuration

4.1. el7

echo "#" > /etc/X11/xinit/xinitrc
echo "exec openbox-session" >> /etc/X11/xinit/xinitrc
echo "xsetroot -bitmap /usr/share/backgrounds/xbm/Brick.xbm &" >> /etc/xdg/openbox/autostart
cfgfile="/lib/systemd/system/vncserver-${vncuserid}.service"
echo "#" > ${cfgfile}
echo "[Unit]" >> ${cfgfile}
echo "Description=Remote Desktop for user ${vncuserid}" >> ${cfgfile}
echo "After=syslog.target network.target" >> ${cfgfile}
echo "" >> ${cfgfile}
echo "[Service]" >> ${cfgfile}
echo "Type=forking" >> ${cfgfile}
echo "User=${vncuserid}" >> ${cfgfile}
echo "" >> ${cfgfile}
echo "ExecStartPre=-/usr/bin/vncserver -kill :9" >> ${cfgfile}
echo "ExecStart=/usr/bin/vncserver :9" >> ${cfgfile}
echo "PIDFile=${homedir}/.vnc/%H:9.pid" >> ${cfgfile}
echo "ExecStop=-/usr/bin/vncserver -kill :9" >> ${cfgfile}
echo "" >> ${cfgfile}
echo "[Install]" >> ${cfgfile}
echo "WantedBy=multi-user.target" >> ${cfgfile}
runuser -l ${vncuserid} -c "vncserver :9"
systemctl daemon-reload
systemctl enable vncserver-${vncuserid}.service
systemctl start vncserver-${vncuserid}.service

4.2. el8

echo ":9=${vncuserid}" >> /etc/tigervnc/vncserver.users
cube /etc/tigervnc/vncserver-config-defaults "session=gnome" with "session=icewm-session"
echo "geometry=1280x1024" >> /etc/tigervnc/vncserver-config-defaults
mkdir -p /etc/systemd/system/vncserver@.service.d
echo '#' > /etc/systemd/system/vncserver@.service.d/10-restart.conf
echo "[Service]" >> /etc/systemd/system/vncserver@.service.d/10-restart.conf
echo "Restart=always" >> /etc/systemd/system/vncserver@.service.d/10-restart.conf
systemctl daemon-reload
systemctl enable vncserver@:9
systemctl start vncserver@:9

5. virtualbox