Desktop environment configuration for a testing workstation

Configuring the desktop on our example Debian testing workstation/desktop machine

Author: Francesco Poli
Version: 0.88
Copyright: Expat license

Copyright (c) 2007-2021 Francesco Poli

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.


About this document
Web form HyperText Markup Language
Source form reStructuredText
Web stylesheet Cascading StyleSheets
Build directives Makefile


Summary of previous episodes

In another document (HTML, reST) you saw how to configure the console environment on our example Debian testing workstation/desktop box. Now that the console is comfortable enough, you can setup the desktop environment.

X server installation

First of all, install X.Org and related packages:

# aptitude install xorg

Also install some benchmarking utilities:

# aptitude install mesa-utils

Terminal emulator configuration

Create the following file:

$ cat ~/.Xresources
! set a nice font
UXTerm*Font: -misc-fixed-medium-*-*-*-15-*-*-*-*-*-iso10646-*
UXTerm*wideFont: -misc-fixed-medium-*-*-ja-18-*-*-*-*-*-iso10646-*
UXTerm*scaleHeight: 1.2
UXTerm*utf8Title: true

! set my favorite colors
UXTerm*background: black
UXTerm*foreground: white
UXTerm*colorBDMode: off
UXTerm*colorULMode: off

! no scrollbar
UXTerm*scrollBar: off

! set cursor blinking
UXTerm*cursorBlink: on

! set buffer size
UXTerm*saveLines: 1000

