My XFCE4 Gentoo Linux Desktop – Development, Content-Creation and Productivity Tools


A few months ago I discussed whether I would be moving from Windows to another platform and the challenges that I could see myself facing in doing that.  Since then I’ve written about the technical aspects of my move to Gentoo Linux but today thought I’d look at how I’ve addressed my day-to-day workflow using a Linux workstation.A few months ago I discussed whether I would be moving from Windows to another platform and the challenges that I could see myself facing in doing that.  Since then I’ve written about the technical aspects of my move to Gentoo Linux but today thought I’d look at how I’ve addressed my day-to-day workflow using a Linux workstation.
Whilst I will describe everything I’ve done here and why the video above is probably your best bet to see this in action as a few screenshots aren’t going to help much so if you want the pretty pictures please do check out the video as it’s all covered in there.
The physical construction of an office is often forgotten when considering how you work.  Over the years I’ve come to realise that this is just as important as the software and hardware – there’s definitely some truth in needing somewhere that is laid out correctly and “zen” for me to be able to work most productively so my new office has me facing a window with 3 monitors towering in front of me.  I tend to use my topmost monitor for system monitoring or reading long documents, my left monitor for information supporting my current tasks (such as debug windows or reference documents) and my right monitor is where my current focus of attention is – i.e. at the moment this is where I’m running a word processor.
After my recent post where I setup X I made a few configuration changes.  For now I’ve just done these in my .xinitrc file as I haven’t yet propagated them to system-wide changes.  My file does a few things.

setxkbmap gb
setxkbmap -device 18 -layout gb -variant dvorak
xrandr --output DVI-D-0 --off --output HDMI-0 --mode 2560x1440 --pos 0x1200 --rotate normal --output DVI-I-1 --primary --mode 2560x1440 --pos 2560x1200 --rotate normal --output DVI-I-0 --off --output DP-1 --mode 1920x1200 --pos 1600x0 --rotate normal --output DP-0 --off
nvidia-settings --assign CurrentMetaMode="$(xrandr | sed -nr '/(\S+) connected (primary )?[0-9]+x[0-9]+(\+\S+).*/{ s//\1: nvidia-auto-select \3 { ForceFullCompositionPipeline = On }, /; H }; ${ g; s/\n//g; s/, $//; p }')"
exec startxfce4

The first line sets my keyboard layout to UK whilst the second line sets my second keyboard to Dvorak UK layout.  That’s right I’ve got two keyboards because I’m considering learning to use a Dvorak layout.  I’m yet to progress very far though but it’s nice to be able to have two different USB keyboards with different layouts.  The xrandr line sets where all the monitors are relative to each other – this is similar to how I configured it in my previous post but allows runtime changes.  I used the arandr utility to generate this line for me and then just have it run every time.  Finally the nvidia-settings line fixes an issue with screen tearing in Linux before XFCE is started.


I’ve really liked XFCE – it’s simple, lightweight and gives me a lot of flexibility in terms of how I want my layout.  I am actually a proponent of how Windows task bar works and am happy with that approach so I have 3 panels configured similarly to the Windows taskbar – on the top of my topmost monitor, on the left of my leftmost monitor and on the right of my rightmost monitor.  All of them have a Whisker launcher button at the top which provides a Windows-7-style start menu and they all have a digital clock at the bottom.  The top and left monitors show which applications are running on that screen whilst the main right monitor shows all applications that are running, has some quick launch buttons and shows current notifications.  I use Whisker primarily so that I can start applications quickly by part-typing the name of them or their executable.  I’ve got it also bound to Control+Space so that a simple Control+Space then partial application name will launch it.  Much quicker than many other alternatives although there’s definitely some room for improvement here as I tend to use this more like MacOS’ Spotlight and never actually navigate to select applications.
I’ve also setup some transparencies – any inactive window becomes slightly transparent so that I am immediately aware which my main window is.  This makes easy to immediately find what I’m working on and also helps me see what else is running without necessarily having to tab between applications.
The last bit of prettiness to discuss is colour themes.  I generally like a dark colour theme wherever possible.  I find a lot of white and light colouring on a screen gives me eyestrain and black-based themes are just way cooler.  I’ve got this working pretty nicely in most things but my particular theme does seem to have issues with some GTK applications.  I can live with it for now but need to tweak further at a future point.
I have a few different workflows and for each of those I’ll try to describe the applications I’ve selected.  The key thing is that I do run virtual machines on my system.  I’m currently using VMware Workstation (rather than kvm/qemu or Virtualbox).  I already have a commercial license for VMware and it integrates well with my ESXi hosts.  Whilst I could do all this with some other software the ease of integration won the argument for now.  I have three different virtual machines running on this PC and one of them is a Windows 10 desktop.  I’ve got these configured to start when the Linux machine itself boots – this does mean I cannot manage the VMs with the GUI but it means that before X has even appeared my Windows 10 machine and local domain controller are booted.  I connect to my virtual machine via Remote Desktop (using xfreerdp) and have it fullscreen on my main monitor.  The Windows 10 machine has the same size and position start menu as my XFCE panel and also shares a common background.  This gives a really nice integrated feel to just move my mouse in and out of the Windows world.  Whilst I could (and when programming would like to) move to multi-monitor remote desktop I find that this overall provides the best integration.  I provide disk sharing over the remote desktop session between Windows and Linux to make things even easier.  One thing I would say – audio sucks over the remote desktop.  At a future point I’ll be doing hardware passthrough, for now I just don’t run anything needing audio in Windows.
Looking through my different workflows then the first is day-to-day use – as a normal computer user what do I use?

  • Chrome.  I did try Midori and at some point want to move away from the beast that is Chrome so that I don’t feel I’m being continually tracked but honestly the ease of multi-platform integration wins over anything else at the moment.  I am considering re-evaluating this but need to really buy in to a different smartphone ecosystem for it to make any sense.
  • Pidgin.  This is my chat client I only use it for Google Hangouts as I prefer a traditional rather than web-based app.  It is ugly and makes me feel like I’m using Gaim from 1999… that being said, it does the job.
  • Polychromatic.  This manages all my Razer devices and allows me to control LEDs, DPI settings and any key bindings.
  • VLC.  Another “it does the job” application that has remained the core of Windows, Mac and Linux desktops for almost the last 20 years.  If I want to play any video or do anything weird with video streaming, this is my go-to.
  • Spotify.  I was so glad this was easy to get running in Linux.  I had to download a binary and install a couple of libraries that are used by it – but it was fairly trivial to get working and works fine once it’s launched.
  • Abiword.  It’s not exactly a full on office suite but I tend to use this just for jotting down short notes and as a very basic word processor.
  • TeXstudio.  Although most people probably won’t come across LaTeX in their life it is a markup language often used to create academic documents.  I use this for academic and TeXstudio is available across multiple platforms and how I create PDFs and edit LaTeX documents.
  • Microsoft Office.  Still the daddy of everything productivity – I use Excel, PowerPoint, Word and Outlook on a regular basis.  No free office solution is a patch on this and I have a license for Office so would be mad not to use it.  Suffice to say this runs in my Windows virtual machine.
  • Microsoft Remote Desktop Client.  Although I use xfreerdp to connect to my Windows 10 machine I use the official Microsoft client from there out.

