Slackware Revisited

02 June 2019
Back in 2016 prior to my secondment to China I decided to try Slackware 14.2 on my laptop because in short I felt that a switch to Slackware would be less long-term hassle than Ubuntu 16.04, and as a result of that experience I then rebuilt my desktop to use Slackware as well. It was a lot of up-front effort as it meant finding substitutes for many utilities I used previously, but ever since I have not looked back. Slackware shuns the type of distribution-specific tweaks that make other distributions age very badly, and ultra-conservative choices such as a default non-graphical login are so much better than ghastly default GUIs I have seen elsewhere.

At my new company one of the perks is having a free choice of what operating system is installed on our desktop workstations, and my choice was obviously Slackware — I now use Slackware on all my personal computers, and where it is offered I also use it on all VPS installations I have. In contrast to other distributions such as Ubuntu and Fedora it maintains a consistency that allows me to get stuff done without worrying about the latest fashions in Linux configuration — in other words building a system that is intended to last years rather than months. This article is an update of my previous Slcakware-related articles.

ISOLinux errors

When attempting to boot from the Slackware DVD some DVD drives may throw up an error similar to the following. As far as I am aware this is not specific to Slackware, and is related to differences that cause the boot code to expect syslinux rather than isolinux:

ISOLINUX 4.07 2013-07-25 ETCD Copyright (C) 1994-2013 H. Peyter Anvin et al No DEFAULT or UI configuration directive found! boot:

The problem here is that for some reason when booting via USB devices, various bootstrap files are expected to be in slightly different locations compared to when booted from a DVD drive connected via SATA — the gotcha is that the former includes booting from at least some USB-based DVD drives. The solution is to copy the DVD contents, modify the file paths, and then burn he files back to DVD — the commands below summerise this process:

