CentOS 8 with IceWM Desktop Environment

Do you need CentOS 8 with IceWM as desktop Operating System? Most likely not. Especially if you want it to work smoothly without any worries and troubles. However, if you enjoy playing with new desktop environments, you might find it fun.

CentOS 8 with IceWM desktop environment

My reasons were as follows:

  1. I wanted to use the same Linux distribution for server and desktop. Just to minimize possible surprises during the deployment.
  2. I wanted to know what is going on in the RPM-based part of Linux world. The only way to achieve this is to use such distribution every day.
  3. I was tired of problems with the Virtual Box guest additions in CentOS 7 (yes , I run it all as a virtual machine), especially after the 3.10 kernel updates. It was time to move on.
  4. I didn’t want to use Gnome 3, because it’s slow and ugly (however it’s fully functional!). And there were no other DEs in CentOS 8 repositories at that time.

So, I tried CentOS 8 with IceWM (installed it from source) and it worked. IceWM is small, very fast, ascetic, and in some ways quite intuitive. There were some problems with the clipboard (in xTerm and with VBox shared clipboard) and with language switching, but I figured it out and I think that I would probably continue to use it. Below are some notes on how I installed it and resolved the issues.

Basic installation of CentOS 8

I took the NetInstall x86_64 image of CentOS-8-x86_64-1905-boot.iso. For some reason, it didn’t choose the package mirror automatically. I had to enter it manually. Quite a funny bug, the thread is here.

Gnome desktop

After the basic installation, I just installed the X server and Gnome 3 (workstation). I didn’t want to use Gnome, I just wanted to test something that 100% works.

# dnf update
# dnf upgrade
# dnf groupinstall workstation

Btw, bye-bye yum, and hello dnf!

Virtualbox Guest Additions

I use CentOS 8 in a virtual machine on Windows, so it was important for me to make VirtualBox Guest Additions work:

# dnf install kernel-devel gcc make perl elfutils-libelf-devel
# cd /run/media/aleonov/VBox_GAs_6.0.12
# ./VBoxLinuxAdditions.run

After that, I’ve got something usable:

СentOS 8 Gnome 3

How to fix VBoxLinuxAdditions on CentOS8

If VBoxLinuxAdditions stop working on CentOS8, the most common reasons are:

  1. You have installed a new version of VirtualBox
  2. You have installed and used a new version of Linux kernel

To fix this, I delete the installed VBoxLinuxAdditions from

ls /opt/VBoxGuestAdditions-6.0.20/
bin init installer lib LICENSE other routines.sh sbin src uninstall.sh

using uninstall.sh script

If auto-mount of CD with VBoxLinuxAdditions does not work, I get the right device name using blkid by its label. Most likely it will be /dev/sr0. Then I install a new version of VBoxLinuxAdditions:

# mkdir /media/iso
# mount /dev/sr0 /media/iso/
# cd /media/iso/
# ./VBoxLinuxAdditions.run

How to install the latest version of Python3

