Project Zebra: that which is far off and exceeding deep ►

◄ WONTFIX and the band plays on

2017-07-09 📌 Project Zebra: Xfce marks the spot

Tags All Linux Tech Personal

This entry is part of my Project Zebra series covering migration to Linux for personal computing use.

A bit more spring-cleaning and stripping back this month.

Removed: SGT Puzzles (apparently part of an Xubuntu upgrade), Hedgewars (nice to know it exists, haven't run it once), Scribus (ditto – I don't really do layouts that can't be done in a word processor), SpaceFM, Redshift, qjackctl, Nautilus, furiousisomount, Gdebi, Calligra, dconfeditor, k3b, system-config-samba (which didn't work – I configured it by smb.conf). VeraCrypt, FoxitReader, AllTray took a bit more removing. I've kept Hugin installed even though I haven't had cause to use it yet (which will probably be with scans rather than photos).

Tidied up Whisker Menu, which is as convoluted a process as the Windows Start Menu – there are actually three locations scanned for .desktop files; ~/.local/share/applications plus /usr/share/applications and /usr/local/share/applications

Edited some .desktop files to move things out of the Development, Education and Games categories and hide them. Turned off Dropbox auto-start.

If you don't like the default "grip" lines in the middle of scrollbars in a GTK2 theme, under the engine "xfce" section in the gtkrc file add grip_style=none per https://wiki.xfce.org/howto/gtk_theme (further on down I'll update on my saltlake theme edit).

Which brings me to that Xfce desktop environment entry I've been meaning to write… although after looking at some other DEs and talking about GTK etc already, I'm not sure there's much left to say. It's a mature, traditional and standards-focused project that continues to be refined.

Just a quick recap on desktop environments, and have a look at the timeline diagram: https://en.wikipedia.org/wiki/Comparison_of_X_Window_System_desktop_environments

According to https://mail.xfce.org/pipermail/xfce/2006-May/017324.html early XFCE (XForms Common Environment as was) was conceived as a CDE-alike environment, which was used on old UNIXes and had a dock-style taskbar that in screenshots reminds me a bit of RISC OS – which gets its own retro love with https://en.wikipedia.org/wiki/ROX_Desktop A few interested people create CDE themes such as http://datazuul.blogspot.co.uk/2011/06/xfce-4-cde-theme.html and there's an open source version of it at https://sourceforge.net/projects/cdesktopenv/

There are some example historical screenshots here: http://www.xwinman.org/xfce.php

Like a lot of projects Xfce started small (in this case essentially as a taskbar) – similar to how the Enlightenment OS distro started as a desktop customisation. Xfce 2 added a window manager, Xfce 3 brought GTK, and the current Xfce 4 kicked off way back when with a release in 2003. These days development is focused on conversion to GTK3 in 4.14 (the first beta of 4.13 was released in May) and it's unlikely Wayland will follow until quite some time after that happens, since Xfwm4 is very heavily tied to X.

But setting aside architectural concerns about X I'm coming around to wondering why there's much rush, agreeing with:

https://forum.manjaro.org/t/mate-vs-xfce-in-the-future/16181/4

XFCE has weathered the GTK3 storm quite well, and will have it's GTK3 upgrade completed as the toolkit stabilizes. That is the beauty of XFCE it knows what it does well and generally takes the turtle vs hare approach.

On a personal taste note, I find all the Gnome based desktops feel restrictive in what I can and cannot easily configure. KDE and XFCE both offer a greater degree of freedom. I think they have worked together very well so far, having one truly cutting edge DE and one old boring stable one.

In short, as well as taking a considered long approach to adopting new things, Xfce embodies something I was quoting last month that sums up my entire outlook on software:

Simple things should be simple; complex things should be possible.

The only weaknesses I've really noticed so far are Thunar being fairly unstable – so I ditched it in favour of Nemo, which also has a nice multi pane option and is basically Gnome's Nautilus without the excessive dumbing down – and (early on) a multi-monitor setup needing an xrandr script to start up as wanted, plus the slight screen refresh inefficiencies common to X11 that aren't any more noticeable than Windows on the hardware I'm using.

Out of the relatively few core apps – list on https://en.wikipedia.org/wiki/Xfce – I don't use Orage, Parole or Mousepad either but they're perfectly serviceable basics for a calender, video player or text editor, and most users will have their own preferences for these sorts of things.

With that I'll try to shut up about desktop environments for a while, so any remaining monthly entries this year might end up very short indeed. I'll do that leaving a few more aide memoire links re: Xfce and the Xfce-using Ubuntu distro I'm currently running:

https://blog.xfce.org/
https://wiki.frugalware.org/index.php/XFCE
https://wiki.archlinux.org/index.php/Xfce
https://xubuntu.org/news/introducing-xubuntu-council/

https://en.wikipedia.org/wiki/Xubuntu

What follows is an pdate on the saltlake theme edit I'm using, going further and adding GTK3 style white menus to GTK2 apps so that Geany, XnViewMP (which uses qt5, so qt5ct adopts GTK2), Pinta, Filezilla, etc are consistent. Refs: https://developer.gnome.org/gtk2/stable/gtkobjects.html

 
GTK3 is still styled via ~/.config/gtk-3.0/gtk.css (see 2017 month five entry) whilst GTK2 is a product of ~/.gtkrc-2.0 (see original 2016 migration entry) and the following.