As a developer there are a few specific tools I use in addition to all the console-based development that is easy to undertake in Linux:

  • Visual Studio Code.  I use this primarily for simple C/C++ and Python.  It’s Microsoft’s free attempt at something like Sublime with a selection of great plugins and is truly cross platform.  It’s not a full IDE yet but can offer debugging and some quite interesting profiles (even Arduino targeting).  I’m enjoying using this more as time progresses.  This was a binary install but worked straight out the box.
  • Arduino.  I currently have the Arduino IDE installed but have always hated it.  It’s functional and the same on Linux as MacOS and Windows.  I’m looking at moving my Arduino dev over to Visual Studio Code once I can get external programmers working with it.
  • Android Studio.  I rarely write mobile apps these days but when I do they tend to be simple Android apps for me to control some hardware I’ve built myself using an Arduino.  I much prefer this to Eclipse and it’s the go-to way to develop Android apps across platforms – I still dislike Java IDEs though.
  • Visual Studio.  The daddy of IDEs and still my favourite.  This single application is probably one of the best ever created and in my opinion kills all other IDEs.  I run this in my VM and it is a little bit slower than native but more than usable.  I still work on quite a few projects using C# and won’t be switching from Visual Studio at any point in the future – it justifies my MSDN subscription by itself and my Windows VM is worth it just for this.  I do wish I had multi-monitor support at times.

The other main thing I do is content creation for my YouTube channel.  Other than basic productivity tools there are a few key applications I use:

  • Lightworks Pro.  Sadly Adobe don’t want to support the Linux platform and I was very happy with Premiere Pro.  I looked at a lot of options (probably more than a dozen) for video editing – even considering using Blender.  Whilst I was assessing options DaVinci Resolve even came out with a greatly improved version (lacking any audio monitoring support without dedicated hardware… massive face palm there).  After all that I finally settled on Lightworks with a commercial license (around $15/month).  It’s not Premiere Pro but it works and in some cases actually renders faster than Premiere Pro did on the same hardware.  I still miss Premiere Pro – but having used it once through Remote Desktop I won’t be making that mistake again.
  • Handbrake.  I use this for taking videos recorded on my phone with audio and putting them into a fixed framerate.  Some editing software doesn’t play well with variable framerate video.  Premiere Pro worked fine with video from my Android phone but not my iPhone.  Lightworks is the opposite.  I tend to run the video through here immediately after recording and before importing it to Lightworks.  I run this in Linux but this is cross-platform and was part of my Windows toolset.
  • Audacity.  Another cross-platform gem that I’ve used for an incredibly long time and run on Linux.  This is an audio editor that I normally only use if I want to remove any background noise from a clip or compress/normalise it.  I used to use this a lot but these days tend to record audio in a much better format directly into my camera.
  • Paint.Net.  I use this for creating Thumbnails for my videos.  I still use this in my Windows virtual machine.  Ideally I’d like to switch to Gimp in Linux but simply haven’t had the time to learn to use it yet along with everything else.
  • OBS.  My final cross-platform gem – I use this for desktop recording.  Although I don’t stream I do record videos from individual applications or Windows and have always liked OBS.  The Linux version is on a par with the Windows one.

Finally I’m also interested in crypto currencies and tend to run and control mining software in the Linux side (currently Riecoin and Burst) whilst I have the GUI wallets (including a few other coins) in the Windows side.
And that’s everything.  I know this is a little different to my normal posts but thought it would be nice to tie together everything I’ve been doing to get a functional Linux system up and running and I hope you found it useful.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s