Here’s how you can install the latest version of Python3 from source on CentOS8 (get the versions at https://www.python.org/ftp/python/):

$ sudo dnf -y groupinstall "Development Tools"
$ sudo dnf -y install openssl-devel bzip2-devel libffi-devel xz-devel wget  
$ wget https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz
$ tar xvf Python-3.8.3.tgz
$ cd Python-3.8*/
$ ./configure --enable-optimizations
$ sudo make altinstall
$ ln -s /usr/local/bin/pip3.8 /usr/bin/pip3.8
$ ln -s /usr/local/bin/python3.8 /usr/bin/python3.8

On “Failed to synchronize cache for repo ‘AppStream'” error:

$ sudo dnf clean all
$ sudo rm -rf /var/cache/dnf
$ sudo dnf upgrade --releasever=8

In a corporate environment, you may need to use the --no-check-certificate paramater for wget (if there is a legit MiTM made by NGFW). You may also need to run pip with --trusted-host parameter, for example like this:

pip3.8 --trusted-host pypi.org --trusted-host files.pythonhosted.org install <module>
pip3.8 --trusted-host pypi.org --trusted-host files.pythonhosted.org install --upgrade <module>
pip3.8 --trusted-host pypi.org --trusted-host files.pythonhosted.org install -r requirements.txt

Additional repositories:


Just install this rpm package from fedoraproject:

# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

If you have problems with certificates, you can disable the verification as follows:

# vi /etc/dnf/dnf.conf #Add a new line:


On CentOS 8 it is recommended to enable the PowerTools repository since EPEL packages may depend on packages from it:

dnf config-manager --set-enabled PowerTools


The main thing that upset me in CentOS8 was the lack of alternative desktop environments in the repositories, even in EPEL. There was only a slooow Gnome 3 with terrible junk animations. ? So, I decided to try IceWM, because of intuitive configs and straightforward installation procedure from the source code.

NB: the package for IceWM is available in the CentOS 8 repository, but the dependencies are broken:

# dnf install icewm 
Last metadata expiration check: 2:48:03 ago on Sat 28 Sep 2019 08:37:11 PM MSK.
 Problem: conflicting requests
  - nothing provides gnome-icon-theme needed by icewm-1.6.1-4.el8.x86_64
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

That’s why I decided to install IceWM from sources.

  • A description how to do this is available on the main site https://ice-wm.org.
  • All releases are available on github. Url with sources.
  • I took all necessary dependencies from the script here and added also lzip
# dnf install lzip asciidoc alsa-lib-devel autoconf automake cmake fontconfig-devel fribidi-devel gcc-c++ gdk-pixbuf2-devel gdk-pixbuf2-xlib-devel librsvg2-devel gettext gettext-devel git glib2-devel libSM-devel libX11-devel libXext-devel libXft-devel libXinerama-devel libXpm-devel libXrandr-devel libXrender-devel libXcomposite-devel libXdamage-devel libXfixes-devel libjpeg-turbo-devel libpng-devel libtool make perl-Pod-Html xterm xdg-utils libao-devel libsndfile-devel

Don’t forget to add the PowerTools repo (above), or you will face problems with the packages gdk-pixbuf2-xlib-devel, libao-devel and libsndfile-devel.

I decided to install IceWM in my home directory to make it easier to manage:

$ curl -k -L -s https://github.com/ice-wm/icewm/releases/download/1.6.2/icewm-1.6.2.tar.lz | tar xvpf - --lzip
$ cd icewm-1.6.2
$ ./configure --prefix=/usr
$ make
$ mkdir /home/aleonov/ice-wm/
$ make DESTDIR="/home/aleonov/ice-wm/" install


[aleonov@localhost ice-wm]$ find | grep "/bin"

Upd 06.05.2020. How to update the IceWM (to 1.6.5 or newer version)?

In May IceWM 1.6.5 released, so installed it in ice-wm-installation-1.6.5 directory:

$ icewm -V
IceWM 1.6.2, Copyright 1997-2003 Marko Macek, 2001 Mathias Hasselmann.
$ curl -k -L -s https://github.com/ice-wm/icewm/releases/download/1.6.5/icewm-1.6.5.tar.lz | tar xvpf - --lzip
$ cd icewm-1.6.5
$ ./configure --prefix=/usr
$ make
$ mkdir /home/aleonov/ice-wm-installation-1.6.5/
$ make DESTDIR="/home/aleonov/ice-wm-installation-1.6.5/" install

And made the ice-wm directory a link to fresh binaries. So I can easily switch between the different versions:

$ mv ice-wm ice-wm-installation-1.6.2
$ ln -s ice-wm-installation-1.6.5 ice-wm

Updated well:

$ icewm -V
IceWM 1.6.5, Copyright 1997-2003 Marko Macek, 2001 Mathias Hasselmann.

Make it start with startx

To start IceWM create .xinitrc. Upd 06.05.2020. I decided to keep .xinitrc minimal, and use startup script:

$ cat .xinitrc 
# .xinitrc
xrdb -merge ~/.Xresources
# run profile to set $PATH and other env vars correctly
. $HOME/.bash_profile
# start icewm, and run xterm if it crashes (just to be safe)
exec icewm-session


How to start a program on startup in IceWM

In startup script you can configure the launch of applications, for example VirtualBox client with shared clipboard support:

$ cat .icewm/startup

# setup background
xsetroot -solid '#056'

# setup mouse acceleration
xset m 7 2

# VBoxClient
VBoxClient --clipboard

Note that .icewm/startup should be executable:

$ chmod +x .icewm/startup 

Theme installation

The default IceWM theme looks pretty ugly, so I downloaded a new one here and installed it:

mkdir ~/.icewm/themes/
mv Downloads/Araita.tar.bz2 .icewm/themes/
tar xjf Araita.tar.bz2 

It looks like this:

CentOS 8 with IceWM desktop environment


If Virtualbox shared clipboard doesn’t work, make sure that VBoxClient with the key clipboard is running:

 /usr/bin/VBoxClient --clipboard 


You can easily create a launch menu in IceWM by creating such file (syntax):

$ cat ~/.icewm/menu 
prog pycharm pycharm pycharm
prog term term xterm
prog gedit gedit gedit
prog firefox firefox firefox

First value is name, the second is the name of icon and the third is the command. It may be a console command:

xterm -hold -e 'cd ~/mydir/; ./my_script.sh'


Similarly you can add key strokes in IceWM (syntax). For example, I created key strokes to check different input languages and start Xterm terminal:

$ cat ~/.icewm/keys 
key "Alt+Shift+1" setxkbmap us
key "Alt+Shift+2" setxkbmap ru
key "Ctrl+t" xterm


Copying to clipboard from Xterm terminal will be much more comfortable if you configure it in .Xresources like this:

$ cat .Xresources
XTerm.vt100.geometry: 80x32
XTerm.vt100.faceName: Liberation Mono:size=10:antialias=false
XTerm.vt100.font: 7x13

XTerm*vt100.translations: #override \
    Shift Ctrl <Key> C: copy-selection(CLIPBOARD) \n\
    Shift Ctrl <Key> V: insert-selection(CLIPBOARD)

That’s all for now. Thanks for your attention!

2 thoughts on “CentOS 8 with IceWM Desktop Environment

  1. Pingback: VirtualBox GuestAdditions for Linux Guest OS | Alexander V. Leonov

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.