I'm sure it's a horrible kludge that contains unnecessary and/or undocumented bits, or I just don't fully understand the smooth_edge syntax that's in there to make sure that the outer menu borders show up, but it works well enough and I like it.

And there is slightly more padding to the GTK2 version on the right, but overall it balances out.

~/.themes/Xfce-saltlake-edit/gtk-2.0/gtkrc

/*

# http://www.orford.org/gtk/
# fg - Sets the foreground color of a widget.
# bg - Sets the background color of a widget.
# text - Sets the foreground color for widgets that have editable text.
# base - Sets the background color for widgets that have editable text.
# NORMAL - The normal state of a widget
# PRELIGHT - When the mouse is over top of the widget
# ACTIVE - When the widget is pressed or clicked it will be active
# INSENSITIVE - This is the state when a widget is 'greyed out'
# SELECTED - When an object is selected, it takes these attributes

*/

style "default"
{
    GtkButton::default_border         = {0, 0, 0, 0}
    GtkButton::default_outside_border = {0, 0, 0, 0}
    GtkButton::child_displacement_x   = 1
    GtkButton::child_displacement_y   = 1
    GtkButton::default_spacing        = 5
    GtkButton::focus-line-width       = 1
    GtkButton::focus-padding          = 0
    GtkCheckButton::indicator_size    = 15
    GtkRadioButton::indicator_size    = 15
    GtkMenuItem::selected_shadow_type = etched-in
    GtkPaned::handle_full_size        = 1
    GtkRange::slider_width            = 15
    GtkRange::stepper_size            = 15
    GtkRange::trough_border           = 0
    GtkScrollbar::min_slider_length   = 20
    GtkWidget::interior_focus         = 1
    GtkSeparatorMenuItem::horizontal-padding = 0

    xthickness = 2
    ythickness = 2

    fg[ACTIVE]        = "#000000"
    fg[INSENSITIVE]   = "#707070"
    fg[NORMAL]        = "#000000"
    fg[PRELIGHT]      = "#000000"
    fg[SELECTED]      = "#ffffff"

    bg[ACTIVE]        = "#CDCDC9"
    bg[INSENSITIVE]   = "#E4E4E0"
    bg[NORMAL]        = "#E4E4E0"
    bg[PRELIGHT]      = "#CCC9C5"
    bg[SELECTED]      = "#CDCDC9"

    base[ACTIVE]      = "#E5E5E5"
    base[INSENSITIVE] = "#E4E4E0"
    base[NORMAL]      = "#FFFFFF"
    base[PRELIGHT]    = "#CCC9C5"
    base[SELECTED]    = "#CCC9C5"

    text[ACTIVE]      = "#000000"
    text[INSENSITIVE] = "#707070"
    text[NORMAL]      = "#000000"
    text[PRELIGHT]    = "#000000"
    text[SELECTED]    = "#000000"

    engine "xfce"
    {
      smooth_edge = false
        boxfill
        {
            fill_style = plain
        }
    }

}

style "scrollbar"
{
    engine "xfce"
    {
      smooth_edge = false
	  grip_style = none 
        boxfill
        {
            fill_style = plain
        }
	}
}

style "menuitem" 
{
    bg[PRELIGHT]      = "#4a90d9"
    fg[PRELIGHT]      = "#ffffff"
    xthickness = 3
    ythickness = 5
}

style "menubar" = "menu"
{
    xthickness = 1
    ythickness = 2
    bg[INSENSITIVE]   = "#E4E4E0"
    bg[NORMAL]        = "#E4E4E0"
}

style "menusep" = "default"
{
    xthickness = 0
    ythickness = 1

}

style "thin" = "default"
{
    xthickness = 1
    ythickness = 1

}

style "rox" = "default"
{
  bg[NORMAL] = "#ffffff"
  bg[ACTIVE] = "#ffffff"
}

style "titlebar" = "default"
{
    bg[SELECTED]      = "#356DBF"
    fg[SELECTED]      = "#FFFFFF"
    bg[INSENSITIVE]   = "#CDCDC9"
    fg[INSENSITIVE]   = "#000000"

}

style "fixmenu"
{
    bg[NORMAL]      = "#ffffff"
    xthickness = 1
    ythickness = 1
    engine "xfce"
    {
      smooth_edge = true
        boxfill
        {
            fill_style = plain
        }
    }
}

widget_class "*"        			style "default"
widget_class "*Collection" 			style "rox"
widget "xfwm"	          			style "titlebar"
class "MetaFrames"        			style "titlebar"
widget_class "MetaFrames" 			style "titlebar"
widget_class "*Progress"  			style "thin" 
class "*Progress"         			style "thin" 
widget_class "*Menu*" 				style "fixmenu" 
class "*Menu*"        				style "fixmenu" 
widget_class "*MenuItem*" 			style "menuitem" 
class "*MenuItem*"        			style "menuitem" 
widget_class "*MenuBar*"   			style "menubar"
class "*MenuBar*"         			style "menubar"
widget_class "*Scroll*"   			style "scrollbar"
class "*Scroll*"           			style "scrollbar"
widget_class "*SeparatorMenuItem*"		style "menusep"
class "*SeparatorMenuItem*"			style "menusep"

💬 Comments are off, but you can use the mail form to contact or see the about page for social media links.