mount -o ro,loop slackware64-14.2-install-dvd.iso /mnt/tmp mkdir /tmp/iso cp -ar /mnt/tmp/* /tmp/iso/ umount /mnt/tmp cd /tmp/iso mv isolinux/isolinux.bin isolinux/syslinux.bin mv isolinux/isolinux.cfg isolinux/syslinux.cfg mv isolinux syslinux mkisofs -R -j -b syslinux/syslinux.bin -c syslinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table \ -V "Slackware 14.2" -o /tmp/syslinux.iso ./ growisofs -dvd-compat /dev/dvd=/tmp/syslinux.iso

Note that syslinux/boot.cat is created on the ISO just in case you are wondering why the file does not exist. Once the changed files are burned to a DVD it should boot successfully. As an aside isolinux/README.txt on the Slackware DVD implies the following will also allow booting from USB devices, but I have not tested it.

isohybrid -u slackware64-14.2-install-dvd.iso

System installation & configuration

My 2017 article on the whole does a good job of covering the installation & setup of Slackware 14.2, although there are a few minor areas where it falls a little short on infornation so below is an addendum that addresses information I feel in hindsight is missing from the earlier instructions. My 2016 article is more a technical discussion than a guide, but it included some details that the later article omits because they were only relevent to laptops — for these I have included links.

Partition alignment

As far as I can tell fdisk these days defaults to aligning on 1MB boundaries (2048 sectors at 512 bytes each), with DOS-compatibility disabled and sectors now the default display unit, so no special action is needed for correct partition alignment. This is particularly critical with SSD drives as internally they use relatively large internal allocation units which have to be erased before new data is written — I suspect misalignment might have contributed to the SSD in my desktop failing back in 2014.

Package management

In the past I preferred — via the sbopkg tool — to build source packages from SlackBuilds. These days my preference for package installation is slackpkg with the slackpkg+ extension, and I have it setup to pull packages from AlienBob's repositories as well as the “official” Slackware repository. I have previously used Slapt-get but it looks like it has been discontinued, most likley due to Slackpkg becoming a standard part of Slackware.

Desktop manager

The last two times I built Slackware-based systems I used either SDDM or XDM for the graphical login, but in hindsight it was a disproprtionate amount of effort for something that in practice is rarely actually seen. Quicker solution is to simply install the KDE packages as this results in KDM being used as the desktop manager.

Swappiness

I am not exactly sure what the units are, but swappiness is a balance between using physical memory for file-system caching versus program memory. On a system with solid-state drives I think a heavy bias against swapping out program memory is preferable, because reading stuff off an SSD is already pretty fast whereas swapping out program memory involves erase-write cycles on the swap partition. Therefore I prefer to use a value of 30 rather than Linux's default of 60.

echo 30 > /proc/sys/vm/swappiness

To be made permanent this line needs to be placed in a startup script such as /etc/rc.d/rc.local.

12- vs. 24-hour time

For some reason programs such as Thunderbird use the system locale — which is independent of keyboard layout — to decide whether to show the time in 12-hour or 24-hour format, and the UK locale of en_GB adopts 24-hour format. This suits my tastes fine, although 12-hour vs. 24-hour really ought to be a setting in its own right.

Keyboard reverting to US layout

For some reason if a USB keyboard is disconnected and reconnected it sometimes reverts to US layout — the following command will reset the keyboard back to UK layout:

setxkbmap "gb"

Touchpad tap-to-click

On laptops you might want to use synclient to setup the touchpad so that tap-to-click is disabled — for some reason it is enabled by default on Slackware which I find very annoying.

Mouse acceleration

While I like having a high mouse acceleration, I dislike there being a threshold before it kicks in — the command below removes this threshold:

xset m 2/1 0

Samsung “battery life extender”

The Samsung laptop I got while I was in New Zealand has an option called battery life extender which basically limits maximum power charge to 70-80% — from what I read frequently charging batteries above about 85-90% is particularly damaging for laptop battery life-time so I usually have this feature turned on. I only ever turn it off if I expect to be running on battery power for more than 3-4 hours.

echo 1 > /sys/devices/platform/samsung/battery_life_extender

To turn it off set the sysfs path to zero rather than one.

Wireless access

Wireless access was not mentioned in my 2017 article since at the time I was installing Slackware on my desktop, but was detailed in an earlier article that covered installation of Slackware onto my laptop. In summary I installed Wicd and let it manage the network connections — fine for a laptop but likley not the best option for a desktop or server installation.

Virtualbox

The Virtualbox kernel drivers are not loaded by default, and the previous bash snippet might not load them in the correct order. The following is the one thing I know to work in all scenarios, as modprobe also does not always play ball when passed multiple modules in one go:

#!/bin/bash for i in vboxpci vboxdrv vboxnetadp vboxnetflt; do echo "Modprobe ${i}.." /sbin/modprobe $i; done

for guests the following is required if you want access to host shared folders:

modprobe vboxsf

IceWM vs. Xfce

Aside from KDE v1 in my earliest Linux years I have pretty much always used IceWM as my window manager of choice, although for professional use I switched over to Xfce sometime in 2015. IceWM is a minimalist window manager that does just this one task, whereas Xfce is a desktop environment that has a much broader remit — the practical difference between them is how much system configuration they have control over, and different circumstances favour different choices.

Personal vs. professional use

For a personal desktop that I keep running 24/7 IceWM's minimalist nature suits me fine — I just want things to be in the same place as they have always been, and am happy to accept some up-front difficulties and a few missing features as a consequence; one obvious deficiency is on laptops where although there is a power meter, IceWM will happily let you work away until suddenly there is zero power left. The primitive nature of XDM does not really matter on a system which is never left logged-out, and an Ethernet connection with a static IP simply does not need all the front-ends associated with Network Manager.

For a professional workstation, which may have to be rebuilt more regularly than my own systems typically are, the demands and requirements are different. Things have to be out-of-the-box rather than custom-built, all software has to be automatically upgradable, and it is harder to justify spending a lot of time tinkering around with various options. Company policy/dogma also plays a part, though these to be fair are usually the result of external pressures and/or some negative experiences rather than malace.

Dual-head & display control

One of the major short-comings with IceWM is that it considers display configuration to be outside of its remit, and as a result it is unsuitable for anything other than a single display of a fixed resolution. It does not handle dynamic display resizes when running as a VirtualBox guest, and I remember headaches with xrandr when I used IceWM on a dual-head workstation back in 2014-2015. I think IceWM is simply not designed for dual-head and since I was already used to using multiple virtual desktops my feeling at the time was that having multiple displays as well was more trouble than it was worth.

In contrast Xfce includes display configuration utilities, and in particular has features specially designed for dual-head such as separate program taskbars for each display. Relatively poor experience with dual-head with IceWM quite likely fuelled my general dislike of multiple monitors, and having a window manager that properly supports multiple monitors is essential. I personally would rather spend the money on a single larger display, but I am not the one who specced my professional workstation.

Xfce configuration

At my previous company I somehow managed to coax Xfce into looking very much like my preferred IceWM configuration, but in the end I could not find copies of all the configuration files from my company laptop, so I ended up doing it all over again from scratch. Most of the configuration just requires fiddling around with various Xfce control panels, but there are a few things that require a bit of trickery.

Program menu

My preference is to just have some select programs at the top-level applications menu, and have the stuff that normally appears there delegated to a sub-menu as shown below. For comparison a screenshot of my IceWM program menu is also below.

Xfce IceWM

To do this I made a ~/.local/xfce-applications.menu with the contents below and setup the Application Menu panel to use it. I do not really understand how the configuration file works, and although it worked I suspect the approach I took is not quite the correct one. In particular note the bold-highlighted line that defines a surplus Chromium entry at the very top of the Stock sub-menu — for some reason if I remove it the menu does not work properly.

<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN" "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd"> <Menu> <Name>Xfce</Name> <DefaultAppDirs/> <DefaultDirectoryDirs/> <DefaultMergeDirs/> <Include> <Category>X-Xfce-Toplevel</Category> </Include> <Layout> <Filename>xfce4-about.desktop</Filename> <Filename>Thunar.desktop</Filename> <Filename>keepnote.desktop</Filename> <Filename>virtualbox.desktop</Filename> <Separator/> <Filename>chromium-browser.desktop</Filename> <Filename>firefox.desktop</Filename> <Filename>thunderbird.desktop</Filename> <Filename>SciTE.desktop</Filename> <Filename>gvim.desktop</Filename> <Filename>emacs.desktop</Filename> <Filename>xemacs.desktop</Filename> <Filename>putty.desktop</Filename> <Filename>terminator.desktop</Filename> <Filename>exo-terminal-emulator.desktop</Filename> <Filename>xterm.desktop</Filename> <Filename>xcalc.desktop</Filename> <Filename>libreoffice-startcenter.desktop</Filename> <Separator/> <Menuname>Settings</Menuname> <Menuname>Stock</Menuname> <Separator/> <Filename>xfce4-run.desktop</Filename> <Filename>xfce4-session-logout.desktop</Filename> </Layout> <Menu> <Name>Settings</Name> <Directory>xfce-settings.directory</Directory> <Include> <Category>Settings</Category> </Include> <Layout> <Filename>xfce-settings-manager.desktop</Filename> <Separator/> <Merge type="all"/> </Layout> <Menu> <Name>Screensavers</Name> <Directory>xfce-screensavers.directory</Directory> <Include> <Category>Screensaver</Category> </Include> </Menu> </Menu> <Menu> <Name>Stock</Name> <Include> <Category>X-Xfce-Toplevel</Category> </Include> <Layout> <Filename>chromium-browser.desktop</Filename> <Merge type="all"/> </Layout> <Menu> <Name>Development</Name> <Directory>xfce-development.directory</Directory> <Include> <Category>Development</Category> </Include> </Menu> <Menu> <Name>Education</Name> <Directory>xfce-education.directory</Directory> <Include> <Category>Education</Category> </Include> </Menu> <Menu> <Name>Development</Name> <Directory>xfce-development.directory</Directory> <Include> <Category>Development</Category> </Include> </Menu> <Menu> <Name>Education</Name> <Directory>xfce-education.directory</Directory> <Include> <Category>Education</Category> </Include> </Menu> <Menu> <Name>Games</Name> <Directory>xfce-games.directory</Directory> <Include> <Category>Game</Category> </Include> </Menu> <Menu> <Name>Graphics</Name> <Directory>xfce-graphics.directory</Directory> <Include> <Category>Graphics</Category> </Include> </Menu> <Menu> <Name>Multimedia</Name> <Directory>xfce-multimedia.directory</Directory> <Include> <Category>Audio</Category> <Category>Video</Category> <Category>AudioVideo</Category> </Include> </Menu> <Menu> <Name>Network</Name> <Directory>xfce-network.directory</Directory> <Include> <Category>Network</Category> </Include> <Exclude> <Or> <Filename>exo-mail-reader.desktop</Filename> <Filename>exo-web-browser.desktop</Filename> </Or> </Exclude> </Menu> <Menu> <Name>Office</Name> <Directory>xfce-office.directory</Directory> <Include> <Category>Office</Category> </Include> </Menu> <Menu> <Name>System</Name> <Directory>xfce-system.directory</Directory> <Include> <Or> <Category>Emulator</Category> <Category>System</Category> </Or> </Include> <Exclude> <Or> <Filename>xfce4-session-logout.desktop</Filename> </Or> </Exclude> </Menu> <Menu> <Name>Other</Name> <Directory>xfce-other.directory</Directory> <OnlyUnallocated/> <Include> <All/> </Include> </Menu> </Menu> </Menu>

For the items at the top-level I had to copy the desktop files from /usr/share/applications into ~/.local/applications and add X-Xfce-TopLevel to the Categories field. This was not a major issue for me because for several of the entries I wanted to customise the icon used, and for a few programs such as XCalc there was no system-wide desktop file.

RedmondXP theme

Slackware does not package up a lot of the Xfce themes so you have to go and grab them manually using the commands below. I originally suggested putting them under /usr/share/themes/ but these days I would instead use ~/.themes/ instead.

git clone https://github.com/Distrotech/xfwm4-themes.git

Configuration backup

Although it was not a major set-back having to work out all of Xfce's configuration all over again is not something I want to repeat — whether it is because I am changing companies, or just a slikley having to rebuild my workstation for whatever reason. Part of the problem last time was that some of the changes were under the system-wide configuration rather than in the home directory, and typically one only takes backups of the latter. This time round I had a configuration backup script much like the following that makes a tarball of all my program customisations:

tar -C /home/remy/ -czvf ~/Archive/linuxcfg.tar.gz bin Vim \ .config .local .gtkrc-2.0 .putty \ .emacs.d .vim .gvimrc .vimrc \ .gitconfig .SciTE.properties .SciTEUser.properties

The script above was actually written while I was at my last company, but that one was missing critical entries that allowed me to replicate my previous development setup. For good measure I installed Slackware into a VM to make sure the resulting tarball recreated my expected appearance — I advise testing a similar “disaster recovery” procedure before it is forced by necessity.

Looking back

It is now bit over a month since I built my professional workstation, and I am still surprised at how much stuff “just works” after following even quite old setup guides. Colleagues remarks that using commands such as ifconfig is rather old-school, but that is the whole point — I just rattle out a command that has worked since I first saw it in the 1990s rather than waste time finding out what the modern equivalent is. By adopting Slackware I originally accepted that things might be harder, but in practice a lot of things are actually easier having invested in figuring out Slackware's eco-system.