! configure selection rules
UXTerm*on2Clicks: regex [^/@ \n]+
UXTerm*on3Clicks: regex [^ \n]+
UXTerm*on4Clicks: regex [^#$]+
UXTerm*on5Clicks: line

If you already have an open X session and want these changes to be activated immediately, issue the following command:

$ xrdb -merge ~/.Xresources

from inside the X session itself.

Fonts for X

Install some additional fonts for X.Org:

# aptitude install xfonts-terminus xfonts-terminus-oblique
# aptitude install fonts-freefont-ttf

If you are also interested in cyrillic fonts, install the following fonts:

# aptitude install xfonts-cyrillic xfonts-cronyx-100dpi xfonts-cronyx-75dpi

Some useful packages of multi-language fonts:

# aptitude --without-recommends install fonts-droid-fallback
# aptitude install fonts-baekmuk

and a package of icon fonts:

# aptitude install fonts-octicons

Also, install an appropriate font browser:

# aptitude --without-recommends install gucharmap


Install a light-weight and highly configurable window manager:

# aptitude install fluxbox

Set up a customized .xsession file for your regular user:

$ cat ~/.xsession
# MANAGER: start desktop/window manager
fluxbox & MANAGERPID=$!

# speed up keyboard
xset r rate 400 40

# disable bell beep
xset b off

# HANG POINT: wait for desktop/window manager to exit

# save log file
savelog -p -c 4 ~/.xsession-errors

Now, you can login as your regular user from a new virtual terminal (for instance by pressing [Ctrl+Alt+F3]) and open a Fluxbox session by issuing the following command:

$ startx

You should see a basic desktop: if this is the case, use the right mouse button to access the Fluxbox menu and select Applications, Terminal Emulators and XTerm. Inside the terminal emulator, issue the following command:

$ xwininfo

after which you can click on the background and check whether the screen resolution fits your hardware (on our example box, it should be 1600x900, with a 24 bit color depth).

Now you can type the following command into the terminal emulator:

$ glxinfo | grep direct

in order to check whether direct rendering is activated.

You can exit the Fluxbox session by selecting Exit from the Fluxbox menu.


Install some background images:

# aptitude install propaganda-debian

and an appropriate image viewer to be used as wallpaper setter:

# aptitude install feh

If the latter was already installed, you may mark it as manually installed:

# aptitude unmarkauto feh

After opening a Fluxbox session, set your favorite wallpaper:

$ fbsetbg -t /usr/share/wallpapers/The-Brothers-Gibb-1.JPG

Now you want this choice to be remembered for the next sessions. Edit ~/.fluxbox/init so that:

$ grep rootCommand ~/.fluxbox/init
session.screen0.rootCommand: fbsetbg -l

Style and fonts

Now select a tiny and yet readable font (you can use xfontsel to find the one that's best for you) and modify the following two lines in your Fluxbox configuration file:

$ grep 'session\.style' ~/.fluxbox/init
session.styleOverlay: ~/.fluxbox/overlay
session.styleFile: /usr/share/fluxbox/styles/Meta

Then, create the style customization file:

$ cat ~/.fluxbox/overlay
background: none
*font: -*-terminus-*-r-*-*-12-*-*-*-*-*-iso10646-*


Modify your Fluxbox configuration file so that:

$ grep slit ~/.fluxbox/init
session.screen0.slit.placement: TopRight
session.screen0.slit.direction: Horizontal
session.screen0.slit.onTop: False
session.screen0.slit.autoHide: False


Set 4 workspaces with short names:

$ grep '\.workspace' ~/.fluxbox/init
session.screen0.workspaceNames: W1,W2,W3,W4
session.screen0.workspaces: 4

Window placing and focusing

Disable window position adjustments:

$ grep edge ~/.fluxbox/init
session.screen0.edgeSnapThreshold: 0

It's good to have window position shown:

$ grep position ~/.fluxbox/init
session.screen0.showwindowposition: True

Set a nice focus model:

$ grep focus ~/.fluxbox/init
session.screen0.focusModel: StrictMouseFocus
session.screen0.focusLastWindow: True
session.screen0.focusNewWindows: False

Disable automatic window raising:

$ grep Raise ~/.fluxbox/init
session.screen0.autoRaise: False
session.autoRaiseDelay: 250

Enable content display for moving windows:

$ grep opaque ~/.fluxbox/init
session.screen0.opaqueMove: True

Also, integrate tab labels into titlebars, so that they do not occupy room on the screen:

$ grep tabs ~/.fluxbox/init
session.screen0.tabs.intitlebar: True
session.screen0.tabs.usePixmap: False


Install a suite of screensavers:

# aptitude install xscreensaver xscreensaver-data-extra xscreensaver-gl-extra
# aptitude install xscreensaver-screensaver-bsod \
  xscreensaver-screensaver-webcollage unicode-screensaver

Also install other complementary packages:

# aptitude install xplanet-images

In order to have the screensaver system started on each Fluxbox session you open, insert the following two lines into your regular user's ~/.xsession file (between MANAGER and HANG POINT):

$ grep -A 1 'start screensaver' ~/.xsession
# start screensaver
xscreensaver -no-splash &

and the following two lines as well (after the HANG POINT):

$ grep -A 1 'stop screensaver' ~/.xsession
# stop screensaver
xscreensaver-command -exit

Now it's time to configure Xscreensaver for your regular user. Open a Fluxbox session and run the following command (from a terminal emulator):

$ xscreensaver-demo

Set "Blank After" 15 minutes and "Cycle After" 5 minutes; then uncheck "Lock Screen". Go to the "Advanced" tab and check "Grab Desktop Images", uncheck "Grab Video Frames" and "Choose Random Image", check "Power Management Enabled" (set "Standby After" 30 minutes, "Suspend After" 30 minutes, and "Off After" 45 minutes), uncheck "Quick Power-off in Blank Only Mode", check "Fade to Black when Blanking", uncheck "Fade from Black When Unblanking" (set "Fade Duration" to 3 seconds); select "Program" fortune.

Go back to the "Display Modes" tab and make sure you choose the "Random Screen Saver" mode. After that, enable the screenhacks you like, while disabling the ones you don't like. If you share my tastes, enable and configure the screenhacks as described in the following table:

screenhack enable configuration
Abstractile no  
Anemone yes  
Anemotaxis yes  
Antinspect yes  
Antmaze yes  
AntSpotlight yes  
Apollonian no  
Apple2 yes set "Run basic programs" and uncheck "Show frame rate"
Atlantis yes  
Attraction yes  
Atunnel yes  
Barcode yes  
BinaryRing yes  
Blaster yes  
BlinkBox yes  
BlitSpin yes  
BlockTube yes  
Boing yes set "Smoothing" and unset all the other options
Bouboule yes  
BouncingCow yes  
Boxed yes  
BoxFit yes  
Braid no  
BSOD yes  
Bubble3D yes  
Bumps yes  
Cage yes  
Carousel no  
CCurve yes  
Celtic yes  
Circuit yes  
Cityflow yes  
Cloudlife yes  
CompanionCube yes  
Compass yes  
Coral no  
Crackberg yes  
Crumbler yes  
Crystal no  
Cube21 yes  
Cubenetic yes  
CubeStack yes  
CubeStorm yes  
CubeTwist yes  
CubicGrid no  
CWaves yes  
Cynosure yes  
DangerBall yes  
DecayScreen yes  
Deco no  
DeepStars yes  
Deluxe no  
Demon no  
Discoball yes  
Discrete no  
Distort yes  
Drift no  
DymaxionMap yes  
Endgame yes  
EnergyStream yes  
Engine yes  
Epicycle yes  
Eruption yes  
Esper yes  
EtruscanVenus yes  
Euler2D yes  
Extrusion yes  
FadePlot no  
Fiberlamp yes  
FilmLeader yes  
Fireworkx yes  
Flame no  
FlipFlop yes  
FlipScreen3D yes  
FlipText no  
Flow yes  
FluidBalls yes  
Flurry yes  
FlyingToasters yes  
FontGlide no  
FuzzyFlakes yes  
Galaxy yes  
Gears yes  
Geodesic yes  
GeodesicGears yes  
GFlux yes  
Gibson yes  
GLBlur yes  
GLCells yes  
Gleidescope yes  
GLHanoi yes  
GlitchPEG no  
GLKnots yes  
GLMatrix no  
GLPlanet yes  
GLSchool yes  
GLSlideshow no  
GLSnake yes  
GLText yes set "Display date and time"
Goop no  
Grav no  
GravityWell yes  
Greynetic no  
Halftone no  
Halo no  
Handsy yes  
Helix no  
Hexadrop no  
Hexstrut yes  
Hilbert yes  
Hopalong no  
Hydrostat yes  
HyperTorus yes  
Hypnowheel no  
IFS no  
IMSmap no  
Interaggregate yes  
Interference no  
Intermomentary yes  
JigglyPuff yes  
Jigsaw yes  
Juggler3D yes  
Julia no  
Kaleidescope no  
Kaleidocycle yes  
Klein yes  
Kumppa no  
Lament yes  
Lavalite yes  
LCDscrub no  
Lockward yes  
Loop no  
m6502 no  
Maze yes  
Maze3D yes  
MemScroller yes  
Menger yes  
Metaballs yes  
MirrorBlob yes  
Moebius yes  
MoebiusGears yes  
Moire no  
Moire2 no  
Molecule yes set "Label Atoms", "Describe Molecule", "Draw Atomic Nuclei", and "Draw Atomic Bonds", and unset the other options
Morph3D yes  
Mountain no  
Munch no  
NerveRot no  
Noof yes  
Noseguy yes  
Pacman yes  
Pedal no  
Peepers yes  
Penetrate no  
Penrose no  
Petri no  
Phosphor yes  
Photopile no  
Piecewise yes  
Pinion yes  
Pipes no  
Polyhedra yes  
Polyominoes no  
Polytopes yes  
Pong yes  
Popsquares yes  
ProjectivePlane yes  
Providence yes  
Pulsar no  
Pyro no  
Qix no  
QuasiCrystal no  
Queens yes  
RaverHoop yes  
RazzleDazzle no  
RDbomb no  
Ripples yes  
Rocks yes  
RomanBoy yes  
Rorschach no  
RotZoomer yes  
Rubik yes  
RubikBlocks yes  
SBalls yes  
Scooter yes  
ShadeBobs yes  
Sierpinski no  
Sierpinski3D no  
SkyTentacles yes  
SlideScreen yes  
Slip no  
Sonar yes set "Simulation (don't ping)"
SpeedMine yes  
Spheremonics yes  
SplitFlap yes  
Splodesic yes  
Spotlight yes  
Sproingies yes  
Squiral no  
Stairs yes  
Starfish no  
StarWars no  
StonerView yes  
Strange no  
Substrate yes  
Superquadrics yes  
Surfaces no  
Swirl no  
Tangram yes  
Tessellimage yes  
Thornbird no  
Timetunnel yes unset "Draw Logo" and the other options
TopBlock yes  
Triangle no  
TronBit yes  
Truchet no  
Twang yes  
Unicode yes set "font color: blue" and "background color: black"
Unicrud yes  
UnknownPleasures yes  
Vermiculate no  
VFeedback no  
VidWhacker no  
Vigilance yes  
Voronoi no  
Wander no  
WebCollage no  
WhirlWindWarp no  
WindupRobot yes  
Wormhole yes  
XAnalogTV yes  
XFlame yes  
XJack no  
XLyap no  
XMatrix yes  
XRaySwarm no  
XSpiroGraph no  
Zoom yes  

When you're done with the screenhack selection, select Quit from the File menu and your configuration will be saved.

Key bindings

Make sure an appropriate external key binding file is referenced from the main configuration file:

$ grep keyFile ~/.fluxbox/init
session.keyFile: ~/.fluxbox/keys

and modify the the key file so that it looks like:

$ cat ~/.fluxbox/keys
OnTitlebar Mouse1 :MacroCmd {Focus} {Raise} {ActivateTab}

OnTitlebar Move1 :StartMoving
OnLeftGrip Move1 :StartResizing bottomleft
OnRightGrip Move1 :StartResizing bottomright
OnWindowBorder Move1 :StartMoving

OnTitlebar Mouse2 :StartTabbing

OnTitlebar Double Mouse1 :Shade
OnTitlebar Mouse3 :WindowMenu

OnWindow Mod1 Mouse1 :MacroCmd {Raise} {Focus} {StartMoving}
OnWindow Mod1 Mouse3 :MacroCmd {Raise} {Focus} {StartResizing BottomRight}

OnDesktop Mouse1 :hideMenus
OnDesktop Mouse2 :workspaceMenu
OnDesktop Mouse3 :rootMenu
OnDesktop Mouse4 :nextWorkspace
OnDesktop Mouse5 :prevWorkspace

Mod4 Tab :NextWindow (workspace=[current])
Mod4 Shift Tab :PrevWindow (workspace=[current])
Mod4 F1 :Workspace 1
Mod4 F2 :Workspace 2
Mod4 F3 :Workspace 3
Mod4 F4 :Workspace 4
Mod4 F5 :Workspace 5
Mod4 F6 :Workspace 6
Mod4 F7 :Workspace 7
Mod4 F8 :Workspace 8
Mod4 F9 :Workspace 9
Mod4 F10 :Workspace 10
Mod4 F11 :Workspace 11
Mod4 F12 :Workspace 12
Mod4 x :ExecCommand uxterm -ls
Mod4 l :ExecCommand xscreensaver-command -lock
Mod4 d :DetachClient
Mod4 r :Raise
Mod4 f :Fullscreen
Mod4 t :ExecCommand synclient TouchpadOff=1
Mod4 y :ExecCommand synclient TouchpadOff=0
Mod4 w :ToggleDecor
Mod4 Up    :MoveUp    1
Mod4 Left  :MoveLeft  1
Mod4 Down  :MoveDown  1
Mod4 Right :MoveRight 1
Mod4 Shift Up    :MoveUp    18
Mod4 Shift Left  :MoveLeft  18
Mod4 Shift Down  :MoveDown  18
Mod4 Shift Right :MoveRight 18

The first few directives set a classical configuration for mouse behavior in Fluxbox. The remaining directives customize some other aspects. This way, you can click on the desktop wallpaper with the middle or right mouse button to get the workspace or main menu, respectively; clicking on the desktop with the left mouse button will close those menus, instead; by using the mouse wheel on the desktop, you can also switch to the previous or next workspace. Moreover, you can use the [Logo] keys as a keyboard shortcut enablers: [Logo+Tab] will focus the next window, [Logo+Shift+Tab] will focus the previous one, [Logo+F1] will switch to the first workspace, and likewise for the other function keys, [Logo+X] will open a new terminal emulator (with a login shell inside), [Logo+L] will lock the screen, [Logo+D] will take the focused window out of a tab-group (you can stack a window onto another one, by dragging its title bar with the middle mouse button and dropping it on the title bar of the other, thus obtaining a tab-group), [Logo+R] will raise a window above the other ones, [Logo+F] will bring a window to fullscreen mode and back to its original state, [Logo+T] will disable a touchpad (if any), [Logo+Y] will re-enable it, [Logo+W] will toggle decorations for the focused window, [Logo+CursorKey] will move the focused window by 1 pixel, and [Logo+Shift+CursorKey] will move the focused window by 18 pixels.


Install a nice panel:

# aptitude install fbpanel

and configure it for your regular user:

$ mkdir -p ~/.config/fbpanel/

Edit the configuration file so that it finally looks like:

$ cat ~/.config/fbpanel/default
## fbpanel configuration file         ##

Global {
    edge = bottom
    allign = right
    xmargin = 275
    widthtype = pixel
    width = 30000
    heighttype = pixel
    height = 28
    roundcorners = false
    transparent = false
    tintcolor = #ffffff
    alpha = 39
    SetPartialStrut = true

Plugin {
    type = launchbar
    config {
        button {
            image = /usr/share/fbpanel/images/terminal_sketch.svg
            tooltip = UXTerm
            action = /usr/bin/uxterm -ls
        button {
            image = /usr/share/pixmaps/xscreensaver.xpm
            tooltip = Lock screen
            action = /usr/bin/xscreensaver-command -lock

Plugin {
    type = space
    config {
        size = 10

Plugin {
    type = pager
    config {
        showwallpaper = false

Plugin {
    type = icons
    config {
        DefaultIcon = /usr/share/fbpanel/images/default.xpm

Plugin {
    type = space
    config {
        size = 10

Plugin {
    type = taskbar
    expand = true
    config {
        ShowIconified = true
        ShowMapped    = true
        ShowAllDesks  = false
        tooltips = true
        IconsOnly = false

Plugin {
    type = space
    config {
        size = 10

Plugin {
    type = tray

Plugin {
    type = space
    config {
        size = 10

Plugin {
    type = dclock
    config {
        ShowSeconds = false
        HoursView = 24
        TooltipFmt = %a, %d %b %Y
        Action = /usr/bin/xscreensaver-command -activate
        color = #4040a0

Plugin {
    type = space
    config {
        size = 5

Now, in order to have the panel started on each Fluxbox session you open, insert the following two lines into your regular user's ~/.xsession file (between MANAGER and HANG POINT [1]):

$ grep panel ~/.xsession
# start panel
sleep 2 && fbpanel &

and disable the Fluxbox toolbar and its systray:

$ grep 'toolbar\.visible' ~/.fluxbox/init
session.screen0.toolbar.visible: False
$ grep 'toolbar\.tools' ~/.fluxbox/init workspacename, prevworkspace, nextworkspace, iconbar, prevwindow, nextwindow, clock
[1]with a 2 seconds pause, in order to work around bug #585576

An eye on log files

Since you are the system administrator, you may want to read log files with your regular user (i.e.: without becoming root just for this). To make this possible, add your regular user (substitute $REGULARUSER with your username):

# adduser $REGULARUSER adm

A nice utility that can be used to display log files on the desktop is:

# aptitude install root-tail

In order to have it started on each Fluxbox session you open, insert the following three lines into your regular user's ~/.xsession file (between MANAGER and HANG POINT):

$ grep -A 2 'start log monitoring' ~/.xsession
# start log monitoring
root-tail -f -g 538x320+8+64 -font '-*-fixed-*-r-*-*-10-*-*-*-*-*-iso10646-*' \
  /var/log/messages,green /var/log/exim4/mainlog,yellow /var/log/kern.log,red

and the following two lines as well (after the HANG POINT):

$ grep -A 1 'stop log monitoring' ~/.xsession
# stop log monitoring
killall -TERM root-tail

System monitor

Install a nice system monitor and some auxiliary tools:

# aptitude install conky-std cowsay ddate

In order to configure the system monitor for your regular user, create the directory:

$ mkdir -p ~/.config/conky/

and edit ~/.config/conky/conky.conf so that it looks like:

$ cat ~/.config/conky/conky.conf
-- vim: syntax=lua

conky.config = {
    background = false, -- do not fork in the background
    font = '-*-terminus-*-r-*-*-12-*-*-*-*-*-iso10646-*', -- X font (w/o Xft)
    use_xft = false, -- do not use Xft
    update_interval = 2.0, -- update interval (in seconds)
    total_run_times = 0, -- run forever
    own_window = true, -- do not use root window, create own window instead
    own_window_type = 'override', -- desktop own window
    own_window_transparent = true, -- use pseudo transparency
    double_buffer = true, -- use double buffering
    minimum_width = 380, -- minimum width of text area
    draw_shades = true, -- draw shades
    draw_outline = false, -- do not draw outlines
    draw_borders = false, -- do not draw borders around text
    draw_graph_borders = true, -- draw borders around graphs
    stippled_borders = 8, -- stippled borders?
    border_inner_margin = 3, -- border margins and width
    border_outer_margin = 0,
    border_width = 1,
    default_color = 'white', -- default colors
    default_shade_color = 'black',
    default_outline_color = 'black',
    alignment = 'top_right', -- placement
    gap_x = 8, -- gap between borders of screen and text
    gap_y = 64,
    no_buffers = true, -- subtract file system buffers from used memory
    cpu_avg_samples = 2, -- number of cpu samples to average
    net_avg_samples = 2, -- number of net samples to average
    override_utf8_locale = true, -- need to force UTF8
    use_spacer = 'left', -- add spaces to keep things from moving about
    text_buffer_size = 640, -- set buffer size (in bytes) for exec outputs
    if_up_strictness = 'address', -- set if_up check strictness

-- stuff to be formatted on screen
conky.text = [[
${color green}Host:$color $nodename - $sysname $kernel on $machine
${color green}Time:$color ${time %a, %d %b %Y %T %z}${color green} - Unix time:$color ${time %s} s
${color green}Uptime:$color $uptime
${color green}Load Average:$color $loadavg${color green} - Processes:$color $processes${color green} - Running:$color $running_processes
${color green}CPU usage         %CPU   %MEM   RAM usage         %CPU   %MEM
${color} ${top name 1} ${top cpu 1} ${top mem 1}  ${top_mem name 1} ${top_mem cpu 1} ${top_mem mem 1}
${color} ${top name 2} ${top cpu 2} ${top mem 2}  ${top_mem name 2} ${top_mem cpu 2} ${top_mem mem 2}
${color} ${top name 3} ${top cpu 3} ${top mem 3}  ${top_mem name 3} ${top_mem cpu 3} ${top_mem mem 3}
${color green}CPU Clock Frequencies:$color ${freq 1} MHz  ${freq 2} MHz  ${freq 3} MHz  ${freq 4} MHz
${color green}CPU Usage:$color $cpu % ${cpubar 6,100}${color green} - Disk I/O:$color $diskio/s
${color lightgrey}${cpugraph 30,190 0000ff ff0000} ${diskiograph 30,190 0000ff ff0000}
${color green}RAM Usage: $color $mem/$memmax - $memperc % ${membar}
${color green}Swap Usage:$color $swap/$swapmax - $swapperc % ${swapbar}
${color green}CPU Core Temperatures:$color ${hwmon 1 temp 2 1 273} K  ${hwmon 1 temp 3 1 273} K  ${hwmon 1 temp 4 1 273} K  ${hwmon 1 temp 5 1 273} K
${color green}CPU Fan:$color ${hwmon 0 fan 2 0.10472 0} rad/s${color green} - Chassis Fan:$color ${hwmon 0 fan 3 0.10472 0} rad/s
${color green}Network Ports:$color ${tcp_portmon 1 65535 count}
${if_up  enp0s25}${color green} enp0s25 - Upstream:$color ${upspeedf  enp0s25} KiB/s${color green} - Downstream:$color ${downspeedf  enp0s25} KiB/s
${color lightgrey}${upspeedgraph  enp0s25 30,190 0000ff ff0000} ${downspeedgraph  enp0s25 30,190 0000ff ff0000}$endif
${color green}Filesystems:
${color green} /     $color${fs_used     /}/${fs_size     /} ${fs_bar     /}
${color green} /usr  $color${fs_used  /usr}/${fs_size  /usr} ${fs_bar  /usr}
${color green} /var  $color${fs_used  /var}/${fs_size  /var} ${fs_bar  /var}
${color green} /tmp  $color${fs_used  /tmp}/${fs_size  /tmp} ${fs_bar  /tmp}
${color green} /home $color${fs_used /home}/${fs_size /home} ${fs_bar /home}
${color green}${execi 50 ddate}
${color green}${execi 65000 fortune -s | cowsay}

Please note that enp0s25 is the name of the primary network interface in our example workstation; you may issue the following command to find out the name of the primary network interface in yours:

$ /sbin/ifconfig

If you want to have the system monitor started on each Fluxbox session you open, insert the following two lines into your regular user's ~/.xsession file (between MANAGER and HANG POINT):

$ grep -A 1 'start system monitor' ~/.xsession
# start system monitor
conky &

and the following two lines as well (after the HANG POINT):

$ grep -A 1 'stop system monitor' ~/.xsession
# stop system monitor
killall -TERM conky

Desktop notifications

Install a desktop notification daemon:

# aptitude install notification-daemon

You probably want to have this daemon started on each Fluxbox session you open. In order to achieve this, just insert the following two lines into your regular user's ~/.xsession file (between MANAGER and HANG POINT):

$ grep -A 1 'start notification' .xsession
# start notification daemon
/usr/lib/notification-daemon/notification-daemon &

and the following two lines as well (after the HANG POINT):

$ grep -A 1 'stop notification' .xsession
# stop notification daemon
killall -TERM notification-daemon

You may also wish to install a command-line program to send desktop notifications:

# aptitude install libnotify-bin

An eye on software RAID

Install a little system tray icon to monitor software RAID changes:

# aptitude install systray-mdstat

If you want to have this notifier started on each Fluxbox session you open, insert the following two lines into your regular user's ~/.xsession file (between MANAGER and HANG POINT):

$ grep -A 1 'start mdstat notifier' ~/.xsession
# start mdstat notifier
systray-mdstat &

and the following two lines as well (after the HANG POINT):

$ grep -A 1 'stop mdstat notifier' ~/.xsession
# stop mdstat notifier
killall -TERM systray-mdstat

Text file graphical comparison and merging

Install the following package:

# aptitude --without-recommends install meld

Text editing with GUI support

Install a VIM variant with GTK2 support:

# aptitude install vim-gtk

Multilingual text input for X

In order to be able to enter text in various alphabets, for various languages, insert the following two lines into your regular user's ~/.xsession file (between MANAGER and HANG POINT):

$ grep -A 1 'multilingual keyboard' ~/.xsession
# configure multilingual keyboard
setxkbmap us,ru,gr -option compose:menu,grp:alt_caps_toggle,grp_led:scroll

This way, you can easily cycle from a US keyboard layout to a Russian and to a Greek one, by pressing [Alt+CapsLock]. The "Scroll Lock" LED light will be on whenever a layout other then the US one is being used. Also, the [Menu] key is used as a "Compose" key, in order to enter accented letters and other special signs and symbols. See the following man page for all the possible options:

$ man xkeyboard-config

In order to use the above input method with GTK+ and QT graphical applications, install the following package:

# aptitude install im-config

Please note that you may find the compose key combinations in /usr/share/X11/locale/en_US.UTF-8/Compose.

Common data for desktop environments

Install some common files for desktop environments:

# aptitude install desktop-base

File monitoring

Install a light-weight file monitoring system:

# aptitude install gamin

Application configuration management

Install the following tools to view and fine tune the configuration of applications that use DConf:

# aptitude install dconf-cli dconf-editor

X utilities

Install a small command-line tool to generate keyboard/mouse input events:

# aptitude install xdotool

Install a ruler to measure objects on the screen:

# aptitude install screenruler


Now you have a nice desktop to work in. Next step is installing and configuring some network tools. More details in a separate document (HTML, reST).